Improve user experience
							parent
							
								
									bf45b64135
								
							
						
					
					
						commit
						abc456b7d1
					
				| 
						 | 
					@ -10,16 +10,17 @@
 | 
				
			||||||
      "dependencies": {
 | 
					      "dependencies": {
 | 
				
			||||||
        "@jamescoyle/vue-icon": "^0.1.2",
 | 
					        "@jamescoyle/vue-icon": "^0.1.2",
 | 
				
			||||||
        "@mdi/js": "^7.4.47",
 | 
					        "@mdi/js": "^7.4.47",
 | 
				
			||||||
 | 
					        "@programic/vue3-tooltip": "^1.0.0",
 | 
				
			||||||
        "axios": "^1.7.7",
 | 
					        "axios": "^1.7.7",
 | 
				
			||||||
        "bootstrap-icons": "^1.11.3",
 | 
					        "bootstrap-icons": "^1.11.3",
 | 
				
			||||||
        "css.gg": "^2.1.4",
 | 
					        "css.gg": "^2.1.4",
 | 
				
			||||||
        "moment": "^2.30.1",
 | 
					        "moment": "^2.30.1",
 | 
				
			||||||
        "moment-timezone": "^0.5.46",
 | 
					        "moment-timezone": "^0.5.46",
 | 
				
			||||||
        "pinia": "^2.2.4",
 | 
					        "pinia": "^2.2.4",
 | 
				
			||||||
        "v-tooltip": "^2.1.3",
 | 
					 | 
				
			||||||
        "vue": "^3.5.12",
 | 
					        "vue": "^3.5.12",
 | 
				
			||||||
        "vue-router": "^4.4.5",
 | 
					        "vue-router": "^4.4.5",
 | 
				
			||||||
        "vue-select": "^4.0.0-beta.6"
 | 
					        "vue-select": "^4.0.0-beta.6",
 | 
				
			||||||
 | 
					        "vue3-tooltip": "^2.2.4"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "devDependencies": {
 | 
					      "devDependencies": {
 | 
				
			||||||
        "@tsconfig/node20": "^20.1.4",
 | 
					        "@tsconfig/node20": "^20.1.4",
 | 
				
			||||||
| 
						 | 
					@ -112,18 +113,6 @@
 | 
				
			||||||
        "node": ">=6.0.0"
 | 
					        "node": ">=6.0.0"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/@babel/runtime": {
 | 
					 | 
				
			||||||
      "version": "7.25.9",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.9.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-4zpTHZ9Cm6L9L+uIqghQX8ZXg8HKFcjYO3qHoO8zTmRm6HQUJ8SSJ+KRvbMBZn0EGVlT4DRYeQ/6hjlyXBh+Kg==",
 | 
					 | 
				
			||||||
      "license": "MIT",
 | 
					 | 
				
			||||||
      "dependencies": {
 | 
					 | 
				
			||||||
        "regenerator-runtime": "^0.14.0"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "engines": {
 | 
					 | 
				
			||||||
        "node": ">=6.9.0"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/@babel/types": {
 | 
					    "node_modules/@babel/types": {
 | 
				
			||||||
      "version": "7.25.9",
 | 
					      "version": "7.25.9",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.9.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.9.tgz",
 | 
				
			||||||
| 
						 | 
					@ -772,6 +761,31 @@
 | 
				
			||||||
        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
 | 
					        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "node_modules/@floating-ui/core": {
 | 
				
			||||||
 | 
					      "version": "1.6.8",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==",
 | 
				
			||||||
 | 
					      "license": "MIT",
 | 
				
			||||||
 | 
					      "dependencies": {
 | 
				
			||||||
 | 
					        "@floating-ui/utils": "^0.2.8"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "node_modules/@floating-ui/dom": {
 | 
				
			||||||
 | 
					      "version": "1.6.12",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.12.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==",
 | 
				
			||||||
 | 
					      "license": "MIT",
 | 
				
			||||||
 | 
					      "dependencies": {
 | 
				
			||||||
 | 
					        "@floating-ui/core": "^1.6.0",
 | 
				
			||||||
 | 
					        "@floating-ui/utils": "^0.2.8"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "node_modules/@floating-ui/utils": {
 | 
				
			||||||
 | 
					      "version": "0.2.8",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==",
 | 
				
			||||||
 | 
					      "license": "MIT"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "node_modules/@humanfs/core": {
 | 
					    "node_modules/@humanfs/core": {
 | 
				
			||||||
      "version": "0.19.0",
 | 
					      "version": "0.19.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.0.tgz",
 | 
				
			||||||
| 
						 | 
					@ -982,6 +996,29 @@
 | 
				
			||||||
        "url": "https://opencollective.com/unts"
 | 
					        "url": "https://opencollective.com/unts"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "node_modules/@programic/vue3-tooltip": {
 | 
				
			||||||
 | 
					      "version": "1.0.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/@programic/vue3-tooltip/-/vue3-tooltip-1.0.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-KNg0WzMISQuR7cTuuxPgcwEuyYF3dULIMCzt8P/LnOpJv0hM77lxo0u6TPM7BlnoYrYdcOotfcSoE1KJlu5BwQ==",
 | 
				
			||||||
 | 
					      "license": "MIT",
 | 
				
			||||||
 | 
					      "dependencies": {
 | 
				
			||||||
 | 
					        "@floating-ui/dom": "^1.0.2",
 | 
				
			||||||
 | 
					        "uuid": "^9.0.0"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "node_modules/@programic/vue3-tooltip/node_modules/uuid": {
 | 
				
			||||||
 | 
					      "version": "9.0.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
 | 
				
			||||||
 | 
					      "funding": [
 | 
				
			||||||
 | 
					        "https://github.com/sponsors/broofa",
 | 
				
			||||||
 | 
					        "https://github.com/sponsors/ctavan"
 | 
				
			||||||
 | 
					      ],
 | 
				
			||||||
 | 
					      "license": "MIT",
 | 
				
			||||||
 | 
					      "bin": {
 | 
				
			||||||
 | 
					        "uuid": "dist/bin/uuid"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "node_modules/@rollup/rollup-android-arm-eabi": {
 | 
					    "node_modules/@rollup/rollup-android-arm-eabi": {
 | 
				
			||||||
      "version": "4.24.0",
 | 
					      "version": "4.24.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.0.tgz",
 | 
				
			||||||
| 
						 | 
					@ -4946,6 +4983,7 @@
 | 
				
			||||||
      "version": "4.17.21",
 | 
					      "version": "4.17.21",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
 | 
				
			||||||
      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
 | 
					      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
 | 
				
			||||||
 | 
					      "dev": true,
 | 
				
			||||||
      "license": "MIT"
 | 
					      "license": "MIT"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/lodash.merge": {
 | 
					    "node_modules/lodash.merge": {
 | 
				
			||||||
| 
						 | 
					@ -5820,17 +5858,6 @@
 | 
				
			||||||
        "node": ">= 6"
 | 
					        "node": ">= 6"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/popper.js": {
 | 
					 | 
				
			||||||
      "version": "1.16.1",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==",
 | 
					 | 
				
			||||||
      "deprecated": "You can find the new Popper v2 at @popperjs/core, this package is dedicated to the legacy v1",
 | 
					 | 
				
			||||||
      "license": "MIT",
 | 
					 | 
				
			||||||
      "funding": {
 | 
					 | 
				
			||||||
        "type": "opencollective",
 | 
					 | 
				
			||||||
        "url": "https://opencollective.com/popperjs"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/postcss": {
 | 
					    "node_modules/postcss": {
 | 
				
			||||||
      "version": "8.4.47",
 | 
					      "version": "8.4.47",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz",
 | 
				
			||||||
| 
						 | 
					@ -6177,12 +6204,6 @@
 | 
				
			||||||
        "node": ">=8.10.0"
 | 
					        "node": ">=8.10.0"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/regenerator-runtime": {
 | 
					 | 
				
			||||||
      "version": "0.14.1",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
 | 
					 | 
				
			||||||
      "license": "MIT"
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/request-progress": {
 | 
					    "node_modules/request-progress": {
 | 
				
			||||||
      "version": "3.0.0",
 | 
					      "version": "3.0.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz",
 | 
				
			||||||
| 
						 | 
					@ -6507,6 +6528,7 @@
 | 
				
			||||||
      "version": "0.6.1",
 | 
					      "version": "0.6.1",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
 | 
				
			||||||
      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
 | 
					      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
 | 
				
			||||||
 | 
					      "dev": true,
 | 
				
			||||||
      "license": "BSD-3-Clause",
 | 
					      "license": "BSD-3-Clause",
 | 
				
			||||||
      "engines": {
 | 
					      "engines": {
 | 
				
			||||||
        "node": ">=0.10.0"
 | 
					        "node": ">=0.10.0"
 | 
				
			||||||
| 
						 | 
					@ -7190,73 +7212,6 @@
 | 
				
			||||||
        "uuid": "dist/bin/uuid"
 | 
					        "uuid": "dist/bin/uuid"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/v-tooltip": {
 | 
					 | 
				
			||||||
      "version": "2.1.3",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/v-tooltip/-/v-tooltip-2.1.3.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-xXngyxLQTOx/yUEy50thb8te7Qo4XU6h4LZB6cvEfVd9mnysUxLEoYwGWDdqR+l69liKsy3IPkdYff3J1gAJ5w==",
 | 
					 | 
				
			||||||
      "license": "MIT",
 | 
					 | 
				
			||||||
      "dependencies": {
 | 
					 | 
				
			||||||
        "@babel/runtime": "^7.13.10",
 | 
					 | 
				
			||||||
        "lodash": "^4.17.21",
 | 
					 | 
				
			||||||
        "popper.js": "^1.16.1",
 | 
					 | 
				
			||||||
        "vue-resize": "^1.0.1"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/v-tooltip/node_modules/@vue/compiler-sfc": {
 | 
					 | 
				
			||||||
      "version": "2.7.16",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.16.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-KWhJ9k5nXuNtygPU7+t1rX6baZeqOYLEforUPjgNDBnLicfHCoi48H87Q8XyLZOrNNsmhuwKqtpDQWjEFe6Ekg==",
 | 
					 | 
				
			||||||
      "peer": true,
 | 
					 | 
				
			||||||
      "dependencies": {
 | 
					 | 
				
			||||||
        "@babel/parser": "^7.23.5",
 | 
					 | 
				
			||||||
        "postcss": "^8.4.14",
 | 
					 | 
				
			||||||
        "source-map": "^0.6.1"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "optionalDependencies": {
 | 
					 | 
				
			||||||
        "prettier": "^1.18.2 || ^2.0.0"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/v-tooltip/node_modules/prettier": {
 | 
					 | 
				
			||||||
      "version": "2.8.8",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
 | 
					 | 
				
			||||||
      "license": "MIT",
 | 
					 | 
				
			||||||
      "optional": true,
 | 
					 | 
				
			||||||
      "peer": true,
 | 
					 | 
				
			||||||
      "bin": {
 | 
					 | 
				
			||||||
        "prettier": "bin-prettier.js"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "engines": {
 | 
					 | 
				
			||||||
        "node": ">=10.13.0"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "funding": {
 | 
					 | 
				
			||||||
        "url": "https://github.com/prettier/prettier?sponsor=1"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/v-tooltip/node_modules/vue": {
 | 
					 | 
				
			||||||
      "version": "2.7.16",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.16.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw==",
 | 
					 | 
				
			||||||
      "deprecated": "Vue 2 has reached EOL and is no longer actively maintained. See https://v2.vuejs.org/eol/ for more details.",
 | 
					 | 
				
			||||||
      "license": "MIT",
 | 
					 | 
				
			||||||
      "peer": true,
 | 
					 | 
				
			||||||
      "dependencies": {
 | 
					 | 
				
			||||||
        "@vue/compiler-sfc": "2.7.16",
 | 
					 | 
				
			||||||
        "csstype": "^3.1.0"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/v-tooltip/node_modules/vue-resize": {
 | 
					 | 
				
			||||||
      "version": "1.0.1",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/vue-resize/-/vue-resize-1.0.1.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-z5M7lJs0QluJnaoMFTIeGx6dIkYxOwHThlZDeQnWZBizKblb99GSejPnK37ZbNE/rVwDcYcHY+Io+AxdpY952w==",
 | 
					 | 
				
			||||||
      "license": "MIT",
 | 
					 | 
				
			||||||
      "dependencies": {
 | 
					 | 
				
			||||||
        "@babel/runtime": "^7.13.10"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "peerDependencies": {
 | 
					 | 
				
			||||||
        "vue": "^2.6.0"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/verror": {
 | 
					    "node_modules/verror": {
 | 
				
			||||||
      "version": "1.10.0",
 | 
					      "version": "1.10.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
 | 
				
			||||||
| 
						 | 
					@ -7556,6 +7511,15 @@
 | 
				
			||||||
        "typescript": ">=5.0.0"
 | 
					        "typescript": ">=5.0.0"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "node_modules/vue3-tooltip": {
 | 
				
			||||||
 | 
					      "version": "2.2.4",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/vue3-tooltip/-/vue3-tooltip-2.2.4.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-oQPDBduZpELNg8I3pJR2+zztI6pfIstaVGO+3uKu0RwJlQJ0FqApbggKOFLy/LW6g2Yjcaau22taxAt6ErxuSw==",
 | 
				
			||||||
 | 
					      "license": "MIT",
 | 
				
			||||||
 | 
					      "peerDependencies": {
 | 
				
			||||||
 | 
					        "vue": "^3.2.47"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "node_modules/w3c-xmlserializer": {
 | 
					    "node_modules/w3c-xmlserializer": {
 | 
				
			||||||
      "version": "5.0.0",
 | 
					      "version": "5.0.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,16 +17,17 @@
 | 
				
			||||||
  "dependencies": {
 | 
					  "dependencies": {
 | 
				
			||||||
    "@jamescoyle/vue-icon": "^0.1.2",
 | 
					    "@jamescoyle/vue-icon": "^0.1.2",
 | 
				
			||||||
    "@mdi/js": "^7.4.47",
 | 
					    "@mdi/js": "^7.4.47",
 | 
				
			||||||
 | 
					    "@programic/vue3-tooltip": "^1.0.0",
 | 
				
			||||||
    "axios": "^1.7.7",
 | 
					    "axios": "^1.7.7",
 | 
				
			||||||
    "bootstrap-icons": "^1.11.3",
 | 
					    "bootstrap-icons": "^1.11.3",
 | 
				
			||||||
    "css.gg": "^2.1.4",
 | 
					    "css.gg": "^2.1.4",
 | 
				
			||||||
    "moment": "^2.30.1",
 | 
					    "moment": "^2.30.1",
 | 
				
			||||||
    "moment-timezone": "^0.5.46",
 | 
					    "moment-timezone": "^0.5.46",
 | 
				
			||||||
    "pinia": "^2.2.4",
 | 
					    "pinia": "^2.2.4",
 | 
				
			||||||
    "v-tooltip": "^2.1.3",
 | 
					 | 
				
			||||||
    "vue": "^3.5.12",
 | 
					    "vue": "^3.5.12",
 | 
				
			||||||
    "vue-router": "^4.4.5",
 | 
					    "vue-router": "^4.4.5",
 | 
				
			||||||
    "vue-select": "^4.0.0-beta.6"
 | 
					    "vue-select": "^4.0.0-beta.6",
 | 
				
			||||||
 | 
					    "vue3-tooltip": "^2.2.4"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "devDependencies": {
 | 
					  "devDependencies": {
 | 
				
			||||||
    "@tsconfig/node20": "^20.1.4",
 | 
					    "@tsconfig/node20": "^20.1.4",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,10 @@
 | 
				
			||||||
<script setup lang="ts">
 | 
					<script setup lang="ts">
 | 
				
			||||||
import { RouterLink, RouterView } from "vue-router";
 | 
					import { RouterLink, RouterView } from "vue-router";
 | 
				
			||||||
 | 
					import { useAuthStore } from "./stores/auth";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const baseUrl = window.location.origin;
 | 
					const baseUrl = window.location.origin;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const authStore = useAuthStore();
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
| 
						 | 
					@ -11,7 +14,14 @@ const baseUrl = window.location.origin;
 | 
				
			||||||
        <h1>availabili.tf</h1>
 | 
					        <h1>availabili.tf</h1>
 | 
				
			||||||
        <RouterLink to="/">Home</RouterLink>
 | 
					        <RouterLink to="/">Home</RouterLink>
 | 
				
			||||||
        <RouterLink to="/schedule">Schedule</RouterLink>
 | 
					        <RouterLink to="/schedule">Schedule</RouterLink>
 | 
				
			||||||
        <form action="https://steamcommunity.com/openid/login" method="get">
 | 
					        <div v-if="authStore.isLoggedIn">
 | 
				
			||||||
 | 
					          Welcome {{ authStore.username }}
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <form
 | 
				
			||||||
 | 
					          v-else
 | 
				
			||||||
 | 
					          action="https://steamcommunity.com/openid/login"
 | 
				
			||||||
 | 
					          method="get"
 | 
				
			||||||
 | 
					        >
 | 
				
			||||||
          <input type="hidden" name="openid.identity"
 | 
					          <input type="hidden" name="openid.identity"
 | 
				
			||||||
                 value="http://specs.openid.net/auth/2.0/identifier_select" />
 | 
					                 value="http://specs.openid.net/auth/2.0/identifier_select" />
 | 
				
			||||||
          <input type="hidden" name="openid.claimed_id"
 | 
					          <input type="hidden" name="openid.claimed_id"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -27,12 +27,13 @@ a.button {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
button {
 | 
					button {
 | 
				
			||||||
  display: flex;
 | 
					  display: flex;
 | 
				
			||||||
 | 
					  align-items: center;
 | 
				
			||||||
  gap: 4px;
 | 
					  gap: 4px;
 | 
				
			||||||
  /*font-weight: 700;*/
 | 
					 | 
				
			||||||
  color: var(--text);
 | 
					  color: var(--text);
 | 
				
			||||||
  background-color: var(--crust);
 | 
					  background-color: var(--crust);
 | 
				
			||||||
  border: none;
 | 
					  border: none;
 | 
				
			||||||
  padding: 10px 20px;
 | 
					  padding: 6px 20px;
 | 
				
			||||||
 | 
					  line-height: 1.6;
 | 
				
			||||||
  border-radius: 4px;
 | 
					  border-radius: 4px;
 | 
				
			||||||
  font-family:
 | 
					  font-family:
 | 
				
			||||||
    Inter,
 | 
					    Inter,
 | 
				
			||||||
| 
						 | 
					@ -51,8 +52,22 @@ button {
 | 
				
			||||||
  transition-duration: 200ms;
 | 
					  transition-duration: 200ms;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					button.icon {
 | 
				
			||||||
 | 
					  background-color: transparent;
 | 
				
			||||||
 | 
					  padding: 8px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					button.icon:hover {
 | 
				
			||||||
 | 
					  background-color: var(--surface-0);
 | 
				
			||||||
 | 
					  border-radius: 4px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					button.icon i.bi {
 | 
				
			||||||
 | 
					  transform: translateY(-0.5px);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
button > i.bi {
 | 
					button > i.bi {
 | 
				
			||||||
  transform: translateY(1px);
 | 
					  /*transform: translateY(1px);*/
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
button > i.bi.margin {
 | 
					button > i.bi.margin {
 | 
				
			||||||
| 
						 | 
					@ -131,7 +146,7 @@ details > summary {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
details.accordion {
 | 
					details.accordion {
 | 
				
			||||||
  padding: 16px;
 | 
					  padding: 20px;
 | 
				
			||||||
  background-color: var(--mantle);
 | 
					  background-color: var(--mantle);
 | 
				
			||||||
  border: 1px solid var(--mantle);
 | 
					  border: 1px solid var(--mantle);
 | 
				
			||||||
  border-radius: 8px;
 | 
					  border-radius: 8px;
 | 
				
			||||||
| 
						 | 
					@ -237,3 +252,8 @@ input {
 | 
				
			||||||
  display: flex;
 | 
					  display: flex;
 | 
				
			||||||
  justify-content: end;
 | 
					  justify-content: end;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					hr {
 | 
				
			||||||
 | 
					  border: none;
 | 
				
			||||||
 | 
					  border-top: 1px solid var(--surface-0);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -39,22 +39,6 @@ function leaveTeam() {
 | 
				
			||||||
      {{ availableMembersNextHour?.length }} available in the next hour
 | 
					      {{ availableMembersNextHour?.length }} available in the next hour
 | 
				
			||||||
    </em>
 | 
					    </em>
 | 
				
			||||||
    <div class="team-details-button-group">
 | 
					    <div class="team-details-button-group">
 | 
				
			||||||
      <RouterLink class="button" :to="'/schedule?teamId=' + team.id">
 | 
					 | 
				
			||||||
        <button>
 | 
					 | 
				
			||||||
          <i class="bi bi-calendar-fill"></i>
 | 
					 | 
				
			||||||
        </button>
 | 
					 | 
				
			||||||
      </RouterLink>
 | 
					 | 
				
			||||||
      <RouterLink class="button" :to="{ name: 'team-settings/' }">
 | 
					 | 
				
			||||||
        <button>
 | 
					 | 
				
			||||||
          <i class="bi bi-gear-fill"></i>
 | 
					 | 
				
			||||||
        </button>
 | 
					 | 
				
			||||||
      </RouterLink>
 | 
					 | 
				
			||||||
      <button
 | 
					 | 
				
			||||||
        class="destructive"
 | 
					 | 
				
			||||||
        @click="leaveTeam"
 | 
					 | 
				
			||||||
      >
 | 
					 | 
				
			||||||
        Leave
 | 
					 | 
				
			||||||
      </button>
 | 
					 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
  </div>
 | 
					  </div>
 | 
				
			||||||
  <table class="member-table">
 | 
					  <table class="member-table">
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,6 +7,7 @@ import { type ViewTeamMembersResponse, type TeamSchema, RoleSchema } from "@/cli
 | 
				
			||||||
import SvgIcon from "@jamescoyle/vue-icon";
 | 
					import SvgIcon from "@jamescoyle/vue-icon";
 | 
				
			||||||
import { mdiCrown } from "@mdi/js";
 | 
					import { mdiCrown } from "@mdi/js";
 | 
				
			||||||
import RoleTag from "../components/RoleTag.vue";
 | 
					import RoleTag from "../components/RoleTag.vue";
 | 
				
			||||||
 | 
					import moment from "moment";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const props = defineProps({
 | 
					const props = defineProps({
 | 
				
			||||||
  player: {
 | 
					  player: {
 | 
				
			||||||
| 
						 | 
					@ -83,6 +84,42 @@ const isUnavailable = computed(() => {
 | 
				
			||||||
  return props.player?.availability[0] == 0 &&
 | 
					  return props.player?.availability[0] == 0 &&
 | 
				
			||||||
    props.player?.availability[1] == 0;
 | 
					    props.player?.availability[1] == 0;
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const nextHour = computed(() => {
 | 
				
			||||||
 | 
					  const now = moment().utc();
 | 
				
			||||||
 | 
					  const time = now.clone().tz(props.team.tzTimezone);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (time.minute() >= props.team.minuteOffset) {
 | 
				
			||||||
 | 
					    time.add(1, "hour");
 | 
				
			||||||
 | 
					    time.minute(props.team.minuteOffset);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const diff = time.utc().diff(now, "minutes", false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return `${diff} minute(s) (${time.local().format("LT")})`;
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const leftIndicator = computed(() => {
 | 
				
			||||||
 | 
					  switch (props.player?.availability[0]) {
 | 
				
			||||||
 | 
					    case 0:
 | 
				
			||||||
 | 
					      return "Not currently available";
 | 
				
			||||||
 | 
					    case 1:
 | 
				
			||||||
 | 
					      return "Currently available if needed";
 | 
				
			||||||
 | 
					    case 2:
 | 
				
			||||||
 | 
					      return "Currently available";
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const rightIndicator = computed(() => {
 | 
				
			||||||
 | 
					  switch (props.player?.availability[1]) {
 | 
				
			||||||
 | 
					    case 0:
 | 
				
			||||||
 | 
					      return `Not available in ${nextHour.value}`;
 | 
				
			||||||
 | 
					    case 1:
 | 
				
			||||||
 | 
					      return `Available if needed in ${nextHour.value}`;
 | 
				
			||||||
 | 
					    case 2:
 | 
				
			||||||
 | 
					      return `Available in ${nextHour.value}`;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
| 
						 | 
					@ -95,10 +132,12 @@ const isUnavailable = computed(() => {
 | 
				
			||||||
        <div class="status-indicators">
 | 
					        <div class="status-indicators">
 | 
				
			||||||
          <span
 | 
					          <span
 | 
				
			||||||
            class="indicator left-indicator"
 | 
					            class="indicator left-indicator"
 | 
				
			||||||
 | 
					            v-tooltip="leftIndicator"
 | 
				
			||||||
            :availability="player.availability[0]"
 | 
					            :availability="player.availability[0]"
 | 
				
			||||||
          />
 | 
					          />
 | 
				
			||||||
          <span
 | 
					          <span
 | 
				
			||||||
            class="indicator right-indicator"
 | 
					            class="indicator right-indicator"
 | 
				
			||||||
 | 
					            v-tooltip="rightIndicator"
 | 
				
			||||||
            :availability="player.availability[1]"
 | 
					            :availability="player.availability[1]"
 | 
				
			||||||
          />
 | 
					          />
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
| 
						 | 
					@ -118,15 +157,23 @@ const isUnavailable = computed(() => {
 | 
				
			||||||
            v-model="roles[i]"
 | 
					            v-model="roles[i]"
 | 
				
			||||||
          />
 | 
					          />
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
        <template v-else>
 | 
					        <template v-else-if="player.roles.length > 0">
 | 
				
			||||||
          <i
 | 
					          <div
 | 
				
			||||||
 | 
					            class="role-icon"
 | 
				
			||||||
            v-for="role in player.roles"
 | 
					            v-for="role in player.roles"
 | 
				
			||||||
 | 
					            v-tooltip="rosterStore.roleNames[role.role]"
 | 
				
			||||||
 | 
					          >
 | 
				
			||||||
 | 
					            <i
 | 
				
			||||||
              :class="{
 | 
					              :class="{
 | 
				
			||||||
                [rosterStore.roleIcons[role.role]]: true,
 | 
					                [rosterStore.roleIcons[role.role]]: true,
 | 
				
			||||||
                main: role.isMain,
 | 
					                main: role.isMain,
 | 
				
			||||||
              }"
 | 
					              }"
 | 
				
			||||||
            />
 | 
					            />
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
        </template>
 | 
					        </template>
 | 
				
			||||||
 | 
					        <span v-else>
 | 
				
			||||||
 | 
					          No roles
 | 
				
			||||||
 | 
					        </span>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
    </td>
 | 
					    </td>
 | 
				
			||||||
    <td>
 | 
					    <td>
 | 
				
			||||||
| 
						 | 
					@ -209,7 +256,7 @@ const isUnavailable = computed(() => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.role-icons i {
 | 
					.role-icons i {
 | 
				
			||||||
  font-size: 24px;
 | 
					  font-size: 24px;
 | 
				
			||||||
  line-height: 0;
 | 
					  line-height: 1;
 | 
				
			||||||
  color: var(--overlay-0);
 | 
					  color: var(--overlay-0);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,14 +4,17 @@ import "vue-select/dist/vue-select.css";
 | 
				
			||||||
import { createApp } from "vue";
 | 
					import { createApp } from "vue";
 | 
				
			||||||
import { createPinia } from "pinia";
 | 
					import { createPinia } from "pinia";
 | 
				
			||||||
import VueSelect from "vue-select";
 | 
					import VueSelect from "vue-select";
 | 
				
			||||||
 | 
					import { TooltipDirective } from "vue3-tooltip";
 | 
				
			||||||
 | 
					import "vue3-tooltip/tooltip.css";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import App from "./App.vue";
 | 
					import App from "./App.vue";
 | 
				
			||||||
import router from "./router";
 | 
					import router from "./router";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const app = createApp(App)
 | 
					const app = createApp(App);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
app.use(createPinia())
 | 
					app.use(createPinia());
 | 
				
			||||||
app.use(router)
 | 
					app.use(router);
 | 
				
			||||||
 | 
					app.directive("tooltip", TooltipDirective);
 | 
				
			||||||
app.component("v-select", VueSelect);
 | 
					app.component("v-select", VueSelect);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
app.mount("#app")
 | 
					app.mount("#app");
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -31,6 +31,8 @@ export const useScheduleStore = defineStore("schedule", () => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const overlay: Ref<AvailabilitySchema[] | undefined> = ref();
 | 
					  const overlay: Ref<AvailabilitySchema[] | undefined> = ref();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const selectedMembers = ref<AvailabilitySchema[]>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const hoveredIndex: Ref<number | undefined> = ref();
 | 
					  const hoveredIndex: Ref<number | undefined> = ref();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const team = ref();
 | 
					  const team = ref();
 | 
				
			||||||
| 
						 | 
					@ -113,6 +115,7 @@ export const useScheduleStore = defineStore("schedule", () => {
 | 
				
			||||||
    availability,
 | 
					    availability,
 | 
				
			||||||
    playerAvailability,
 | 
					    playerAvailability,
 | 
				
			||||||
    overlay,
 | 
					    overlay,
 | 
				
			||||||
 | 
					    selectedMembers,
 | 
				
			||||||
    hoveredIndex,
 | 
					    hoveredIndex,
 | 
				
			||||||
    fetchSchedule,
 | 
					    fetchSchedule,
 | 
				
			||||||
    fetchTeamSchedule,
 | 
					    fetchTeamSchedule,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,6 +4,7 @@ import { defineStore } from "pinia";
 | 
				
			||||||
import { computed, reactive, ref, type Reactive, type Ref } from "vue";
 | 
					import { computed, reactive, ref, type Reactive, type Ref } from "vue";
 | 
				
			||||||
import { useClientStore } from "./client";
 | 
					import { useClientStore } from "./client";
 | 
				
			||||||
import { useAuthStore } from "./auth";
 | 
					import { useAuthStore } from "./auth";
 | 
				
			||||||
 | 
					import moment from "moment";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export type TeamMap = { [id: number]: TeamSchema };
 | 
					export type TeamMap = { [id: number]: TeamSchema };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,13 +7,14 @@ import { computed, onMounted, reactive, ref, watch } from "vue";
 | 
				
			||||||
import { useTeamsStore } from "../stores/teams";
 | 
					import { useTeamsStore } from "../stores/teams";
 | 
				
			||||||
import { useScheduleStore } from "../stores/schedule";
 | 
					import { useScheduleStore } from "../stores/schedule";
 | 
				
			||||||
import { useRoute, useRouter } from "vue-router";
 | 
					import { useRoute, useRouter } from "vue-router";
 | 
				
			||||||
 | 
					import type { TeamSchema } from "@/client";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const teamsStore = useTeamsStore();
 | 
					const teamsStore = useTeamsStore();
 | 
				
			||||||
const schedule = useScheduleStore();
 | 
					const schedule = useScheduleStore();
 | 
				
			||||||
const router = useRouter();
 | 
					const router = useRouter();
 | 
				
			||||||
const route = useRoute();
 | 
					const route = useRoute();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const options = ref([ ]);
 | 
					const options = ref<TeamSchema[]>([ ]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const firstHour = computed(() => shouldShowAllHours.value ? 0 : 14);
 | 
					const firstHour = computed(() => shouldShowAllHours.value ? 0 : 14);
 | 
				
			||||||
const lastHour = computed(() => shouldShowAllHours.value ? 23 : 22);
 | 
					const lastHour = computed(() => shouldShowAllHours.value ? 23 : 22);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -45,11 +45,18 @@ onMounted(() => {
 | 
				
			||||||
        <span class="aside">
 | 
					        <span class="aside">
 | 
				
			||||||
          Formed on {{ creationDate }}
 | 
					          Formed on {{ creationDate }}
 | 
				
			||||||
        </span>
 | 
					        </span>
 | 
				
			||||||
      </center>
 | 
					        <div class="icons">
 | 
				
			||||||
      <center class="margin">
 | 
					          <RouterLink class="button" :to="'/schedule?teamId=' + team.id">
 | 
				
			||||||
        <RouterLink :to="{ name: 'team-settings' }">
 | 
					            <button class="icon" v-tooltip="'Schedule'">
 | 
				
			||||||
          Settings
 | 
					              <i class="bi bi-calendar-fill"></i>
 | 
				
			||||||
 | 
					            </button>
 | 
				
			||||||
          </RouterLink>
 | 
					          </RouterLink>
 | 
				
			||||||
 | 
					          <RouterLink class="button" :to="{ name: 'team-settings/' }">
 | 
				
			||||||
 | 
					            <button class="icon" v-tooltip="'Settings'">
 | 
				
			||||||
 | 
					              <i class="bi bi-gear-fill"></i>
 | 
				
			||||||
 | 
					            </button>
 | 
				
			||||||
 | 
					          </RouterLink>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
      </center>
 | 
					      </center>
 | 
				
			||||||
      <MembersList />
 | 
					      <MembersList />
 | 
				
			||||||
    </template>
 | 
					    </template>
 | 
				
			||||||
| 
						 | 
					@ -60,4 +67,24 @@ onMounted(() => {
 | 
				
			||||||
.margin {
 | 
					.margin {
 | 
				
			||||||
  margin: 4em;
 | 
					  margin: 4em;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.icons {
 | 
				
			||||||
 | 
					  display: flex;
 | 
				
			||||||
 | 
					  justify-content: center;
 | 
				
			||||||
 | 
					  margin: 8px;
 | 
				
			||||||
 | 
					  gap: 4px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.icons a {
 | 
				
			||||||
 | 
					  border-radius: 4px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.icons button {
 | 
				
			||||||
 | 
					  color: var(--overlay-0);
 | 
				
			||||||
 | 
					  font-size: 12pt;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.icons button:hover {
 | 
				
			||||||
 | 
					  color: var(--text);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
</style>
 | 
					</style>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -11,6 +11,7 @@ const {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
  <div class="team-general-settings">
 | 
					  <div class="team-general-settings">
 | 
				
			||||||
 | 
					    <h2>Overview</h2>
 | 
				
			||||||
    <div>
 | 
					    <div>
 | 
				
			||||||
      <div class="form-group margin">
 | 
					      <div class="form-group margin">
 | 
				
			||||||
        <h3 class="closer">Team Name</h3>
 | 
					        <h3 class="closer">Team Name</h3>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,6 +3,18 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
  <div class="team-integrations">
 | 
					  <div class="team-integrations">
 | 
				
			||||||
 | 
					    <h2>Team Integrations</h2>
 | 
				
			||||||
 | 
					    <div v-if="true">
 | 
				
			||||||
      This team currently does not have any integrations.
 | 
					      This team currently does not have any integrations.
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
 | 
					    <div v-else>
 | 
				
			||||||
 | 
					      <details class="accordion">
 | 
				
			||||||
 | 
					        <summary>
 | 
				
			||||||
 | 
					          <h2>Discord Webhook</h2>
 | 
				
			||||||
 | 
					        </summary>
 | 
				
			||||||
 | 
					        <h3>Webhook URL</h3>
 | 
				
			||||||
 | 
					        <input hidden />
 | 
				
			||||||
 | 
					      </details>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -24,6 +24,7 @@ onMounted(() => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
  <div class="invites" v-if="team">
 | 
					  <div class="invites" v-if="team">
 | 
				
			||||||
 | 
					    <h2>Invites</h2>
 | 
				
			||||||
    <table id="invite-table" v-if="invites?.length > 0">
 | 
					    <table id="invite-table" v-if="invites?.length > 0">
 | 
				
			||||||
      <thead>
 | 
					      <thead>
 | 
				
			||||||
        <tr>
 | 
					        <tr>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -36,6 +36,7 @@ onMounted(() => {
 | 
				
			||||||
        <RouterLink class="tab" :to="{ name: 'team-settings/invites' }">
 | 
					        <RouterLink class="tab" :to="{ name: 'team-settings/invites' }">
 | 
				
			||||||
          Invites
 | 
					          Invites
 | 
				
			||||||
        </RouterLink>
 | 
					        </RouterLink>
 | 
				
			||||||
 | 
					        <hr>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
    </nav>
 | 
					    </nav>
 | 
				
			||||||
    <div class="view">
 | 
					    <div class="view">
 | 
				
			||||||
| 
						 | 
					@ -67,20 +68,21 @@ onMounted(() => {
 | 
				
			||||||
nav.sidebar h3 {
 | 
					nav.sidebar h3 {
 | 
				
			||||||
  text-transform: uppercase;
 | 
					  text-transform: uppercase;
 | 
				
			||||||
  color: var(--overlay-0);
 | 
					  color: var(--overlay-0);
 | 
				
			||||||
  padding: 0.5em 16px;
 | 
					  padding: 0 8px;
 | 
				
			||||||
 | 
					  font-size: 8pt;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
nav.sidebar > .categories {
 | 
					nav.sidebar > .categories {
 | 
				
			||||||
  display: flex;
 | 
					  display: flex;
 | 
				
			||||||
  flex-direction: column;
 | 
					  flex-direction: column;
 | 
				
			||||||
  width: 256px;
 | 
					  width: 192px;
 | 
				
			||||||
  gap: 4px;
 | 
					  gap: 4px;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
nav.sidebar a.tab {
 | 
					nav.sidebar a.tab {
 | 
				
			||||||
  font-size: 12pt;
 | 
					  font-size: 11pt;
 | 
				
			||||||
  color: var(--overlay-0);
 | 
					  color: var(--overlay-0);
 | 
				
			||||||
  padding: 8px 16px;
 | 
					  padding: 6px 10px;
 | 
				
			||||||
  font-weight: 500;
 | 
					  font-weight: 500;
 | 
				
			||||||
  border-radius: 4px;
 | 
					  border-radius: 4px;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue