Add availability page
							parent
							
								
									a11b6f454f
								
							
						
					
					
						commit
						06ef477d65
					
				| 
						 | 
				
			
			@ -4,7 +4,7 @@
 | 
			
		|||
    <meta charset="UTF-8">
 | 
			
		||||
    <link rel="icon" href="/favicon.ico">
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
 | 
			
		||||
    <title>Vite App</title>
 | 
			
		||||
    <title>availabili.tf</title>
 | 
			
		||||
  </head>
 | 
			
		||||
  <body>
 | 
			
		||||
    <div id="app"></div>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,18 +25,34 @@
 | 
			
		|||
        "@vue/eslint-config-typescript": "^14.0.1",
 | 
			
		||||
        "@vue/test-utils": "^2.4.6",
 | 
			
		||||
        "@vue/tsconfig": "^0.5.1",
 | 
			
		||||
        "autoprefixer": "^10.4.20",
 | 
			
		||||
        "cypress": "^13.15.0",
 | 
			
		||||
        "eslint": "^9.12.0",
 | 
			
		||||
        "eslint-plugin-vue": "^9.29.0",
 | 
			
		||||
        "jsdom": "^25.0.1",
 | 
			
		||||
        "npm-run-all2": "^6.2.3",
 | 
			
		||||
        "postcss": "^8.4.47",
 | 
			
		||||
        "prettier": "^3.3.3",
 | 
			
		||||
        "tailwindcss": "^3.4.14",
 | 
			
		||||
        "typescript": "~5.5.4",
 | 
			
		||||
        "vite": "^5.4.8",
 | 
			
		||||
        "vitest": "^2.1.2",
 | 
			
		||||
        "vue-tsc": "^2.1.6"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@alloc/quick-lru": {
 | 
			
		||||
      "version": "5.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
 | 
			
		||||
      "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=10"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://github.com/sponsors/sindresorhus"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@babel/helper-string-parser": {
 | 
			
		||||
      "version": "7.25.9",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -800,12 +816,58 @@
 | 
			
		|||
        "node": ">=12"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@jridgewell/gen-mapping": {
 | 
			
		||||
      "version": "0.3.5",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
 | 
			
		||||
      "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@jridgewell/set-array": "^1.2.1",
 | 
			
		||||
        "@jridgewell/sourcemap-codec": "^1.4.10",
 | 
			
		||||
        "@jridgewell/trace-mapping": "^0.3.24"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=6.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@jridgewell/resolve-uri": {
 | 
			
		||||
      "version": "3.1.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
 | 
			
		||||
      "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=6.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@jridgewell/set-array": {
 | 
			
		||||
      "version": "1.2.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
 | 
			
		||||
      "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=6.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@jridgewell/sourcemap-codec": {
 | 
			
		||||
      "version": "1.5.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
 | 
			
		||||
      "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@jridgewell/trace-mapping": {
 | 
			
		||||
      "version": "0.3.25",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
 | 
			
		||||
      "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@jridgewell/resolve-uri": "^3.1.0",
 | 
			
		||||
        "@jridgewell/sourcemap-codec": "^1.4.14"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@nodelib/fs.scandir": {
 | 
			
		||||
      "version": "2.1.5",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -1900,6 +1962,27 @@
 | 
			
		|||
        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/any-promise": {
 | 
			
		||||
      "version": "1.3.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
 | 
			
		||||
      "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/anymatch": {
 | 
			
		||||
      "version": "3.1.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
 | 
			
		||||
      "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "ISC",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "normalize-path": "^3.0.0",
 | 
			
		||||
        "picomatch": "^2.0.4"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 8"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/arch": {
 | 
			
		||||
      "version": "2.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -1921,6 +2004,13 @@
 | 
			
		|||
      ],
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/arg": {
 | 
			
		||||
      "version": "5.0.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
 | 
			
		||||
      "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/argparse": {
 | 
			
		||||
      "version": "2.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -1991,6 +2081,44 @@
 | 
			
		|||
        "node": ">= 4.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/autoprefixer": {
 | 
			
		||||
      "version": "10.4.20",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz",
 | 
			
		||||
      "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "funding": [
 | 
			
		||||
        {
 | 
			
		||||
          "type": "opencollective",
 | 
			
		||||
          "url": "https://opencollective.com/postcss/"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "type": "tidelift",
 | 
			
		||||
          "url": "https://tidelift.com/funding/github/npm/autoprefixer"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "type": "github",
 | 
			
		||||
          "url": "https://github.com/sponsors/ai"
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "browserslist": "^4.23.3",
 | 
			
		||||
        "caniuse-lite": "^1.0.30001646",
 | 
			
		||||
        "fraction.js": "^4.3.7",
 | 
			
		||||
        "normalize-range": "^0.1.2",
 | 
			
		||||
        "picocolors": "^1.0.1",
 | 
			
		||||
        "postcss-value-parser": "^4.2.0"
 | 
			
		||||
      },
 | 
			
		||||
      "bin": {
 | 
			
		||||
        "autoprefixer": "bin/autoprefixer"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": "^10 || ^12 || >=14"
 | 
			
		||||
      },
 | 
			
		||||
      "peerDependencies": {
 | 
			
		||||
        "postcss": "^8.1.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/aws-sign2": {
 | 
			
		||||
      "version": "0.7.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -2057,6 +2185,19 @@
 | 
			
		|||
        "tweetnacl": "^0.14.3"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/binary-extensions": {
 | 
			
		||||
      "version": "2.3.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
 | 
			
		||||
      "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=8"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://github.com/sponsors/sindresorhus"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/blob-util": {
 | 
			
		||||
      "version": "2.0.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -2117,6 +2258,39 @@
 | 
			
		|||
        "node": ">=8"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/browserslist": {
 | 
			
		||||
      "version": "4.24.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz",
 | 
			
		||||
      "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "funding": [
 | 
			
		||||
        {
 | 
			
		||||
          "type": "opencollective",
 | 
			
		||||
          "url": "https://opencollective.com/browserslist"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "type": "tidelift",
 | 
			
		||||
          "url": "https://tidelift.com/funding/github/npm/browserslist"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "type": "github",
 | 
			
		||||
          "url": "https://github.com/sponsors/ai"
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "caniuse-lite": "^1.0.30001669",
 | 
			
		||||
        "electron-to-chromium": "^1.5.41",
 | 
			
		||||
        "node-releases": "^2.0.18",
 | 
			
		||||
        "update-browserslist-db": "^1.1.1"
 | 
			
		||||
      },
 | 
			
		||||
      "bin": {
 | 
			
		||||
        "browserslist": "cli.js"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/buffer": {
 | 
			
		||||
      "version": "5.7.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -2202,6 +2376,37 @@
 | 
			
		|||
        "node": ">=6"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/camelcase-css": {
 | 
			
		||||
      "version": "2.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 6"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/caniuse-lite": {
 | 
			
		||||
      "version": "1.0.30001672",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001672.tgz",
 | 
			
		||||
      "integrity": "sha512-XhW1vRo1ob6aeK2w3rTohwTPBLse/rvjq+s3RTSBwnlZqoFFjx9cHsShJjAIbLsLjyoacaTxpLZy9v3gg6zypw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "funding": [
 | 
			
		||||
        {
 | 
			
		||||
          "type": "opencollective",
 | 
			
		||||
          "url": "https://opencollective.com/browserslist"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "type": "tidelift",
 | 
			
		||||
          "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "type": "github",
 | 
			
		||||
          "url": "https://github.com/sponsors/ai"
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "CC-BY-4.0"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/caseless": {
 | 
			
		||||
      "version": "0.12.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -2263,6 +2468,44 @@
 | 
			
		|||
        "node": ">= 0.8.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/chokidar": {
 | 
			
		||||
      "version": "3.6.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
 | 
			
		||||
      "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "anymatch": "~3.1.2",
 | 
			
		||||
        "braces": "~3.0.2",
 | 
			
		||||
        "glob-parent": "~5.1.2",
 | 
			
		||||
        "is-binary-path": "~2.1.0",
 | 
			
		||||
        "is-glob": "~4.0.1",
 | 
			
		||||
        "normalize-path": "~3.0.0",
 | 
			
		||||
        "readdirp": "~3.6.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 8.10.0"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://paulmillr.com/funding/"
 | 
			
		||||
      },
 | 
			
		||||
      "optionalDependencies": {
 | 
			
		||||
        "fsevents": "~2.3.2"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/chokidar/node_modules/glob-parent": {
 | 
			
		||||
      "version": "5.1.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
 | 
			
		||||
      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "ISC",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "is-glob": "^4.0.1"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 6"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/ci-info": {
 | 
			
		||||
      "version": "3.9.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -2764,6 +3007,20 @@
 | 
			
		|||
        "node": ">=0.4.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/didyoumean": {
 | 
			
		||||
      "version": "1.2.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
 | 
			
		||||
      "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "Apache-2.0"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/dlv": {
 | 
			
		||||
      "version": "1.1.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
 | 
			
		||||
      "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/eastasianwidth": {
 | 
			
		||||
      "version": "0.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -2817,6 +3074,13 @@
 | 
			
		|||
        "url": "https://github.com/sponsors/isaacs"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/electron-to-chromium": {
 | 
			
		||||
      "version": "1.5.47",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.47.tgz",
 | 
			
		||||
      "integrity": "sha512-zS5Yer0MOYw4rtK2iq43cJagHZ8sXN0jDHDKzB+86gSBSAI4v07S97mcq+Gs2vclAxSh1j7vOAHxSVgduiiuVQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "ISC"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/emoji-regex": {
 | 
			
		||||
      "version": "9.2.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -2945,6 +3209,16 @@
 | 
			
		|||
        "@esbuild/win32-x64": "0.21.5"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/escalade": {
 | 
			
		||||
      "version": "3.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
 | 
			
		||||
      "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=6"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/escape-string-regexp": {
 | 
			
		||||
      "version": "4.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -3574,6 +3848,20 @@
 | 
			
		|||
        "node": ">= 6"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/fraction.js": {
 | 
			
		||||
      "version": "4.3.7",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
 | 
			
		||||
      "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": "*"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "type": "patreon",
 | 
			
		||||
        "url": "https://github.com/sponsors/rawify"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/fs-extra": {
 | 
			
		||||
      "version": "9.1.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -3997,6 +4285,19 @@
 | 
			
		|||
      "dev": true,
 | 
			
		||||
      "license": "ISC"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/is-binary-path": {
 | 
			
		||||
      "version": "2.1.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
 | 
			
		||||
      "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "binary-extensions": "^2.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=8"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/is-ci": {
 | 
			
		||||
      "version": "3.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -4010,6 +4311,22 @@
 | 
			
		|||
        "is-ci": "bin.js"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/is-core-module": {
 | 
			
		||||
      "version": "2.15.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz",
 | 
			
		||||
      "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "hasown": "^2.0.2"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 0.4"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://github.com/sponsors/ljharb"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/is-extglob": {
 | 
			
		||||
      "version": "2.1.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -4150,6 +4467,16 @@
 | 
			
		|||
        "@pkgjs/parseargs": "^0.11.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/jiti": {
 | 
			
		||||
      "version": "1.21.6",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz",
 | 
			
		||||
      "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "bin": {
 | 
			
		||||
        "jiti": "bin/jiti.js"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/js-beautify": {
 | 
			
		||||
      "version": "1.15.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.15.1.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -4361,6 +4688,23 @@
 | 
			
		|||
        "node": ">= 0.8.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/lilconfig": {
 | 
			
		||||
      "version": "2.1.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
 | 
			
		||||
      "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=10"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/lines-and-columns": {
 | 
			
		||||
      "version": "1.2.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
 | 
			
		||||
      "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/listr2": {
 | 
			
		||||
      "version": "3.14.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -4746,6 +5090,18 @@
 | 
			
		|||
      "dev": true,
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/mz": {
 | 
			
		||||
      "version": "2.7.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
 | 
			
		||||
      "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "any-promise": "^1.0.0",
 | 
			
		||||
        "object-assign": "^4.0.1",
 | 
			
		||||
        "thenify-all": "^1.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/nanoid": {
 | 
			
		||||
      "version": "3.3.7",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -4771,6 +5127,13 @@
 | 
			
		|||
      "dev": true,
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/node-releases": {
 | 
			
		||||
      "version": "2.0.18",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz",
 | 
			
		||||
      "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/nopt": {
 | 
			
		||||
      "version": "7.2.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -4787,6 +5150,26 @@
 | 
			
		|||
        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/normalize-path": {
 | 
			
		||||
      "version": "3.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=0.10.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/normalize-range": {
 | 
			
		||||
      "version": "0.1.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
 | 
			
		||||
      "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=0.10.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/npm-normalize-package-bin": {
 | 
			
		||||
      "version": "3.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -4886,6 +5269,26 @@
 | 
			
		|||
      "dev": true,
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/object-assign": {
 | 
			
		||||
      "version": "4.1.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
 | 
			
		||||
      "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=0.10.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/object-hash": {
 | 
			
		||||
      "version": "3.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 6"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/object-inspect": {
 | 
			
		||||
      "version": "1.13.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -5058,6 +5461,13 @@
 | 
			
		|||
        "node": ">=8"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/path-parse": {
 | 
			
		||||
      "version": "1.0.7",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
 | 
			
		||||
      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/path-scurry": {
 | 
			
		||||
      "version": "1.11.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -5200,6 +5610,16 @@
 | 
			
		|||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/pirates": {
 | 
			
		||||
      "version": "4.0.6",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
 | 
			
		||||
      "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 6"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/popper.js": {
 | 
			
		||||
      "version": "1.16.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -5239,6 +5659,119 @@
 | 
			
		|||
        "node": "^10 || ^12 || >=14"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/postcss-import": {
 | 
			
		||||
      "version": "15.1.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
 | 
			
		||||
      "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "postcss-value-parser": "^4.0.0",
 | 
			
		||||
        "read-cache": "^1.0.0",
 | 
			
		||||
        "resolve": "^1.1.7"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=14.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "peerDependencies": {
 | 
			
		||||
        "postcss": "^8.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/postcss-js": {
 | 
			
		||||
      "version": "4.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "camelcase-css": "^2.0.1"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": "^12 || ^14 || >= 16"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "type": "opencollective",
 | 
			
		||||
        "url": "https://opencollective.com/postcss/"
 | 
			
		||||
      },
 | 
			
		||||
      "peerDependencies": {
 | 
			
		||||
        "postcss": "^8.4.21"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/postcss-load-config": {
 | 
			
		||||
      "version": "4.0.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
 | 
			
		||||
      "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "funding": [
 | 
			
		||||
        {
 | 
			
		||||
          "type": "opencollective",
 | 
			
		||||
          "url": "https://opencollective.com/postcss/"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "type": "github",
 | 
			
		||||
          "url": "https://github.com/sponsors/ai"
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "lilconfig": "^3.0.0",
 | 
			
		||||
        "yaml": "^2.3.4"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 14"
 | 
			
		||||
      },
 | 
			
		||||
      "peerDependencies": {
 | 
			
		||||
        "postcss": ">=8.0.9",
 | 
			
		||||
        "ts-node": ">=9.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "peerDependenciesMeta": {
 | 
			
		||||
        "postcss": {
 | 
			
		||||
          "optional": true
 | 
			
		||||
        },
 | 
			
		||||
        "ts-node": {
 | 
			
		||||
          "optional": true
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/postcss-load-config/node_modules/lilconfig": {
 | 
			
		||||
      "version": "3.1.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz",
 | 
			
		||||
      "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=14"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://github.com/sponsors/antonk52"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/postcss-nested": {
 | 
			
		||||
      "version": "6.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
 | 
			
		||||
      "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "funding": [
 | 
			
		||||
        {
 | 
			
		||||
          "type": "opencollective",
 | 
			
		||||
          "url": "https://opencollective.com/postcss/"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "type": "github",
 | 
			
		||||
          "url": "https://github.com/sponsors/ai"
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "postcss-selector-parser": "^6.1.1"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=12.0"
 | 
			
		||||
      },
 | 
			
		||||
      "peerDependencies": {
 | 
			
		||||
        "postcss": "^8.2.14"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/postcss-selector-parser": {
 | 
			
		||||
      "version": "6.1.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -5253,6 +5786,13 @@
 | 
			
		|||
        "node": ">=4"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/postcss-value-parser": {
 | 
			
		||||
      "version": "4.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
 | 
			
		||||
      "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/prelude-ls": {
 | 
			
		||||
      "version": "1.2.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -5400,6 +5940,16 @@
 | 
			
		|||
      ],
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/read-cache": {
 | 
			
		||||
      "version": "1.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "pify": "^2.3.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/read-package-json-fast": {
 | 
			
		||||
      "version": "3.0.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -5414,6 +5964,19 @@
 | 
			
		|||
        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/readdirp": {
 | 
			
		||||
      "version": "3.6.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
 | 
			
		||||
      "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "picomatch": "^2.2.1"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "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",
 | 
			
		||||
| 
						 | 
				
			
			@ -5437,6 +6000,24 @@
 | 
			
		|||
      "dev": true,
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/resolve": {
 | 
			
		||||
      "version": "1.22.8",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
 | 
			
		||||
      "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "is-core-module": "^2.13.0",
 | 
			
		||||
        "path-parse": "^1.0.7",
 | 
			
		||||
        "supports-preserve-symlinks-flag": "^1.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "bin": {
 | 
			
		||||
        "resolve": "bin/resolve"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://github.com/sponsors/ljharb"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/resolve-from": {
 | 
			
		||||
      "version": "4.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -5908,6 +6489,39 @@
 | 
			
		|||
        "url": "https://github.com/sponsors/sindresorhus"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/sucrase": {
 | 
			
		||||
      "version": "3.35.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
 | 
			
		||||
      "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@jridgewell/gen-mapping": "^0.3.2",
 | 
			
		||||
        "commander": "^4.0.0",
 | 
			
		||||
        "glob": "^10.3.10",
 | 
			
		||||
        "lines-and-columns": "^1.1.6",
 | 
			
		||||
        "mz": "^2.7.0",
 | 
			
		||||
        "pirates": "^4.0.1",
 | 
			
		||||
        "ts-interface-checker": "^0.1.9"
 | 
			
		||||
      },
 | 
			
		||||
      "bin": {
 | 
			
		||||
        "sucrase": "bin/sucrase",
 | 
			
		||||
        "sucrase-node": "bin/sucrase-node"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=16 || 14 >=14.17"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/sucrase/node_modules/commander": {
 | 
			
		||||
      "version": "4.1.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
 | 
			
		||||
      "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 6"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/supports-color": {
 | 
			
		||||
      "version": "7.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -5921,6 +6535,19 @@
 | 
			
		|||
        "node": ">=8"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/supports-preserve-symlinks-flag": {
 | 
			
		||||
      "version": "1.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 0.4"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://github.com/sponsors/ljharb"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/symbol-tree": {
 | 
			
		||||
      "version": "3.2.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -5945,6 +6572,44 @@
 | 
			
		|||
        "url": "https://opencollective.com/unts"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/tailwindcss": {
 | 
			
		||||
      "version": "3.4.14",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.14.tgz",
 | 
			
		||||
      "integrity": "sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@alloc/quick-lru": "^5.2.0",
 | 
			
		||||
        "arg": "^5.0.2",
 | 
			
		||||
        "chokidar": "^3.5.3",
 | 
			
		||||
        "didyoumean": "^1.2.2",
 | 
			
		||||
        "dlv": "^1.1.3",
 | 
			
		||||
        "fast-glob": "^3.3.0",
 | 
			
		||||
        "glob-parent": "^6.0.2",
 | 
			
		||||
        "is-glob": "^4.0.3",
 | 
			
		||||
        "jiti": "^1.21.0",
 | 
			
		||||
        "lilconfig": "^2.1.0",
 | 
			
		||||
        "micromatch": "^4.0.5",
 | 
			
		||||
        "normalize-path": "^3.0.0",
 | 
			
		||||
        "object-hash": "^3.0.0",
 | 
			
		||||
        "picocolors": "^1.0.0",
 | 
			
		||||
        "postcss": "^8.4.23",
 | 
			
		||||
        "postcss-import": "^15.1.0",
 | 
			
		||||
        "postcss-js": "^4.0.1",
 | 
			
		||||
        "postcss-load-config": "^4.0.1",
 | 
			
		||||
        "postcss-nested": "^6.0.1",
 | 
			
		||||
        "postcss-selector-parser": "^6.0.11",
 | 
			
		||||
        "resolve": "^1.22.2",
 | 
			
		||||
        "sucrase": "^3.32.0"
 | 
			
		||||
      },
 | 
			
		||||
      "bin": {
 | 
			
		||||
        "tailwind": "lib/cli.js",
 | 
			
		||||
        "tailwindcss": "lib/cli.js"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=14.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/text-table": {
 | 
			
		||||
      "version": "0.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -5952,6 +6617,29 @@
 | 
			
		|||
      "dev": true,
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/thenify": {
 | 
			
		||||
      "version": "3.3.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
 | 
			
		||||
      "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "any-promise": "^1.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/thenify-all": {
 | 
			
		||||
      "version": "1.6.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
 | 
			
		||||
      "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "thenify": ">= 3.1.0 < 4"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=0.8"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/throttleit": {
 | 
			
		||||
      "version": "1.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.1.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -6095,6 +6783,13 @@
 | 
			
		|||
        "typescript": ">=4.2.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/ts-interface-checker": {
 | 
			
		||||
      "version": "0.1.13",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
 | 
			
		||||
      "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "Apache-2.0"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/tslib": {
 | 
			
		||||
      "version": "2.8.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -6213,6 +6908,37 @@
 | 
			
		|||
        "node": ">=8"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/update-browserslist-db": {
 | 
			
		||||
      "version": "1.1.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz",
 | 
			
		||||
      "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "funding": [
 | 
			
		||||
        {
 | 
			
		||||
          "type": "opencollective",
 | 
			
		||||
          "url": "https://opencollective.com/browserslist"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "type": "tidelift",
 | 
			
		||||
          "url": "https://tidelift.com/funding/github/npm/browserslist"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "type": "github",
 | 
			
		||||
          "url": "https://github.com/sponsors/ai"
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "escalade": "^3.2.0",
 | 
			
		||||
        "picocolors": "^1.1.0"
 | 
			
		||||
      },
 | 
			
		||||
      "bin": {
 | 
			
		||||
        "update-browserslist-db": "cli.js"
 | 
			
		||||
      },
 | 
			
		||||
      "peerDependencies": {
 | 
			
		||||
        "browserslist": ">= 4.21.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/uri-js": {
 | 
			
		||||
      "version": "4.4.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -6862,6 +7588,19 @@
 | 
			
		|||
      "dev": true,
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/yaml": {
 | 
			
		||||
      "version": "2.6.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.0.tgz",
 | 
			
		||||
      "integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "ISC",
 | 
			
		||||
      "bin": {
 | 
			
		||||
        "yaml": "bin.mjs"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 14"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/yauzl": {
 | 
			
		||||
      "version": "2.10.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -31,12 +31,15 @@
 | 
			
		|||
    "@vue/eslint-config-typescript": "^14.0.1",
 | 
			
		||||
    "@vue/test-utils": "^2.4.6",
 | 
			
		||||
    "@vue/tsconfig": "^0.5.1",
 | 
			
		||||
    "autoprefixer": "^10.4.20",
 | 
			
		||||
    "cypress": "^13.15.0",
 | 
			
		||||
    "eslint": "^9.12.0",
 | 
			
		||||
    "eslint-plugin-vue": "^9.29.0",
 | 
			
		||||
    "jsdom": "^25.0.1",
 | 
			
		||||
    "npm-run-all2": "^6.2.3",
 | 
			
		||||
    "postcss": "^8.4.47",
 | 
			
		||||
    "prettier": "^3.3.3",
 | 
			
		||||
    "tailwindcss": "^3.4.14",
 | 
			
		||||
    "typescript": "~5.5.4",
 | 
			
		||||
    "vite": "^5.4.8",
 | 
			
		||||
    "vitest": "^2.1.2",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,12 +23,14 @@ a,
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
button {
 | 
			
		||||
  font-weight: 700;
 | 
			
		||||
  display: flex;
 | 
			
		||||
  gap: 4px;
 | 
			
		||||
  /*font-weight: 700;*/
 | 
			
		||||
  color: var(--text);
 | 
			
		||||
  background-color: var(--crust);
 | 
			
		||||
  border: none;
 | 
			
		||||
  padding: 8px 16px;
 | 
			
		||||
  border-radius: 4px;
 | 
			
		||||
  padding: 10px 20px;
 | 
			
		||||
  border-radius: 8px;
 | 
			
		||||
  font-family:
 | 
			
		||||
    Inter,
 | 
			
		||||
    -apple-system,
 | 
			
		||||
| 
						 | 
				
			
			@ -42,6 +44,17 @@ button {
 | 
			
		|||
    'Droid Sans',
 | 
			
		||||
    'Helvetica Neue',
 | 
			
		||||
    sans-serif;
 | 
			
		||||
  cursor: pointer;
 | 
			
		||||
  transition-duration: 200ms;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
button > i.bi {
 | 
			
		||||
  margin-right: 4px;
 | 
			
		||||
  transform: translateY(1px);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
button:hover {
 | 
			
		||||
  background-color: var(--surface-0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
button.accent {
 | 
			
		||||
| 
						 | 
				
			
			@ -50,8 +63,26 @@ button.accent {
 | 
			
		|||
  text-transform: uppercase;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
button.accent {
 | 
			
		||||
button.accent.dark {
 | 
			
		||||
  background-color: var(--text);
 | 
			
		||||
  color: var(--base);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
button.accent:hover {
 | 
			
		||||
  background-color: var(--text);
 | 
			
		||||
  color: var(--base);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
button.eq {
 | 
			
		||||
  padding: 8px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
button.transparent {
 | 
			
		||||
  background-color: var(--transparent);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
button.transparent:hover {
 | 
			
		||||
  background-color: var(--surface-0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
h1 {
 | 
			
		||||
| 
						 | 
				
			
			@ -60,6 +91,10 @@ h1 {
 | 
			
		|||
  line-height: 2em;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
h2 {
 | 
			
		||||
  font-weight: 700;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
em.aside {
 | 
			
		||||
  color: var(--overlay-0);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -67,3 +102,7 @@ em.aside {
 | 
			
		|||
select {
 | 
			
		||||
  appearance: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.subtext {
 | 
			
		||||
  color: var(--subtext-0);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,6 +20,7 @@ function selectOption(index) {
 | 
			
		|||
  <div :class="{ 'dropdown-container': true, 'is-open': isOpen }">
 | 
			
		||||
    <button @click="isOpen = !isOpen">
 | 
			
		||||
      {{ selectedOption }}
 | 
			
		||||
      <i class="bi bi-caret-down-fill"></i>
 | 
			
		||||
    </button>
 | 
			
		||||
    <ul class="dropdown" v-if="isOpen" @blur="isOpen = false">
 | 
			
		||||
      <li v-for="(option, i) in options" :key="i" @click="selectOption(i)">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,13 +2,13 @@
 | 
			
		|||
import { computed, defineModel, defineProps, reactive, ref, onMounted, onUnmounted } from "vue";
 | 
			
		||||
 | 
			
		||||
const model = defineModel();
 | 
			
		||||
const firstHour = 15;
 | 
			
		||||
const lastHour = 23;
 | 
			
		||||
 | 
			
		||||
const windowStart = new Date(2024, 9, 21);
 | 
			
		||||
const firstHour = 14;
 | 
			
		||||
const lastHour = 22;
 | 
			
		||||
 | 
			
		||||
const props = defineProps({
 | 
			
		||||
  selectionMode: Number,
 | 
			
		||||
  isDisabled: Boolean,
 | 
			
		||||
  dateStart: Date,
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
const selectionStart = reactive({ x: undefined, y: undefined });
 | 
			
		||||
| 
						 | 
				
			
			@ -45,8 +45,8 @@ function selectionInside(dayIndex, hour) {
 | 
			
		|||
const days = computed(() => {
 | 
			
		||||
  let ret = [];
 | 
			
		||||
  for (let i = 0; i < 7; i++) {
 | 
			
		||||
    const date = new Date(windowStart);
 | 
			
		||||
    date.setDate(windowStart.getDate() + i);
 | 
			
		||||
    const date = new Date(props.dateStart);
 | 
			
		||||
    date.setDate(props.dateStart.getDate() + i);
 | 
			
		||||
    ret.push(date);
 | 
			
		||||
  }
 | 
			
		||||
  return ret;
 | 
			
		||||
| 
						 | 
				
			
			@ -71,6 +71,10 @@ const isMouseDown = ref(false);
 | 
			
		|||
const selectionValue = ref(0);
 | 
			
		||||
 | 
			
		||||
function onSlotMouseDown($event, x, y) {
 | 
			
		||||
  if (props.isDisabled) {
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  selectionValue.value = model.value[24 * x + y] == props.selectionMode ?
 | 
			
		||||
    0 : props.selectionMode;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -78,26 +82,29 @@ function onSlotMouseDown($event, x, y) {
 | 
			
		|||
  selectionStart.y = y;
 | 
			
		||||
  selectionEnd.x = x;
 | 
			
		||||
  selectionEnd.y = y;
 | 
			
		||||
 | 
			
		||||
  isShiftDown.value = $event.shiftKey;
 | 
			
		||||
  isCtrlDown.value = $event.ctrlKey;
 | 
			
		||||
 | 
			
		||||
  console.log("selected " + x + " " + y);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function onSlotMouseOver($event, x, y) {
 | 
			
		||||
  if (props.isDisabled) {
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if ($event.buttons & 1 == 1) {
 | 
			
		||||
    //if (isAdding.value) {
 | 
			
		||||
    //  model.value[24 * x + y] = props.selectionMode;
 | 
			
		||||
    //} else {
 | 
			
		||||
    //  model.value[24 * x + y] = 0;
 | 
			
		||||
    //}
 | 
			
		||||
    console.log("selected " + (24 * x + y));
 | 
			
		||||
    isShiftDown.value = $event.shiftKey;
 | 
			
		||||
    isCtrlDown.value = $event.ctrlKey;
 | 
			
		||||
 | 
			
		||||
    selectionEnd.x = x;
 | 
			
		||||
    selectionEnd.y = y;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function onSlotMouseUp($event) {
 | 
			
		||||
  console.log("mouseup");
 | 
			
		||||
  console.log(selectionStart);
 | 
			
		||||
  if (selectionStart.x == undefined) {
 | 
			
		||||
  if (props.isDisabled || selectionStart.x == undefined) {
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -152,12 +159,12 @@ onUnmounted(() => {
 | 
			
		|||
      <div class="height-48px"></div>
 | 
			
		||||
      <div class="height-24px hour-marker-container" v-for="hour, i in hours" :key="i">
 | 
			
		||||
        <span class="hour-marker" v-if="i % 2 == 0 || i == hours.length">
 | 
			
		||||
          {{ hour % 24 }}:30 ({{ (hour + 3) % 24 }}:30 EST)
 | 
			
		||||
          {{ hour % 24 }}:30 / {{ (hour + 3) % 24 }}:30 EST
 | 
			
		||||
        </span>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="height-24px hour-marker-container">
 | 
			
		||||
        <span class="hour-marker">
 | 
			
		||||
          {{ (lastHour + 1) % 24 }}:30 ({{ (lastHour + 4) % 24 }}:30 EST)
 | 
			
		||||
          {{ (lastHour + 1) % 24 }}:30 / {{ (lastHour + 4) % 24 }}:30 EST
 | 
			
		||||
        </span>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
| 
						 | 
				
			
			@ -259,7 +266,7 @@ onUnmounted(() => {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
.time-slot[selection="1"] {
 | 
			
		||||
  background-color: var(--accent-transparent-80);
 | 
			
		||||
  background-color: var(--accent-transparent-50);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.time-slot[selection="2"] {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,17 +1,44 @@
 | 
			
		|||
<script setup lang="ts">
 | 
			
		||||
import { defineModel } from "vue";
 | 
			
		||||
import { computed, defineModel } from "vue";
 | 
			
		||||
 | 
			
		||||
const model = defineModel();
 | 
			
		||||
 | 
			
		||||
const dateStart = computed(() => model.value.toLocaleDateString());
 | 
			
		||||
const dateEnd = computed(() => {
 | 
			
		||||
  let dateEndObject = new Date(model.value);
 | 
			
		||||
  dateEndObject.setDate(model.value.getDate() + 6);
 | 
			
		||||
  return dateEndObject.toLocaleDateString();
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
function incrementDate(delta: number) {
 | 
			
		||||
  let newDate = new Date(model.value);
 | 
			
		||||
  newDate.setDate(newDate.getDate() + delta);
 | 
			
		||||
  model.value = newDate;
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="scroll-box">
 | 
			
		||||
    <button class="transparent eq" @click="incrementDate(-7)">
 | 
			
		||||
      <i class="bi bi-caret-left-fill"></i>
 | 
			
		||||
    </button>
 | 
			
		||||
    <span class="date-range">{{ dateStart }} – {{ dateEnd }}</span>
 | 
			
		||||
    <button class="transparent eq" @click="incrementDate(7)">
 | 
			
		||||
      <i class="bi bi-caret-right-fill"></i>
 | 
			
		||||
    </button>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<style>
 | 
			
		||||
.scroll-box {
 | 
			
		||||
  display: flex;
 | 
			
		||||
  justify-content: space-between;
 | 
			
		||||
  display: inline-flex;
 | 
			
		||||
  align-items: center;
 | 
			
		||||
  gap: 4px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.date-range {
 | 
			
		||||
  font-weight: 700;
 | 
			
		||||
  width: 200px;
 | 
			
		||||
  text-align: center;
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -115,8 +115,8 @@ export const useRosterStore = defineStore("roster", () => {
 | 
			
		|||
    {
 | 
			
		||||
      steamId: 2843,
 | 
			
		||||
      name: "samme1g",
 | 
			
		||||
      role: "Roamer",
 | 
			
		||||
      main: false,
 | 
			
		||||
      role: "Demoman",
 | 
			
		||||
      main: true,
 | 
			
		||||
      availability: 2,
 | 
			
		||||
      playtime: 50201,
 | 
			
		||||
    },
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,17 @@
 | 
			
		|||
import { defineStore } from "pinia";
 | 
			
		||||
import { reactive, ref, watch } from "vue";
 | 
			
		||||
 | 
			
		||||
export const useScheduleStore = defineStore("schedule", () => {
 | 
			
		||||
  const dateStart = ref(new Date(2024, 9, 21));
 | 
			
		||||
 | 
			
		||||
  const availability = reactive(new Array(168));
 | 
			
		||||
 | 
			
		||||
  watch(dateStart, () => {
 | 
			
		||||
    availability.fill(0);
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  return {
 | 
			
		||||
    dateStart,
 | 
			
		||||
    availability,
 | 
			
		||||
  };
 | 
			
		||||
});
 | 
			
		||||
| 
						 | 
				
			
			@ -1,9 +1,12 @@
 | 
			
		|||
<script setup lang="ts">
 | 
			
		||||
import TheWelcome from '../components/TheWelcome.vue'
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<template>
 | 
			
		||||
  <main>
 | 
			
		||||
    <TheWelcome />
 | 
			
		||||
    <h2>JustGetAHouse</h2>
 | 
			
		||||
    <div>
 | 
			
		||||
      test
 | 
			
		||||
    </div>
 | 
			
		||||
    <h1>Your Teams</h1>
 | 
			
		||||
  </main>
 | 
			
		||||
</template>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,28 +3,45 @@ import AvailabilityGrid from "../components/AvailabilityGrid.vue";
 | 
			
		|||
import AvailabilityComboBox from "../components/AvailabilityComboBox.vue";
 | 
			
		||||
import WeekSelectionBox from "../components/WeekSelectionBox.vue";
 | 
			
		||||
import { reactive, ref } from "vue";
 | 
			
		||||
import { useScheduleStore } from "../stores/schedule.ts";
 | 
			
		||||
 | 
			
		||||
const schedule = useScheduleStore();
 | 
			
		||||
 | 
			
		||||
const options = reactive([
 | 
			
		||||
  "Team pepeja",
 | 
			
		||||
  "Snus Brotherhood",
 | 
			
		||||
  "TEAM PEPEJA forsenCD",
 | 
			
		||||
  "The Snus Brotherhood",
 | 
			
		||||
]);
 | 
			
		||||
 | 
			
		||||
const comboBoxIndex = ref(0);
 | 
			
		||||
 | 
			
		||||
const availability = reactive(new Array(168));
 | 
			
		||||
//const availability = reactive(new Array(168));
 | 
			
		||||
const availability = schedule.availability;
 | 
			
		||||
 | 
			
		||||
const selectionMode = ref(1);
 | 
			
		||||
 | 
			
		||||
const isEditing = ref(false);
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<template>
 | 
			
		||||
  <main>
 | 
			
		||||
    <div v-if="options.length > 0">
 | 
			
		||||
      <div>
 | 
			
		||||
    <div class="schedule-view-container" v-if="options.length > 0">
 | 
			
		||||
      <div class="top-menu">
 | 
			
		||||
        <div class="subtext">
 | 
			
		||||
          Availability for
 | 
			
		||||
          <AvailabilityComboBox :options="options" v-model="comboBoxIndex" />
 | 
			
		||||
        <WeekSelectionBox />
 | 
			
		||||
        </div>
 | 
			
		||||
      <AvailabilityGrid v-model="availability" :selection-mode="selectionMode" />
 | 
			
		||||
        <div>
 | 
			
		||||
          <WeekSelectionBox v-model="schedule.dateStart" />
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <AvailabilityGrid v-model="availability"
 | 
			
		||||
        :selection-mode="selectionMode"
 | 
			
		||||
        :is-disabled="!isEditing"
 | 
			
		||||
        :date-start="schedule.dateStart"
 | 
			
		||||
      />
 | 
			
		||||
      <div class="button-group">
 | 
			
		||||
        <button>Show all times</button>
 | 
			
		||||
        <template v-if="isEditing">
 | 
			
		||||
          <div class="radio-group">
 | 
			
		||||
            <button
 | 
			
		||||
              :class="{ 'radio': true, 'selected': selectionMode == 1, 'left': true }"
 | 
			
		||||
| 
						 | 
				
			
			@ -39,6 +56,16 @@ const selectionMode = ref(1);
 | 
			
		|||
              Definitely available
 | 
			
		||||
            </button>
 | 
			
		||||
          </div>
 | 
			
		||||
          <button @click="isEditing = false">
 | 
			
		||||
            <i class="bi bi-check-circle-fill"></i>
 | 
			
		||||
            Save
 | 
			
		||||
          </button>
 | 
			
		||||
        </template>
 | 
			
		||||
        <button v-else class="accent" @click="isEditing = true">
 | 
			
		||||
          <i class="bi bi-pencil-fill"></i>
 | 
			
		||||
          Edit
 | 
			
		||||
        </button>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div v-else>
 | 
			
		||||
      You currently are not in any team to schedule for.
 | 
			
		||||
| 
						 | 
				
			
			@ -47,6 +74,22 @@ const selectionMode = ref(1);
 | 
			
		|||
</template>
 | 
			
		||||
 | 
			
		||||
<style scoped>
 | 
			
		||||
.schedule-view-container {
 | 
			
		||||
  display: inline-block;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.top-menu {
 | 
			
		||||
  display: flex;
 | 
			
		||||
  flex-direction: column;
 | 
			
		||||
  align-items: center;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.button-group {
 | 
			
		||||
  display: flex;
 | 
			
		||||
  gap: 8px;
 | 
			
		||||
  justify-content: end;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.radio-group {
 | 
			
		||||
  display: flex;
 | 
			
		||||
  gap: 2px;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue