diff --git a/.eslintrc.json b/.eslintrc.json index 2b4f6c4e..ed490983 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -10,5 +10,22 @@ "ecmaVersion": "latest", "sourceType": "module" // add this line to allow 'import' and 'export' statements }, - "rules": {} + "rules": { + // allow importing ts extensions + "sort-imports": ["error", { + "ignoreCase": true, + "ignoreDeclarationSort": true, + "ignoreMemberSort": false, + "memberSyntaxSortOrder": ["none", "all", "multiple", "single"] + }], + "import/extensions": [ + "error", + "ignorePackages", + { + "js": "never", + "ts": "never", + "tsx": "never" + } + ] + } } \ No newline at end of file diff --git a/.github/workflows/webpack.yml b/.github/workflows/testing.yml similarity index 70% rename from .github/workflows/webpack.yml rename to .github/workflows/testing.yml index 5fd47057..848650c8 100644 --- a/.github/workflows/webpack.yml +++ b/.github/workflows/testing.yml @@ -1,4 +1,4 @@ -name: NodeJS with Webpack +name: NodeJS Testing on: push: @@ -12,7 +12,7 @@ jobs: strategy: matrix: - node-version: [14.x, 16.x, 18.x] + node-version: [20.x] steps: - uses: actions/checkout@v3 @@ -24,9 +24,5 @@ jobs: - name: Build run: | - cd interface npm install - npm run build - cd .. - npm install - npm run build + npm run build \ No newline at end of file diff --git a/.gitignore b/.gitignore index 57926556..0c9c0154 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,10 @@ node_modules/ package-lock.json bun.lockb +pnpm-lock.yaml +yarn.lock + +.parcel-cache # Build package.zip diff --git a/.postcssrc.json b/.postcssrc.json new file mode 100644 index 00000000..d42c370f --- /dev/null +++ b/.postcssrc.json @@ -0,0 +1,5 @@ +{ + "plugins": { + "tailwindcss": {} + } +} \ No newline at end of file diff --git a/.prettierrc b/.prettierrc index 222861c3..7c28b83a 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,4 +1,5 @@ { "tabWidth": 2, - "useTabs": false + "useTabs": false, + "semi": false } diff --git a/firefox/manifest.json b/firefox/manifest.json new file mode 100644 index 00000000..e9633ce1 --- /dev/null +++ b/firefox/manifest.json @@ -0,0 +1,37 @@ +{ + "manifest_version": 2, + "name": "BetterSEQTA+", + "version": "3.2.2", + "description": "Make SEQTA usable and beautiful! A fork of BetterSEQTA to continue development and add WAY more features!!!", + "icons": { + "32": "../src/resources/icons/icon-32.png", + "48": "../src/resources/icons/icon-48.png", + "64": "../src/resources/icons/icon-64.png" + }, + "browser_action": { + "browser_style": true, + "default_popup": "../src/interface/index.html#settings", + "default_icon": { + "32": "../src/resources/icons/icon-32.png", + "48": "../src/resources/icons/icon-48.png", + "64": "../src/resources/icons/icon-64.png" + } + }, + "permissions": ["tabs", "notifications", "storage", "https://newsapi.org/"], + "background": { + "scripts": [ + "../src/background.ts" + ] + }, + "content_scripts": [ + { + "matches": ["*://*/*"], + "js": ["../src/SEQTA.ts"], + "run_at": "document_start" + } + ], + "web_accessible_resources": [ + "../src/*", + "../public/*" + ] +} \ No newline at end of file diff --git a/interface/.eslintrc.cjs b/interface/.eslintrc.cjs deleted file mode 100644 index 2e04b2a0..00000000 --- a/interface/.eslintrc.cjs +++ /dev/null @@ -1,26 +0,0 @@ -module.exports = { - root: true, - env: { browser: true, es2020: true }, - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended', - 'plugin:react-hooks/recommended', - ], - ignorePatterns: ['dist', '.eslintrc.cjs'], - parser: '@typescript-eslint/parser', - plugins: ['react-refresh'], - rules: { - 'react-refresh/only-export-components': [ - 'warn', - { allowConstantExport: true }, - ], - }, - overrides: [ - { - files: ['*.ts', '*.tsx'], - rules: { - '@typescript-eslint/no-explicit-any': 'off', - }, - }, - ], -} diff --git a/interface/.gitignore b/interface/.gitignore deleted file mode 100644 index 3f74bee3..00000000 --- a/interface/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ - -# Sentry Config File -.env.sentry-build-plugin - -# Sentry Config File -.env.sentry-build-plugin - -# Sentry Config File -.env.sentry-build-plugin diff --git a/interface/package.json b/interface/package.json deleted file mode 100644 index 088910d4..00000000 --- a/interface/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "popup", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "dev": "vite build --watch", - "build": "tsc && vite build", - "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", - "preview": "vite preview" - }, - "dependencies": { - "@sentry/react": "^7.85.0", - "@sentry/vite-plugin": "^2.10.2", - "@types/chrome": "^0.0.246", - "@types/webextension-polyfill": "^0.10.7", - "framer-motion": "^10.16.4", - "react": "^18.2.0", - "react-best-gradient-color-picker": "2.2.24", - "react-dom": "^18.2.0", - "react-router-dom": "latest", - "tinycolor2": "^1.6.0", - "webextension-polyfill": "^0.10.0" - }, - "devDependencies": { - "@types/react": "^18.2.15", - "@types/react-dom": "^18.2.7", - "@typescript-eslint/eslint-plugin": "^6.0.0", - "@typescript-eslint/parser": "^6.0.0", - "@vitejs/plugin-react": "^4.0.3", - "autoprefixer": "^10.4.15", - "eslint": "^8.45.0", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-react-refresh": "^0.4.3", - "postcss": "^8.4.29", - "tailwindcss": "^3.3.3", - "typescript": "^5.0.2", - "vite": "^4.4.5" - } -} diff --git a/interface/pnpm-lock.yaml b/interface/pnpm-lock.yaml deleted file mode 100644 index fa5c0952..00000000 --- a/interface/pnpm-lock.yaml +++ /dev/null @@ -1,2611 +0,0 @@ -lockfileVersion: '6.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -dependencies: - '@sentry/react': - specifier: ^7.85.0 - version: 7.85.0(react@18.2.0) - '@sentry/vite-plugin': - specifier: ^2.10.2 - version: 2.10.2 - '@types/chrome': - specifier: ^0.0.246 - version: 0.0.246 - '@types/webextension-polyfill': - specifier: ^0.10.7 - version: 0.10.7 - framer-motion: - specifier: ^10.16.4 - version: 10.16.12(react-dom@18.2.0)(react@18.2.0) - react: - specifier: ^18.2.0 - version: 18.2.0 - react-best-gradient-color-picker: - specifier: 2.2.24 - version: 2.2.24(react-dom@18.2.0)(react@18.2.0) - react-dom: - specifier: ^18.2.0 - version: 18.2.0(react@18.2.0) - react-router-dom: - specifier: latest - version: 6.20.1(react-dom@18.2.0)(react@18.2.0) - tinycolor2: - specifier: ^1.6.0 - version: 1.6.0 - webextension-polyfill: - specifier: ^0.10.0 - version: 0.10.0 - -devDependencies: - '@types/react': - specifier: ^18.2.15 - version: 18.2.40 - '@types/react-dom': - specifier: ^18.2.7 - version: 18.2.17 - '@typescript-eslint/eslint-plugin': - specifier: ^6.0.0 - version: 6.13.1(@typescript-eslint/parser@6.13.1)(eslint@8.55.0)(typescript@5.3.2) - '@typescript-eslint/parser': - specifier: ^6.0.0 - version: 6.13.1(eslint@8.55.0)(typescript@5.3.2) - '@vitejs/plugin-react': - specifier: ^4.0.3 - version: 4.2.0(vite@4.5.0) - autoprefixer: - specifier: ^10.4.15 - version: 10.4.16(postcss@8.4.32) - eslint: - specifier: ^8.45.0 - version: 8.55.0 - eslint-plugin-react-hooks: - specifier: ^4.6.0 - version: 4.6.0(eslint@8.55.0) - eslint-plugin-react-refresh: - specifier: ^0.4.3 - version: 0.4.4(eslint@8.55.0) - postcss: - specifier: ^8.4.29 - version: 8.4.32 - tailwindcss: - specifier: ^3.3.3 - version: 3.3.5 - typescript: - specifier: ^5.0.2 - version: 5.3.2 - vite: - specifier: ^4.4.5 - version: 4.5.0 - -packages: - - /@aashutoshrathi/word-wrap@1.2.6: - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - dev: true - - /@alloc/quick-lru@5.2.0: - resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} - engines: {node: '>=10'} - dev: true - - /@ampproject/remapping@2.2.1: - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 - dev: true - - /@babel/code-frame@7.23.5: - resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.23.4 - chalk: 2.4.2 - dev: true - - /@babel/compat-data@7.23.5: - resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/core@7.23.5: - resolution: {integrity: sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g==} - engines: {node: '>=6.9.0'} - dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.5 - '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) - '@babel/helpers': 7.23.5 - '@babel/parser': 7.23.5 - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.5 - '@babel/types': 7.23.5 - convert-source-map: 2.0.0 - debug: 4.3.4 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/generator@7.23.5: - resolution: {integrity: sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.5 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 - jsesc: 2.5.2 - dev: true - - /@babel/helper-compilation-targets@7.22.15: - resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/compat-data': 7.23.5 - '@babel/helper-validator-option': 7.23.5 - browserslist: 4.22.1 - lru-cache: 5.1.1 - semver: 6.3.1 - dev: true - - /@babel/helper-environment-visitor@7.22.20: - resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-function-name@7.23.0: - resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.22.15 - '@babel/types': 7.23.5 - dev: true - - /@babel/helper-hoist-variables@7.22.5: - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.5 - dev: true - - /@babel/helper-module-imports@7.22.15: - resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.5 - dev: true - - /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.5): - resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.20 - dev: true - - /@babel/helper-plugin-utils@7.22.5: - resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-simple-access@7.22.5: - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.5 - dev: true - - /@babel/helper-split-export-declaration@7.22.6: - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.5 - dev: true - - /@babel/helper-string-parser@7.23.4: - resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-validator-identifier@7.22.20: - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-validator-option@7.23.5: - resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helpers@7.23.5: - resolution: {integrity: sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.5 - '@babel/types': 7.23.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/highlight@7.23.4: - resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.22.20 - chalk: 2.4.2 - js-tokens: 4.0.0 - dev: true - - /@babel/parser@7.23.5: - resolution: {integrity: sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==} - engines: {node: '>=6.0.0'} - hasBin: true - dependencies: - '@babel/types': 7.23.5 - dev: true - - /@babel/plugin-transform-react-jsx-self@7.23.3(@babel/core@7.23.5): - resolution: {integrity: sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-transform-react-jsx-source@7.23.3(@babel/core@7.23.5): - resolution: {integrity: sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/template@7.22.15: - resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/parser': 7.23.5 - '@babel/types': 7.23.5 - dev: true - - /@babel/traverse@7.23.5: - resolution: {integrity: sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.23.5 - '@babel/types': 7.23.5 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/types@7.23.5: - resolution: {integrity: sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.23.4 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 - dev: true - - /@emotion/is-prop-valid@0.8.8: - resolution: {integrity: sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==} - requiresBuild: true - dependencies: - '@emotion/memoize': 0.7.4 - dev: false - optional: true - - /@emotion/memoize@0.7.4: - resolution: {integrity: sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==} - requiresBuild: true - dev: false - optional: true - - /@esbuild/android-arm64@0.18.20: - resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-arm@0.18.20: - resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-x64@0.18.20: - resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-arm64@0.18.20: - resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-x64@0.18.20: - resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-arm64@0.18.20: - resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-x64@0.18.20: - resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm64@0.18.20: - resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm@0.18.20: - resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ia32@0.18.20: - resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-loong64@0.18.20: - resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-mips64el@0.18.20: - resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ppc64@0.18.20: - resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-riscv64@0.18.20: - resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-s390x@0.18.20: - resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-x64@0.18.20: - resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/netbsd-x64@0.18.20: - resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/openbsd-x64@0.18.20: - resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/sunos-x64@0.18.20: - resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-arm64@0.18.20: - resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-ia32@0.18.20: - resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-x64@0.18.20: - resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@eslint-community/eslint-utils@4.4.0(eslint@8.55.0): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - dependencies: - eslint: 8.55.0 - eslint-visitor-keys: 3.4.3 - dev: true - - /@eslint-community/regexpp@4.10.0: - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: true - - /@eslint/eslintrc@2.1.4: - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 9.6.1 - globals: 13.23.0 - ignore: 5.3.0 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - dev: true - - /@eslint/js@8.55.0: - resolution: {integrity: sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - - /@humanwhocodes/config-array@0.11.13: - resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} - engines: {node: '>=10.10.0'} - dependencies: - '@humanwhocodes/object-schema': 2.0.1 - debug: 4.3.4 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@humanwhocodes/module-importer@1.0.1: - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - dev: true - - /@humanwhocodes/object-schema@2.0.1: - resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} - dev: true - - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.20 - dev: true - - /@jridgewell/resolve-uri@3.1.1: - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} - engines: {node: '>=6.0.0'} - dev: true - - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} - engines: {node: '>=6.0.0'} - dev: true - - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - - /@jridgewell/trace-mapping@0.3.20: - resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - - /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - dev: true - - /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - dev: true - - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 - dev: true - - /@remix-run/router@1.13.1: - resolution: {integrity: sha512-so+DHzZKsoOcoXrILB4rqDkMDy7NLMErRdOxvzvOKb507YINKUP4Di+shbTZDhSE/pBZ+vr7XGIpcOO0VLSA+Q==} - engines: {node: '>=14.0.0'} - dev: false - - /@sentry-internal/feedback@7.85.0: - resolution: {integrity: sha512-MlbIN+N8CWFJBjbqMmARe4+UPo9QRhRar0YoOfmNA2Xqk/EwXcjHWkealosHznXH7tqVbjB25QJpHtDystft/Q==} - engines: {node: '>=12'} - dependencies: - '@sentry/core': 7.85.0 - '@sentry/types': 7.85.0 - '@sentry/utils': 7.85.0 - dev: false - - /@sentry-internal/tracing@7.85.0: - resolution: {integrity: sha512-p3YMUwkPCy2su9cm/3+7QYR4RiMI0+07DU1BZtht9NLTzY2O87/yvUbn1v2yHR3vJQTy/+7N0ud9/mPBFznRQQ==} - engines: {node: '>=8'} - dependencies: - '@sentry/core': 7.85.0 - '@sentry/types': 7.85.0 - '@sentry/utils': 7.85.0 - dev: false - - /@sentry/browser@7.85.0: - resolution: {integrity: sha512-x4sH7vTQnZQgy1U7NuN8XwhleAw7YMQitccHeC5m+kpIKGUO7w4Mdvu8rD3dnjmVmZvASpnwocAxy57/vCU6Ww==} - engines: {node: '>=8'} - dependencies: - '@sentry-internal/feedback': 7.85.0 - '@sentry-internal/tracing': 7.85.0 - '@sentry/core': 7.85.0 - '@sentry/replay': 7.85.0 - '@sentry/types': 7.85.0 - '@sentry/utils': 7.85.0 - dev: false - - /@sentry/bundler-plugin-core@2.10.2: - resolution: {integrity: sha512-7IoekLtROlJZqTxtHQ3IhocBuf9dsEq+JjqlHMyZXoq+QKuvJFvMd/4T+r6KjZ15kMZOIkR+spK3V7duH201hw==} - engines: {node: '>= 14'} - dependencies: - '@sentry/cli': 2.22.3 - '@sentry/node': 7.85.0 - '@sentry/utils': 7.85.0 - dotenv: 16.3.1 - find-up: 5.0.0 - glob: 9.3.2 - magic-string: 0.27.0 - unplugin: 1.0.1 - transitivePeerDependencies: - - encoding - - supports-color - dev: false - - /@sentry/cli-darwin@2.22.3: - resolution: {integrity: sha512-A1DwFTffg3+fF68qujaJI07dk/1H1pRuihlvS5WQ9sD7nQLnXZGoLUht4eULixhDzZYinWHKkcWzQ6k40UTvNA==} - engines: {node: '>=10'} - os: [darwin] - requiresBuild: true - dev: false - optional: true - - /@sentry/cli-linux-arm64@2.22.3: - resolution: {integrity: sha512-PnBPb4LJ+A2LlqLjtVFn4mEizcVdxBSLZvB85pEGzq9DRXjZ6ZEuGWFHTVnWvjd79TB/s0me29QnLc3n4B6lgA==} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux, freebsd] - requiresBuild: true - dev: false - optional: true - - /@sentry/cli-linux-arm@2.22.3: - resolution: {integrity: sha512-mDtLVbqbCu/5b/v2quTAMzY/atGlJVvrqO2Wvpro0Jb/LYhn7Y1pVBdoXEDcnOX82/pseFkLT8PFfq/OcezPhA==} - engines: {node: '>=10'} - cpu: [arm] - os: [linux, freebsd] - requiresBuild: true - dev: false - optional: true - - /@sentry/cli-linux-i686@2.22.3: - resolution: {integrity: sha512-wxvbpQ2hiw4hwJWfJMp7K45BV40nXL62f91jLuftFXIbieKX1Li57NNKNu2JUVn7W1bJxkwz/PKGGTXSgeJlRw==} - engines: {node: '>=10'} - cpu: [x86, ia32] - os: [linux, freebsd] - requiresBuild: true - dev: false - optional: true - - /@sentry/cli-linux-x64@2.22.3: - resolution: {integrity: sha512-0GxsYNO5GyRWifeOpng+MmdUFZRA64bgA1n1prsEsXnoeLcm3Zj4Q63hBZmiwz9Qbhf5ibohkpf94a7dI7pv3A==} - engines: {node: '>=10'} - cpu: [x64] - os: [linux, freebsd] - requiresBuild: true - dev: false - optional: true - - /@sentry/cli-win32-i686@2.22.3: - resolution: {integrity: sha512-YERPsd7ClBrxKcmCUw+ZrAvQfbyIZFrqh269hgDuXFodpsB7LPGnI33ilo0uzmKdq2vGppTb6Z3gf1Rbq0Hadg==} - engines: {node: '>=10'} - cpu: [x86, ia32] - os: [win32] - requiresBuild: true - dev: false - optional: true - - /@sentry/cli-win32-x64@2.22.3: - resolution: {integrity: sha512-NUh56xWvgJo2KuC9lI6o6nTPXdzbpQUB4qGwJ73L9NP3HT2P1I27jtHyrC2zlXTVlYE23gQZGrL3wgW4Jy80QA==} - engines: {node: '>=10'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: false - optional: true - - /@sentry/cli@2.22.3: - resolution: {integrity: sha512-VFHdtrHsMyTRSZhDLeMyXvit7xB4e81KugIEwMve95c7h5HO672bfmCcM/403CAugj4NzvQ+IR2NKF/2SsEPlg==} - engines: {node: '>= 10'} - hasBin: true - dependencies: - https-proxy-agent: 5.0.1 - node-fetch: 2.7.0 - progress: 2.0.3 - proxy-from-env: 1.1.0 - which: 2.0.2 - optionalDependencies: - '@sentry/cli-darwin': 2.22.3 - '@sentry/cli-linux-arm': 2.22.3 - '@sentry/cli-linux-arm64': 2.22.3 - '@sentry/cli-linux-i686': 2.22.3 - '@sentry/cli-linux-x64': 2.22.3 - '@sentry/cli-win32-i686': 2.22.3 - '@sentry/cli-win32-x64': 2.22.3 - transitivePeerDependencies: - - encoding - - supports-color - dev: false - - /@sentry/core@7.85.0: - resolution: {integrity: sha512-DFDAc4tWmHN5IWhr7XbHCiyF1Xgb95jz8Uj/JTX9atlgodId1UIbER77qpEmH3eQGid/QBdqrlR98zCixgSbwg==} - engines: {node: '>=8'} - dependencies: - '@sentry/types': 7.85.0 - '@sentry/utils': 7.85.0 - dev: false - - /@sentry/node@7.85.0: - resolution: {integrity: sha512-uiBtRW9G017NHoCXBlK3ttkTwHXLFyI8ndHpaObtyajKTv3ptGIThVEn7DuK7Pwor//RjwjSEEOa7WDK+FdMVQ==} - engines: {node: '>=8'} - dependencies: - '@sentry-internal/tracing': 7.85.0 - '@sentry/core': 7.85.0 - '@sentry/types': 7.85.0 - '@sentry/utils': 7.85.0 - https-proxy-agent: 5.0.1 - transitivePeerDependencies: - - supports-color - dev: false - - /@sentry/react@7.85.0(react@18.2.0): - resolution: {integrity: sha512-digw63l1A9n+74rW8uiG575Xh3qWTkmvwgTfNRFvDokDRMqRTP0iQEqZRBrBEzMZ5JUa6s+5NLc1/dbMh1QQgA==} - engines: {node: '>=8'} - peerDependencies: - react: 15.x || 16.x || 17.x || 18.x - dependencies: - '@sentry/browser': 7.85.0 - '@sentry/types': 7.85.0 - '@sentry/utils': 7.85.0 - hoist-non-react-statics: 3.3.2 - react: 18.2.0 - dev: false - - /@sentry/replay@7.85.0: - resolution: {integrity: sha512-zVtTKfO+lu5qTwHpETI/oGo8hU3rdKHr3CdI1vRLw+d60PcAa/pWVlXsQeLRTw8PFwE358gHcpFZezj/11afew==} - engines: {node: '>=12'} - dependencies: - '@sentry-internal/tracing': 7.85.0 - '@sentry/core': 7.85.0 - '@sentry/types': 7.85.0 - '@sentry/utils': 7.85.0 - dev: false - - /@sentry/types@7.85.0: - resolution: {integrity: sha512-R5jR4XkK5tBU2jDiPdSVqzkmjYRr666bcGaFGUHB/xDQCjPsjk+pEmCCL+vpuWoaZmQJUE1hVU7rgnVX81w8zg==} - engines: {node: '>=8'} - dev: false - - /@sentry/utils@7.85.0: - resolution: {integrity: sha512-JZ7seNOLvhjAQ8GeB3GYknPQJkuhF88xAYOaESZP3xPOWBMFUN+IO4RqjMqMLFDniOwsVQS7GB/MfP+hxufieg==} - engines: {node: '>=8'} - dependencies: - '@sentry/types': 7.85.0 - dev: false - - /@sentry/vite-plugin@2.10.2: - resolution: {integrity: sha512-30uu0L8ZCpAKOxAXmtyqwL06sG8UEBXGY5mxUDITyQYDf8pKuiOEf5018KlEDjhYVypfMQH3jq5xXUUka+/ipg==} - engines: {node: '>= 14'} - dependencies: - '@sentry/bundler-plugin-core': 2.10.2 - unplugin: 1.0.1 - transitivePeerDependencies: - - encoding - - supports-color - dev: false - - /@types/babel__core@7.20.5: - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - dependencies: - '@babel/parser': 7.23.5 - '@babel/types': 7.23.5 - '@types/babel__generator': 7.6.7 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.4 - dev: true - - /@types/babel__generator@7.6.7: - resolution: {integrity: sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==} - dependencies: - '@babel/types': 7.23.5 - dev: true - - /@types/babel__template@7.4.4: - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - dependencies: - '@babel/parser': 7.23.5 - '@babel/types': 7.23.5 - dev: true - - /@types/babel__traverse@7.20.4: - resolution: {integrity: sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==} - dependencies: - '@babel/types': 7.23.5 - dev: true - - /@types/chrome@0.0.246: - resolution: {integrity: sha512-MxGxEomGxsJiL9xe/7ZwVgwdn8XVKWbPvxpVQl3nWOjrS0Ce63JsfzxUc4aU3GvRcUPYsfufHmJ17BFyKxeA4g==} - dependencies: - '@types/filesystem': 0.0.35 - '@types/har-format': 1.2.15 - dev: false - - /@types/filesystem@0.0.35: - resolution: {integrity: sha512-1eKvCaIBdrD2mmMgy5dwh564rVvfEhZTWVQQGRNn0Nt4ZEnJ0C8oSUCzvMKRA4lGde5oEVo+q2MrTTbV/GHDCQ==} - dependencies: - '@types/filewriter': 0.0.32 - dev: false - - /@types/filewriter@0.0.32: - resolution: {integrity: sha512-Kpi2GXQyYJdjL8mFclL1eDgihn1SIzorMZjD94kdPZh9E4VxGOeyjPxi5LpsM4Zku7P0reqegZTt2GxhmA9VBg==} - dev: false - - /@types/har-format@1.2.15: - resolution: {integrity: sha512-RpQH4rXLuvTXKR0zqHq3go0RVXYv/YVqv4TnPH95VbwUxZdQlK1EtcMvQvMpDngHbt13Csh9Z4qT9AbkiQH5BA==} - dev: false - - /@types/json-schema@7.0.15: - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - dev: true - - /@types/prop-types@15.7.11: - resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} - dev: true - - /@types/react-dom@18.2.17: - resolution: {integrity: sha512-rvrT/M7Df5eykWFxn6MYt5Pem/Dbyc1N8Y0S9Mrkw2WFCRiqUgw9P7ul2NpwsXCSM1DVdENzdG9J5SreqfAIWg==} - dependencies: - '@types/react': 18.2.40 - dev: true - - /@types/react@18.2.40: - resolution: {integrity: sha512-H+BUhb9C1zBtogDLAk+KCNRKiHDrqSwQT/0z0PVTwMFBxqg3011ByLomADtgkgMkfwj4AMOiXBReyLTUBg681g==} - dependencies: - '@types/prop-types': 15.7.11 - '@types/scheduler': 0.16.8 - csstype: 3.1.2 - dev: true - - /@types/scheduler@0.16.8: - resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} - dev: true - - /@types/semver@7.5.6: - resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} - dev: true - - /@types/webextension-polyfill@0.10.7: - resolution: {integrity: sha512-10ql7A0qzBmFB+F+qAke/nP1PIonS0TXZAOMVOxEUsm+lGSW6uwVcISFNa0I4Oyj0884TZVWGGMIWeXOVSNFHw==} - dev: false - - /@typescript-eslint/eslint-plugin@6.13.1(@typescript-eslint/parser@6.13.1)(eslint@8.55.0)(typescript@5.3.2): - resolution: {integrity: sha512-5bQDGkXaxD46bPvQt08BUz9YSaO4S0fB1LB5JHQuXTfkGPI3+UUeS387C/e9jRie5GqT8u5kFTrMvAjtX4O5kA==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.13.1(eslint@8.55.0)(typescript@5.3.2) - '@typescript-eslint/scope-manager': 6.13.1 - '@typescript-eslint/type-utils': 6.13.1(eslint@8.55.0)(typescript@5.3.2) - '@typescript-eslint/utils': 6.13.1(eslint@8.55.0)(typescript@5.3.2) - '@typescript-eslint/visitor-keys': 6.13.1 - debug: 4.3.4 - eslint: 8.55.0 - graphemer: 1.4.0 - ignore: 5.3.0 - natural-compare: 1.4.0 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.2) - typescript: 5.3.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/parser@6.13.1(eslint@8.55.0)(typescript@5.3.2): - resolution: {integrity: sha512-fs2XOhWCzRhqMmQf0eicLa/CWSaYss2feXsy7xBD/pLyWke/jCIVc2s1ikEAtSW7ina1HNhv7kONoEfVNEcdDQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': 6.13.1 - '@typescript-eslint/types': 6.13.1 - '@typescript-eslint/typescript-estree': 6.13.1(typescript@5.3.2) - '@typescript-eslint/visitor-keys': 6.13.1 - debug: 4.3.4 - eslint: 8.55.0 - typescript: 5.3.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/scope-manager@6.13.1: - resolution: {integrity: sha512-BW0kJ7ceiKi56GbT2KKzZzN+nDxzQK2DS6x0PiSMPjciPgd/JRQGMibyaN2cPt2cAvuoH0oNvn2fwonHI+4QUQ==} - engines: {node: ^16.0.0 || >=18.0.0} - dependencies: - '@typescript-eslint/types': 6.13.1 - '@typescript-eslint/visitor-keys': 6.13.1 - dev: true - - /@typescript-eslint/type-utils@6.13.1(eslint@8.55.0)(typescript@5.3.2): - resolution: {integrity: sha512-A2qPlgpxx2v//3meMqQyB1qqTg1h1dJvzca7TugM3Yc2USDY+fsRBiojAEo92HO7f5hW5mjAUF6qobOPzlBCBQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/typescript-estree': 6.13.1(typescript@5.3.2) - '@typescript-eslint/utils': 6.13.1(eslint@8.55.0)(typescript@5.3.2) - debug: 4.3.4 - eslint: 8.55.0 - ts-api-utils: 1.0.3(typescript@5.3.2) - typescript: 5.3.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/types@6.13.1: - resolution: {integrity: sha512-gjeEskSmiEKKFIbnhDXUyiqVma1gRCQNbVZ1C8q7Zjcxh3WZMbzWVfGE9rHfWd1msQtPS0BVD9Jz9jded44eKg==} - engines: {node: ^16.0.0 || >=18.0.0} - dev: true - - /@typescript-eslint/typescript-estree@6.13.1(typescript@5.3.2): - resolution: {integrity: sha512-sBLQsvOC0Q7LGcUHO5qpG1HxRgePbT6wwqOiGLpR8uOJvPJbfs0mW3jPA3ujsDvfiVwVlWUDESNXv44KtINkUQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/types': 6.13.1 - '@typescript-eslint/visitor-keys': 6.13.1 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.2) - typescript: 5.3.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/utils@6.13.1(eslint@8.55.0)(typescript@5.3.2): - resolution: {integrity: sha512-ouPn/zVoan92JgAegesTXDB/oUp6BP1v8WpfYcqh649ejNc9Qv+B4FF2Ff626kO1xg0wWwwG48lAJ4JuesgdOw==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 6.13.1 - '@typescript-eslint/types': 6.13.1 - '@typescript-eslint/typescript-estree': 6.13.1(typescript@5.3.2) - eslint: 8.55.0 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@typescript-eslint/visitor-keys@6.13.1: - resolution: {integrity: sha512-NDhQUy2tg6XGNBGDRm1XybOHSia8mcXmlbKWoQP+nm1BIIMxa55shyJfZkHpEBN62KNPLrocSM2PdPcaLgDKMQ==} - engines: {node: ^16.0.0 || >=18.0.0} - dependencies: - '@typescript-eslint/types': 6.13.1 - eslint-visitor-keys: 3.4.3 - dev: true - - /@ungap/structured-clone@1.2.0: - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - dev: true - - /@vitejs/plugin-react@4.2.0(vite@4.5.0): - resolution: {integrity: sha512-+MHTH/e6H12kRp5HUkzOGqPMksezRMmW+TNzlh/QXfI8rRf6l2Z2yH/v12no1UvTwhZgEDMuQ7g7rrfMseU6FQ==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - vite: ^4.2.0 || ^5.0.0 - dependencies: - '@babel/core': 7.23.5 - '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.23.5) - '@types/babel__core': 7.20.5 - react-refresh: 0.14.0 - vite: 4.5.0 - transitivePeerDependencies: - - supports-color - dev: true - - /acorn-jsx@5.3.2(acorn@8.11.2): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - acorn: 8.11.2 - dev: true - - /acorn@8.11.2: - resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} - engines: {node: '>=0.4.0'} - hasBin: true - - /agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} - dependencies: - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: false - - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - dev: true - - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: true - - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - dependencies: - color-convert: 1.9.3 - dev: true - - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - dependencies: - color-convert: 2.0.1 - dev: true - - /any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - dev: true - - /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - - /arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - dev: true - - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true - - /array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - dev: true - - /autoprefixer@10.4.16(postcss@8.4.32): - resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 - dependencies: - browserslist: 4.22.1 - caniuse-lite: 1.0.30001565 - fraction.js: 4.3.7 - normalize-range: 0.1.2 - picocolors: 1.0.0 - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: true - - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - /base64-arraybuffer@1.0.2: - resolution: {integrity: sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==} - engines: {node: '>= 0.6.0'} - dev: false - - /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} - - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - dev: true - - /brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - dependencies: - balanced-match: 1.0.2 - dev: false - - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - dependencies: - fill-range: 7.0.1 - - /browserslist@4.22.1: - resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - dependencies: - caniuse-lite: 1.0.30001565 - electron-to-chromium: 1.4.601 - node-releases: 2.0.14 - update-browserslist-db: 1.0.13(browserslist@4.22.1) - dev: true - - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - dev: true - - /camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} - dev: true - - /caniuse-lite@1.0.30001565: - resolution: {integrity: sha512-xrE//a3O7TP0vaJ8ikzkD2c2NgcVUvsEe2IvFTntV4Yd1Z9FVzh+gW+enX96L0psrbaFMcVcH2l90xNuGDWc8w==} - dev: true - - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - dev: true - - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: true - - /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.3 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - dependencies: - color-name: 1.1.3 - dev: true - - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - dependencies: - color-name: 1.1.4 - dev: true - - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - dev: true - - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true - - /commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - dev: true - - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true - - /convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - dev: true - - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - dev: true - - /css-line-break@2.1.0: - resolution: {integrity: sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==} - dependencies: - utrie: 1.0.2 - dev: false - - /cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - dev: true - - /csstype@3.1.2: - resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} - dev: true - - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - - /deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: true - - /didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - dev: true - - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - dependencies: - path-type: 4.0.0 - dev: true - - /dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - dev: true - - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dependencies: - esutils: 2.0.3 - dev: true - - /dotenv@16.3.1: - resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} - engines: {node: '>=12'} - dev: false - - /electron-to-chromium@1.4.601: - resolution: {integrity: sha512-SpwUMDWe9tQu8JX5QCO1+p/hChAi9AE9UpoC3rcHVc+gdCGlbT3SGb5I1klgb952HRIyvt9wZhSz9bNBYz9swA==} - dev: true - - /esbuild@0.18.20: - resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.18.20 - '@esbuild/android-arm64': 0.18.20 - '@esbuild/android-x64': 0.18.20 - '@esbuild/darwin-arm64': 0.18.20 - '@esbuild/darwin-x64': 0.18.20 - '@esbuild/freebsd-arm64': 0.18.20 - '@esbuild/freebsd-x64': 0.18.20 - '@esbuild/linux-arm': 0.18.20 - '@esbuild/linux-arm64': 0.18.20 - '@esbuild/linux-ia32': 0.18.20 - '@esbuild/linux-loong64': 0.18.20 - '@esbuild/linux-mips64el': 0.18.20 - '@esbuild/linux-ppc64': 0.18.20 - '@esbuild/linux-riscv64': 0.18.20 - '@esbuild/linux-s390x': 0.18.20 - '@esbuild/linux-x64': 0.18.20 - '@esbuild/netbsd-x64': 0.18.20 - '@esbuild/openbsd-x64': 0.18.20 - '@esbuild/sunos-x64': 0.18.20 - '@esbuild/win32-arm64': 0.18.20 - '@esbuild/win32-ia32': 0.18.20 - '@esbuild/win32-x64': 0.18.20 - dev: true - - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - dev: true - - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - dev: true - - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - dev: true - - /eslint-plugin-react-hooks@4.6.0(eslint@8.55.0): - resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - dependencies: - eslint: 8.55.0 - dev: true - - /eslint-plugin-react-refresh@0.4.4(eslint@8.55.0): - resolution: {integrity: sha512-eD83+65e8YPVg6603Om2iCIwcQJf/y7++MWm4tACtEswFLYMwxwVWAfwN+e19f5Ad/FOyyNg9Dfi5lXhH3Y3rA==} - peerDependencies: - eslint: '>=7' - dependencies: - eslint: 8.55.0 - dev: true - - /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - dev: true - - /eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - - /eslint@8.55.0: - resolution: {integrity: sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) - '@eslint-community/regexpp': 4.10.0 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.55.0 - '@humanwhocodes/config-array': 0.11.13 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.5.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.23.0 - graphemer: 1.4.0 - ignore: 5.3.0 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.3 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - dev: true - - /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - acorn: 8.11.2 - acorn-jsx: 5.3.2(acorn@8.11.2) - eslint-visitor-keys: 3.4.3 - dev: true - - /esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} - dependencies: - estraverse: 5.3.0 - dev: true - - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - dependencies: - estraverse: 5.3.0 - dev: true - - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - dev: true - - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: true - - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true - - /fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.5 - dev: true - - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true - - /fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: true - - /fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} - dependencies: - reusify: 1.0.4 - dev: true - - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flat-cache: 3.2.0 - dev: true - - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - dependencies: - to-regex-range: 5.0.1 - - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - - /flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flatted: 3.2.9 - keyv: 4.5.4 - rimraf: 3.0.2 - dev: true - - /flatted@3.2.9: - resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} - dev: true - - /fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - dev: true - - /framer-motion@10.16.12(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-w7Yzx0OzQ5Uh6uNkxaX+4TuAPuOKz3haSbjmHpdrqDpGuCJCpq6YP9Dy7JJWdZ6mJjndrg3Ao3vUwDajKNikCA==} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - dependencies: - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - tslib: 2.6.2 - optionalDependencies: - '@emotion/is-prop-valid': 0.8.8 - dev: false - - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - - /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - optional: true - - /function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - dev: true - - /gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - dev: true - - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - dependencies: - is-glob: 4.0.3 - - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - dependencies: - is-glob: 4.0.3 - dev: true - - /glob@7.1.6: - resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - - /glob@9.3.2: - resolution: {integrity: sha512-BTv/JhKXFEHsErMte/AnfiSv8yYOLLiyH2lTg8vn02O21zWFgHPTfxtgn1QRe7NRgggUhC8hacR2Re94svHqeA==} - engines: {node: '>=16 || 14 >=14.17'} - dependencies: - fs.realpath: 1.0.0 - minimatch: 7.4.6 - minipass: 4.2.8 - path-scurry: 1.10.1 - dev: false - - /globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - dev: true - - /globals@13.23.0: - resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.20.2 - dev: true - - /globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.0 - merge2: 1.4.1 - slash: 3.0.0 - dev: true - - /graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - dev: true - - /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - dev: true - - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: true - - /hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} - engines: {node: '>= 0.4'} - dependencies: - function-bind: 1.1.2 - dev: true - - /hoist-non-react-statics@3.3.2: - resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} - dependencies: - react-is: 16.13.1 - dev: false - - /html2canvas@1.4.1: - resolution: {integrity: sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==} - engines: {node: '>=8.0.0'} - dependencies: - css-line-break: 2.1.0 - text-segmentation: 1.0.3 - dev: false - - /https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} - dependencies: - agent-base: 6.0.2 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: false - - /ignore@5.3.0: - resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} - engines: {node: '>= 4'} - dev: true - - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - dev: true - - /imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - dev: true - - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - dev: true - - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true - - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - dependencies: - binary-extensions: 2.2.0 - - /is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} - dependencies: - hasown: 2.0.0 - dev: true - - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - dependencies: - is-extglob: 2.1.1 - - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - dev: true - - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - /jiti@1.21.0: - resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} - hasBin: true - dev: true - - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - dependencies: - argparse: 2.0.1 - dev: true - - /jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - dev: true - - /json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - dev: true - - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true - - /json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: true - - /json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - dev: true - - /keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - dependencies: - json-buffer: 3.0.1 - dev: true - - /levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - dev: true - - /lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} - dev: true - - /lilconfig@3.0.0: - resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} - engines: {node: '>=14'} - dev: true - - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: true - - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - dependencies: - p-locate: 5.0.0 - - /lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true - - /lodash.throttle@4.1.1: - resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} - dev: false - - /loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - dependencies: - js-tokens: 4.0.0 - dev: false - - /lru-cache@10.1.0: - resolution: {integrity: sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==} - engines: {node: 14 || >=16.14} - dev: false - - /lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - dependencies: - yallist: 3.1.1 - dev: true - - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - dependencies: - yallist: 4.0.0 - dev: true - - /magic-string@0.27.0: - resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} - engines: {node: '>=12'} - dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - dev: false - - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - dev: true - - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} - dependencies: - braces: 3.0.2 - picomatch: 2.3.1 - dev: true - - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - dependencies: - brace-expansion: 1.1.11 - dev: true - - /minimatch@7.4.6: - resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==} - engines: {node: '>=10'} - dependencies: - brace-expansion: 2.0.1 - dev: false - - /minipass@4.2.8: - resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} - engines: {node: '>=8'} - dev: false - - /minipass@7.0.4: - resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} - engines: {node: '>=16 || 14 >=14.17'} - dev: false - - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - - /mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 - dev: true - - /nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true - - /natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - dev: true - - /node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - dependencies: - whatwg-url: 5.0.0 - dev: false - - /node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} - dev: true - - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - - /normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} - dev: true - - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - dev: true - - /object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} - dev: true - - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - dependencies: - wrappy: 1.0.2 - dev: true - - /optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} - dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - dev: true - - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - dependencies: - yocto-queue: 0.1.0 - - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - dependencies: - p-limit: 3.1.0 - - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - dependencies: - callsites: 3.1.0 - dev: true - - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true - - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - dev: true - - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true - - /path-scurry@1.10.1: - resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} - engines: {node: '>=16 || 14 >=14.17'} - dependencies: - lru-cache: 10.1.0 - minipass: 7.0.4 - dev: false - - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - dev: true - - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: true - - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - /pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - dev: true - - /pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - dev: true - - /postcss-import@15.1.0(postcss@8.4.32): - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} - peerDependencies: - postcss: ^8.0.0 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.8 - dev: true - - /postcss-js@4.0.1(postcss@8.4.32): - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} - engines: {node: ^12 || ^14 || >= 16} - peerDependencies: - postcss: ^8.4.21 - dependencies: - camelcase-css: 2.0.1 - postcss: 8.4.32 - dev: true - - /postcss-load-config@4.0.2(postcss@8.4.32): - resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} - engines: {node: '>= 14'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - dependencies: - lilconfig: 3.0.0 - postcss: 8.4.32 - yaml: 2.3.4 - dev: true - - /postcss-nested@6.0.1(postcss@8.4.32): - resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 - dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: true - - /postcss-selector-parser@6.0.13: - resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} - engines: {node: '>=4'} - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - dev: true - - /postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - dev: true - - /postcss@8.4.32: - resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.7 - picocolors: 1.0.0 - source-map-js: 1.0.2 - dev: true - - /prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - dev: true - - /progress@2.0.3: - resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} - engines: {node: '>=0.4.0'} - dev: false - - /proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - dev: false - - /punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - dev: true - - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true - - /react-best-gradient-color-picker@2.2.24(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-7GsKDWHsELCnsGCS9eD8AKjWuqIrIfROZx3fzdGNdtsH5TfLof2CGZGoz3NPNusPcIoe2IPrjeCA4fUqAoUgEg==} - peerDependencies: - react: ^16.3.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.3.0 || ^17.0.0 || ^18.0.0 - dependencies: - html2canvas: 1.4.1 - lodash.throttle: 4.1.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - tinycolor2: 1.4.2 - dev: false - - /react-dom@18.2.0(react@18.2.0): - resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} - peerDependencies: - react: ^18.2.0 - dependencies: - loose-envify: 1.4.0 - react: 18.2.0 - scheduler: 0.23.0 - dev: false - - /react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - dev: false - - /react-refresh@0.14.0: - resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} - engines: {node: '>=0.10.0'} - dev: true - - /react-router-dom@6.20.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-npzfPWcxfQN35psS7rJgi/EW0Gx6EsNjfdJSAk73U/HqMEJZ2k/8puxfwHFgDQhBGmS3+sjnGbMdMSV45axPQw==} - engines: {node: '>=14.0.0'} - peerDependencies: - react: '>=16.8' - react-dom: '>=16.8' - dependencies: - '@remix-run/router': 1.13.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-router: 6.20.1(react@18.2.0) - dev: false - - /react-router@6.20.1(react@18.2.0): - resolution: {integrity: sha512-ccvLrB4QeT5DlaxSFFYi/KR8UMQ4fcD8zBcR71Zp1kaYTC5oJKYAp1cbavzGrogwxca+ubjkd7XjFZKBW8CxPA==} - engines: {node: '>=14.0.0'} - peerDependencies: - react: '>=16.8' - dependencies: - '@remix-run/router': 1.13.1 - react: 18.2.0 - dev: false - - /react@18.2.0: - resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} - engines: {node: '>=0.10.0'} - dependencies: - loose-envify: 1.4.0 - dev: false - - /read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} - dependencies: - pify: 2.3.0 - dev: true - - /readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - dependencies: - picomatch: 2.3.1 - - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - dev: true - - /resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true - dependencies: - is-core-module: 2.13.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - dev: true - - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true - - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true - dependencies: - glob: 7.2.3 - dev: true - - /rollup@3.29.4: - resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.3 - dev: true - - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - dependencies: - queue-microtask: 1.2.3 - dev: true - - /scheduler@0.23.0: - resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} - dependencies: - loose-envify: 1.4.0 - dev: false - - /semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - dev: true - - /semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} - engines: {node: '>=10'} - hasBin: true - dependencies: - lru-cache: 6.0.0 - dev: true - - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - dependencies: - shebang-regex: 3.0.0 - dev: true - - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - dev: true - - /slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - dev: true - - /source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} - engines: {node: '>=0.10.0'} - dev: true - - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - dependencies: - ansi-regex: 5.0.1 - dev: true - - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: true - - /sucrase@3.34.0: - resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} - engines: {node: '>=8'} - hasBin: true - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - commander: 4.1.1 - glob: 7.1.6 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.6 - ts-interface-checker: 0.1.13 - dev: true - - /supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - dependencies: - has-flag: 3.0.0 - dev: true - - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - dependencies: - has-flag: 4.0.0 - dev: true - - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - dev: true - - /tailwindcss@3.3.5: - resolution: {integrity: sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA==} - engines: {node: '>=14.0.0'} - hasBin: true - 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.2 - 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.32 - postcss-import: 15.1.0(postcss@8.4.32) - postcss-js: 4.0.1(postcss@8.4.32) - postcss-load-config: 4.0.2(postcss@8.4.32) - postcss-nested: 6.0.1(postcss@8.4.32) - postcss-selector-parser: 6.0.13 - resolve: 1.22.8 - sucrase: 3.34.0 - transitivePeerDependencies: - - ts-node - dev: true - - /text-segmentation@1.0.3: - resolution: {integrity: sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==} - dependencies: - utrie: 1.0.2 - dev: false - - /text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: true - - /thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} - dependencies: - thenify: 3.3.1 - dev: true - - /thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - dependencies: - any-promise: 1.3.0 - dev: true - - /tinycolor2@1.4.2: - resolution: {integrity: sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==} - dev: false - - /tinycolor2@1.6.0: - resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} - dev: false - - /to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - dev: true - - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - dependencies: - is-number: 7.0.0 - - /tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - dev: false - - /ts-api-utils@1.0.3(typescript@5.3.2): - resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} - engines: {node: '>=16.13.0'} - peerDependencies: - typescript: '>=4.2.0' - dependencies: - typescript: 5.3.2 - dev: true - - /ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - dev: true - - /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - dev: false - - /type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.2.1 - dev: true - - /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - dev: true - - /typescript@5.3.2: - resolution: {integrity: sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==} - engines: {node: '>=14.17'} - hasBin: true - dev: true - - /unplugin@1.0.1: - resolution: {integrity: sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA==} - dependencies: - acorn: 8.11.2 - chokidar: 3.5.3 - webpack-sources: 3.2.3 - webpack-virtual-modules: 0.5.0 - dev: false - - /update-browserslist-db@1.0.13(browserslist@4.22.1): - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - dependencies: - browserslist: 4.22.1 - escalade: 3.1.1 - picocolors: 1.0.0 - dev: true - - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - dependencies: - punycode: 2.3.1 - dev: true - - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: true - - /utrie@1.0.2: - resolution: {integrity: sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==} - dependencies: - base64-arraybuffer: 1.0.2 - dev: false - - /vite@4.5.0: - resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - dependencies: - esbuild: 0.18.20 - postcss: 8.4.32 - rollup: 3.29.4 - optionalDependencies: - fsevents: 2.3.3 - dev: true - - /webextension-polyfill@0.10.0: - resolution: {integrity: sha512-c5s35LgVa5tFaHhrZDnr3FpQpjj1BB+RXhLTYUxGqBVN460HkbM8TBtEqdXWbpTKfzwCcjAZVF7zXCYSKtcp9g==} - dev: false - - /webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: false - - /webpack-sources@3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} - engines: {node: '>=10.13.0'} - dev: false - - /webpack-virtual-modules@0.5.0: - resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==} - dev: false - - /whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - dev: false - - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - dependencies: - isexe: 2.0.0 - - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true - - /yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - dev: true - - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true - - /yaml@2.3.4: - resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} - engines: {node: '>= 14'} - dev: true - - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} diff --git a/interface/postcss.config.js b/interface/postcss.config.js deleted file mode 100644 index ca8d5ea8..00000000 --- a/interface/postcss.config.js +++ /dev/null @@ -1,9 +0,0 @@ -import tailwindcss from "tailwindcss"; -import autoprefixer from "autoprefixer"; - -export default { - plugins: [ - tailwindcss, - autoprefixer, - ], -}; diff --git a/interface/tailwind.config.js b/interface/tailwind.config.js deleted file mode 100644 index 92fa0285..00000000 --- a/interface/tailwind.config.js +++ /dev/null @@ -1,37 +0,0 @@ -/** @type {import('tailwindcss').Config} */ -export default { - content: [ - "./index.html", - "./src/**/*.{js,ts,jsx,tsx}", - ], - darkMode: "class", - theme: { - fontSize: { - "xs": ".65rem", - "sm": ".775rem", - "base": "0.65rem", - "md": "0.65rem", - "lg": "1rem", - "xl": "1.25rem", - "2xl": "1.5rem", - "3xl": "1.875rem", - "4xl": "2.25rem", - "5xl": "3rem", - "6xl": "4rem", - "7xl": "5rem", - "8xl": "6rem", - "9xl": "8rem", - "10xl": "10rem", - "11xl": "12rem", - "12xl": "14rem", - "13xl": "16rem", - "14xl": "18rem", - }, - extend: { - fontFamily: { - "IconFamily": "IconFamily" - } - } - }, - plugins: [], -}; \ No newline at end of file diff --git a/interface/tsconfig.json b/interface/tsconfig.json deleted file mode 100644 index 4bf8ca46..00000000 --- a/interface/tsconfig.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2020", - "useDefineForClassFields": true, - "lib": ["ES2020", "DOM", "DOM.Iterable"], - "module": "ESNext", - "skipLibCheck": true, - - /* Bundler mode */ - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "jsx": "react-jsx", - - /* Linting */ - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true - }, - "include": ["src"] -} diff --git a/interface/vite.config.d.ts b/interface/vite.config.d.ts deleted file mode 100644 index 340562af..00000000 --- a/interface/vite.config.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -declare const _default: import("vite").UserConfig; -export default _default; diff --git a/interface/vite.config.ts b/interface/vite.config.ts deleted file mode 100644 index 91ada8a0..00000000 --- a/interface/vite.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { sentryVitePlugin } from "@sentry/vite-plugin"; -import { defineConfig } from 'vite' -import react from '@vitejs/plugin-react' - -// https://vitejs.dev/config/ -export default defineConfig({ - plugins: [react(), sentryVitePlugin({ - org: "betterseqta-plus", - project: "betterseqtaplus-popup" - })], - build: { - //outDir: '../../public/popup-dist', - rollupOptions: { - output: { - assetFileNames: 'client/rsc/[ext]/[name][extname]', - chunkFileNames: 'client/rsc/[chunks]/[name].[hash].js', - entryFileNames: 'client/public/client.js' - } - }, - - sourcemap: true - } -}) \ No newline at end of file diff --git a/manifest.json b/manifest.json new file mode 100644 index 00000000..530f15e2 --- /dev/null +++ b/manifest.json @@ -0,0 +1,42 @@ +{ + "manifest_version": 3, + "name": "BetterSEQTA+", + "version": "3.2.2", + "description": "Make SEQTA usable and beautiful! A fork of BetterSEQTA to continue development and add WAY more features!!!", + "icons": { + "32": "src/resources/icons/icon-32.png", + "48": "src/resources/icons/icon-48.png", + "64": "src/resources/icons/icon-64.png" + }, + "action": { + "browser_style": true, + "default_popup": "src/interface/index.html#settings", + "default_icon": { + "32": "src/resources/icons/icon-32.png", + "48": "src/resources/icons/icon-48.png", + "64": "src/resources/icons/icon-64.png" + } + }, + "permissions": ["tabs", "notifications", "storage"], + "host_permissions": ["https://newsapi.org/", "*://*/*"], + "background": { + "service_worker": "src/background.ts", + "type": "module" + }, + "content_scripts": [ + { + "matches": ["*://*/*"], + "js": ["src/SEQTA.ts"], + "run_at": "document_start" + } + ], + "web_accessible_resources": [ + { + "resources": [ + "public/*", + "src/*" + ], + "matches": ["*://*/*"] + } + ] +} \ No newline at end of file diff --git a/package.json b/package.json index 2b611fc0..b87c8560 100644 --- a/package.json +++ b/package.json @@ -3,51 +3,72 @@ "version": "3.2.2", "type": "module", "description": "BetterSEQTA+ is a browser extension that adds features to SEQTA.", - "main": "webpack.config.js", "scripts": { - "build": "webpack --config webpack.config.js --mode production && sh ./package.sh", - "dev": "webpack --config webpack.config.js --watch --mode development", - "eslint": "eslint --fix ." + "dev": "parcel watch manifest.json --host localhost --config @parcel/config-webextension --no-hmr --no-content-hash", + "build": "parcel build manifest.json --config @parcel/config-webextension --no-content-hash --no-cache", + "dev-firefox": "parcel watch firefox/manifest.json --host localhost --config @parcel/config-webextension --no-hmr --no-content-hash", + "build-firefox": "parcel build firefox/manifest.json --config @parcel/config-webextension --no-content-hash --no-cache", + "eslint": "eslint --fix .", + "package": "7z a -tzip extension.zip ./build/*" }, "keywords": [], "author": "", "license": "MIT", "devDependencies": { - "copy-webpack-plugin": "^11.0.0", - "css-loader": "^6.8.1", - "dompurify": "^3.0.5", + "@parcel/config-webextension": "^2.11.0", + "@parcel/optimizer-data-url": "^2.11.0", + "@parcel/transformer-inline-string": "^2.11.0", + "@parcel/transformer-sass": "2.11.0", + "assert": "^2.0.0", + "browserify-zlib": "^0.2.0", + "crypto-browserify": "^3.12.0", "eslint": "^8.48.0", "eslint-config-prettier": "^9.0.0", "eslint-webpack-plugin": "^4.0.1", - "file-loader": "^6.2.0", - "mini-css-extract-plugin": "^2.7.6", - "prettier": "3.0.2", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "parcel": "^2.10.3", + "path-browserify": "^1.0.0", + "prettier": "^3.2.2", + "process": "^0.11.10", + "querystring-es3": "^0.2.1", "sass": "^1.69.5", "sass-loader": "^13.3.2", + "stream-browserify": "^3.0.0", + "stream-http": "^3.1.0", "style-loader": "^3.3.3", - "webextension-polyfill": "^0.10.0", - "webpack": "^5.88.2", - "webpack-cli": "^5.1.4" + "tty-browserify": "^0.0.1", + "url": "^0.11.0", + "util": "^0.12.3", + "yarn": "^1.22.21" }, "dependencies": { "@sentry/browser": "^7.85.0", + "@sentry/react": "^7.88.0", "@sentry/webpack-plugin": "^2.10.2", "@types/color": "^3.0.4", "@types/dompurify": "^3.0.5", "@types/react": "^18.2.21", + "@types/react-dom": "^18.2.18", "@types/sortablejs": "^1.15.7", "@types/webextension-polyfill": "^0.10.7", "autoprefixer": "^10.4.15", "color": "^4.2.3", + "dompurify": "^3.0.8", + "framer-motion": "^10.16.16", "install": "^0.13.0", "localforage": "^1.10.0", "motion": "^10.16.4", "npm": "^10.1.0", "postcss": "^8.4.29", "react": "^18.2.0", + "react-best-gradient-color-picker": "^2.3.5", + "react-dom": "^18.2.0", + "react-router-dom": "^6.21.0", "sortablejs": "^1.15.0", "tailwindcss": "^3.3.3", "ts-loader": "^9.5.1", - "typescript": "^5.2.2" + "typescript": "^5.2.2", + "webextension-polyfill": "^0.10.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml deleted file mode 100644 index fc1bba91..00000000 --- a/pnpm-lock.yaml +++ /dev/null @@ -1,2715 +0,0 @@ -lockfileVersion: '6.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -dependencies: - '@sentry/browser': - specifier: ^7.85.0 - version: 7.85.0 - '@sentry/webpack-plugin': - specifier: ^2.10.2 - version: 2.10.2(webpack@5.89.0) - '@types/color': - specifier: ^3.0.4 - version: 3.0.6 - '@types/dompurify': - specifier: ^3.0.5 - version: 3.0.5 - '@types/react': - specifier: ^18.2.21 - version: 18.2.40 - '@types/sortablejs': - specifier: ^1.15.7 - version: 1.15.7 - '@types/webextension-polyfill': - specifier: ^0.10.7 - version: 0.10.7 - autoprefixer: - specifier: ^10.4.15 - version: 10.4.16(postcss@8.4.32) - color: - specifier: ^4.2.3 - version: 4.2.3 - install: - specifier: ^0.13.0 - version: 0.13.0 - localforage: - specifier: ^1.10.0 - version: 1.10.0 - motion: - specifier: ^10.16.4 - version: 10.16.4 - npm: - specifier: ^10.1.0 - version: 10.2.4 - postcss: - specifier: ^8.4.29 - version: 8.4.32 - react: - specifier: ^18.2.0 - version: 18.2.0 - sortablejs: - specifier: ^1.15.0 - version: 1.15.1 - tailwindcss: - specifier: ^3.3.3 - version: 3.3.5 - ts-loader: - specifier: ^9.5.1 - version: 9.5.1(typescript@5.3.2)(webpack@5.89.0) - typescript: - specifier: ^5.2.2 - version: 5.3.2 - -devDependencies: - copy-webpack-plugin: - specifier: ^11.0.0 - version: 11.0.0(webpack@5.89.0) - css-loader: - specifier: ^6.8.1 - version: 6.8.1(webpack@5.89.0) - dompurify: - specifier: ^3.0.5 - version: 3.0.6 - eslint: - specifier: ^8.48.0 - version: 8.55.0 - eslint-config-prettier: - specifier: ^9.0.0 - version: 9.0.0(eslint@8.55.0) - eslint-webpack-plugin: - specifier: ^4.0.1 - version: 4.0.1(eslint@8.55.0)(webpack@5.89.0) - file-loader: - specifier: ^6.2.0 - version: 6.2.0(webpack@5.89.0) - mini-css-extract-plugin: - specifier: ^2.7.6 - version: 2.7.6(webpack@5.89.0) - prettier: - specifier: 3.0.2 - version: 3.0.2 - sass: - specifier: ^1.69.5 - version: 1.69.5 - sass-loader: - specifier: ^13.3.2 - version: 13.3.2(sass@1.69.5)(webpack@5.89.0) - style-loader: - specifier: ^3.3.3 - version: 3.3.3(webpack@5.89.0) - webextension-polyfill: - specifier: ^0.10.0 - version: 0.10.0 - webpack: - specifier: ^5.88.2 - version: 5.89.0(webpack-cli@5.1.4) - webpack-cli: - specifier: ^5.1.4 - version: 5.1.4(webpack@5.89.0) - -packages: - - /@aashutoshrathi/word-wrap@1.2.6: - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - dev: true - - /@alloc/quick-lru@5.2.0: - resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} - engines: {node: '>=10'} - dev: false - - /@discoveryjs/json-ext@0.5.7: - resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} - engines: {node: '>=10.0.0'} - - /@eslint-community/eslint-utils@4.4.0(eslint@8.55.0): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - dependencies: - eslint: 8.55.0 - eslint-visitor-keys: 3.4.3 - dev: true - - /@eslint-community/regexpp@4.10.0: - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: true - - /@eslint/eslintrc@2.1.4: - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 9.6.1 - globals: 13.23.0 - ignore: 5.3.0 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - dev: true - - /@eslint/js@8.55.0: - resolution: {integrity: sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - - /@humanwhocodes/config-array@0.11.13: - resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} - engines: {node: '>=10.10.0'} - dependencies: - '@humanwhocodes/object-schema': 2.0.1 - debug: 4.3.4 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@humanwhocodes/module-importer@1.0.1: - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - dev: true - - /@humanwhocodes/object-schema@2.0.1: - resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} - dev: true - - /@jest/schemas@29.6.3: - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@sinclair/typebox': 0.27.8 - dev: true - - /@jest/types@29.6.3: - resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/schemas': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 20.10.2 - '@types/yargs': 17.0.32 - chalk: 4.1.2 - dev: true - - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.20 - - /@jridgewell/resolve-uri@3.1.1: - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} - engines: {node: '>=6.0.0'} - - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} - engines: {node: '>=6.0.0'} - - /@jridgewell/source-map@0.3.5: - resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 - - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - - /@jridgewell/trace-mapping@0.3.20: - resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 - - /@motionone/animation@10.16.3: - resolution: {integrity: sha512-QUGWpLbMFLhyqKlngjZhjtxM8IqiJQjLK0DF+XOF6od9nhSvlaeEpOY/UMCRVcZn/9Tr2rZO22EkuCIjYdI74g==} - dependencies: - '@motionone/easing': 10.16.3 - '@motionone/types': 10.16.3 - '@motionone/utils': 10.16.3 - tslib: 2.6.2 - dev: false - - /@motionone/dom@10.16.4: - resolution: {integrity: sha512-HPHlVo/030qpRj9R8fgY50KTN4Ko30moWRTA3L3imrsRBmob93cTYmodln49HYFbQm01lFF7X523OkKY0DX6UA==} - dependencies: - '@motionone/animation': 10.16.3 - '@motionone/generators': 10.16.4 - '@motionone/types': 10.16.3 - '@motionone/utils': 10.16.3 - hey-listen: 1.0.8 - tslib: 2.6.2 - dev: false - - /@motionone/easing@10.16.3: - resolution: {integrity: sha512-HWTMZbTmZojzwEuKT/xCdvoMPXjYSyQvuVM6jmM0yoGU6BWzsmYMeB4bn38UFf618fJCNtP9XeC/zxtKWfbr0w==} - dependencies: - '@motionone/utils': 10.16.3 - tslib: 2.6.2 - dev: false - - /@motionone/generators@10.16.4: - resolution: {integrity: sha512-geFZ3w0Rm0ZXXpctWsSf3REGywmLLujEjxPYpBR0j+ymYwof0xbV6S5kGqqsDKgyWKVWpUInqQYvQfL6fRbXeg==} - dependencies: - '@motionone/types': 10.16.3 - '@motionone/utils': 10.16.3 - tslib: 2.6.2 - dev: false - - /@motionone/svelte@10.16.4: - resolution: {integrity: sha512-zRVqk20lD1xqe+yEDZhMYgftsuHc25+9JSo+r0a0OWUJFocjSV9D/+UGhX4xgJsuwB9acPzXLr20w40VnY2PQA==} - dependencies: - '@motionone/dom': 10.16.4 - tslib: 2.6.2 - dev: false - - /@motionone/types@10.16.3: - resolution: {integrity: sha512-W4jkEGFifDq73DlaZs3HUfamV2t1wM35zN/zX7Q79LfZ2sc6C0R1baUHZmqc/K5F3vSw3PavgQ6HyHLd/MXcWg==} - dev: false - - /@motionone/utils@10.16.3: - resolution: {integrity: sha512-WNWDksJIxQkaI9p9Z9z0+K27xdqISGNFy1SsWVGaiedTHq0iaT6iZujby8fT/ZnZxj1EOaxJtSfUPCFNU5CRoA==} - dependencies: - '@motionone/types': 10.16.3 - hey-listen: 1.0.8 - tslib: 2.6.2 - dev: false - - /@motionone/vue@10.16.4: - resolution: {integrity: sha512-z10PF9JV6SbjFq+/rYabM+8CVlMokgl8RFGvieSGNTmrkQanfHn+15XBrhG3BgUfvmTeSeyShfOHpG0i9zEdcg==} - dependencies: - '@motionone/dom': 10.16.4 - tslib: 2.6.2 - dev: false - - /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 - - /@sentry-internal/feedback@7.85.0: - resolution: {integrity: sha512-MlbIN+N8CWFJBjbqMmARe4+UPo9QRhRar0YoOfmNA2Xqk/EwXcjHWkealosHznXH7tqVbjB25QJpHtDystft/Q==} - engines: {node: '>=12'} - dependencies: - '@sentry/core': 7.85.0 - '@sentry/types': 7.85.0 - '@sentry/utils': 7.85.0 - dev: false - - /@sentry-internal/tracing@7.85.0: - resolution: {integrity: sha512-p3YMUwkPCy2su9cm/3+7QYR4RiMI0+07DU1BZtht9NLTzY2O87/yvUbn1v2yHR3vJQTy/+7N0ud9/mPBFznRQQ==} - engines: {node: '>=8'} - dependencies: - '@sentry/core': 7.85.0 - '@sentry/types': 7.85.0 - '@sentry/utils': 7.85.0 - dev: false - - /@sentry/browser@7.85.0: - resolution: {integrity: sha512-x4sH7vTQnZQgy1U7NuN8XwhleAw7YMQitccHeC5m+kpIKGUO7w4Mdvu8rD3dnjmVmZvASpnwocAxy57/vCU6Ww==} - engines: {node: '>=8'} - dependencies: - '@sentry-internal/feedback': 7.85.0 - '@sentry-internal/tracing': 7.85.0 - '@sentry/core': 7.85.0 - '@sentry/replay': 7.85.0 - '@sentry/types': 7.85.0 - '@sentry/utils': 7.85.0 - dev: false - - /@sentry/bundler-plugin-core@2.10.2: - resolution: {integrity: sha512-7IoekLtROlJZqTxtHQ3IhocBuf9dsEq+JjqlHMyZXoq+QKuvJFvMd/4T+r6KjZ15kMZOIkR+spK3V7duH201hw==} - engines: {node: '>= 14'} - dependencies: - '@sentry/cli': 2.22.3 - '@sentry/node': 7.85.0 - '@sentry/utils': 7.85.0 - dotenv: 16.3.1 - find-up: 5.0.0 - glob: 9.3.2 - magic-string: 0.27.0 - unplugin: 1.0.1 - transitivePeerDependencies: - - encoding - - supports-color - dev: false - - /@sentry/cli-darwin@2.22.3: - resolution: {integrity: sha512-A1DwFTffg3+fF68qujaJI07dk/1H1pRuihlvS5WQ9sD7nQLnXZGoLUht4eULixhDzZYinWHKkcWzQ6k40UTvNA==} - engines: {node: '>=10'} - os: [darwin] - requiresBuild: true - dev: false - optional: true - - /@sentry/cli-linux-arm64@2.22.3: - resolution: {integrity: sha512-PnBPb4LJ+A2LlqLjtVFn4mEizcVdxBSLZvB85pEGzq9DRXjZ6ZEuGWFHTVnWvjd79TB/s0me29QnLc3n4B6lgA==} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux, freebsd] - requiresBuild: true - dev: false - optional: true - - /@sentry/cli-linux-arm@2.22.3: - resolution: {integrity: sha512-mDtLVbqbCu/5b/v2quTAMzY/atGlJVvrqO2Wvpro0Jb/LYhn7Y1pVBdoXEDcnOX82/pseFkLT8PFfq/OcezPhA==} - engines: {node: '>=10'} - cpu: [arm] - os: [linux, freebsd] - requiresBuild: true - dev: false - optional: true - - /@sentry/cli-linux-i686@2.22.3: - resolution: {integrity: sha512-wxvbpQ2hiw4hwJWfJMp7K45BV40nXL62f91jLuftFXIbieKX1Li57NNKNu2JUVn7W1bJxkwz/PKGGTXSgeJlRw==} - engines: {node: '>=10'} - cpu: [x86, ia32] - os: [linux, freebsd] - requiresBuild: true - dev: false - optional: true - - /@sentry/cli-linux-x64@2.22.3: - resolution: {integrity: sha512-0GxsYNO5GyRWifeOpng+MmdUFZRA64bgA1n1prsEsXnoeLcm3Zj4Q63hBZmiwz9Qbhf5ibohkpf94a7dI7pv3A==} - engines: {node: '>=10'} - cpu: [x64] - os: [linux, freebsd] - requiresBuild: true - dev: false - optional: true - - /@sentry/cli-win32-i686@2.22.3: - resolution: {integrity: sha512-YERPsd7ClBrxKcmCUw+ZrAvQfbyIZFrqh269hgDuXFodpsB7LPGnI33ilo0uzmKdq2vGppTb6Z3gf1Rbq0Hadg==} - engines: {node: '>=10'} - cpu: [x86, ia32] - os: [win32] - requiresBuild: true - dev: false - optional: true - - /@sentry/cli-win32-x64@2.22.3: - resolution: {integrity: sha512-NUh56xWvgJo2KuC9lI6o6nTPXdzbpQUB4qGwJ73L9NP3HT2P1I27jtHyrC2zlXTVlYE23gQZGrL3wgW4Jy80QA==} - engines: {node: '>=10'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: false - optional: true - - /@sentry/cli@2.22.3: - resolution: {integrity: sha512-VFHdtrHsMyTRSZhDLeMyXvit7xB4e81KugIEwMve95c7h5HO672bfmCcM/403CAugj4NzvQ+IR2NKF/2SsEPlg==} - engines: {node: '>= 10'} - hasBin: true - dependencies: - https-proxy-agent: 5.0.1 - node-fetch: 2.7.0 - progress: 2.0.3 - proxy-from-env: 1.1.0 - which: 2.0.2 - optionalDependencies: - '@sentry/cli-darwin': 2.22.3 - '@sentry/cli-linux-arm': 2.22.3 - '@sentry/cli-linux-arm64': 2.22.3 - '@sentry/cli-linux-i686': 2.22.3 - '@sentry/cli-linux-x64': 2.22.3 - '@sentry/cli-win32-i686': 2.22.3 - '@sentry/cli-win32-x64': 2.22.3 - transitivePeerDependencies: - - encoding - - supports-color - dev: false - - /@sentry/core@7.85.0: - resolution: {integrity: sha512-DFDAc4tWmHN5IWhr7XbHCiyF1Xgb95jz8Uj/JTX9atlgodId1UIbER77qpEmH3eQGid/QBdqrlR98zCixgSbwg==} - engines: {node: '>=8'} - dependencies: - '@sentry/types': 7.85.0 - '@sentry/utils': 7.85.0 - dev: false - - /@sentry/node@7.85.0: - resolution: {integrity: sha512-uiBtRW9G017NHoCXBlK3ttkTwHXLFyI8ndHpaObtyajKTv3ptGIThVEn7DuK7Pwor//RjwjSEEOa7WDK+FdMVQ==} - engines: {node: '>=8'} - dependencies: - '@sentry-internal/tracing': 7.85.0 - '@sentry/core': 7.85.0 - '@sentry/types': 7.85.0 - '@sentry/utils': 7.85.0 - https-proxy-agent: 5.0.1 - transitivePeerDependencies: - - supports-color - dev: false - - /@sentry/replay@7.85.0: - resolution: {integrity: sha512-zVtTKfO+lu5qTwHpETI/oGo8hU3rdKHr3CdI1vRLw+d60PcAa/pWVlXsQeLRTw8PFwE358gHcpFZezj/11afew==} - engines: {node: '>=12'} - dependencies: - '@sentry-internal/tracing': 7.85.0 - '@sentry/core': 7.85.0 - '@sentry/types': 7.85.0 - '@sentry/utils': 7.85.0 - dev: false - - /@sentry/types@7.85.0: - resolution: {integrity: sha512-R5jR4XkK5tBU2jDiPdSVqzkmjYRr666bcGaFGUHB/xDQCjPsjk+pEmCCL+vpuWoaZmQJUE1hVU7rgnVX81w8zg==} - engines: {node: '>=8'} - dev: false - - /@sentry/utils@7.85.0: - resolution: {integrity: sha512-JZ7seNOLvhjAQ8GeB3GYknPQJkuhF88xAYOaESZP3xPOWBMFUN+IO4RqjMqMLFDniOwsVQS7GB/MfP+hxufieg==} - engines: {node: '>=8'} - dependencies: - '@sentry/types': 7.85.0 - dev: false - - /@sentry/webpack-plugin@2.10.2(webpack@5.89.0): - resolution: {integrity: sha512-sA+oHgxoiLEaxZt3/o3fVsItyR37PIUWSiSkpdxcziekRZ6EM/h0BqW4qXi+46OmLE+ZiB8qtaqid+GUG9C9VA==} - engines: {node: '>= 14'} - peerDependencies: - webpack: '>=4.40.0' - dependencies: - '@sentry/bundler-plugin-core': 2.10.2 - unplugin: 1.0.1 - uuid: 9.0.1 - webpack: 5.89.0(webpack-cli@5.1.4) - transitivePeerDependencies: - - encoding - - supports-color - dev: false - - /@sinclair/typebox@0.27.8: - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - dev: true - - /@types/color-convert@2.0.3: - resolution: {integrity: sha512-2Q6wzrNiuEvYxVQqhh7sXM2mhIhvZR/Paq4FdsQkOMgWsCIkKvSGj8Le1/XalulrmgOzPMqNa0ix+ePY4hTrfg==} - dependencies: - '@types/color-name': 1.1.3 - dev: false - - /@types/color-name@1.1.3: - resolution: {integrity: sha512-87W6MJCKZYDhLAx/J1ikW8niMvmGRyY+rpUxWpL1cO7F8Uu5CHuQoFv+R0/L5pgNdW4jTyda42kv60uwVIPjLw==} - dev: false - - /@types/color@3.0.6: - resolution: {integrity: sha512-NMiNcZFRUAiUUCCf7zkAelY8eV3aKqfbzyFQlXpPIEeoNDbsEHGpb854V3gzTsGKYj830I5zPuOwU/TP5/cW6A==} - dependencies: - '@types/color-convert': 2.0.3 - dev: false - - /@types/dompurify@3.0.5: - resolution: {integrity: sha512-1Wg0g3BtQF7sSb27fJQAKck1HECM6zV1EB66j8JH9i3LCjYabJa0FSdiSgsD5K/RbrsR0SiraKacLB+T8ZVYAg==} - dependencies: - '@types/trusted-types': 2.0.7 - dev: false - - /@types/eslint-scope@3.7.7: - resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} - dependencies: - '@types/eslint': 8.44.8 - '@types/estree': 1.0.5 - - /@types/eslint@8.44.8: - resolution: {integrity: sha512-4K8GavROwhrYl2QXDXm0Rv9epkA8GBFu0EI+XrrnnuCl7u8CWBRusX7fXJfanhZTDWSAL24gDI/UqXyUM0Injw==} - dependencies: - '@types/estree': 1.0.5 - '@types/json-schema': 7.0.15 - - /@types/estree@1.0.5: - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - - /@types/istanbul-lib-coverage@2.0.6: - resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} - dev: true - - /@types/istanbul-lib-report@3.0.3: - resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} - dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - dev: true - - /@types/istanbul-reports@3.0.4: - resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} - dependencies: - '@types/istanbul-lib-report': 3.0.3 - dev: true - - /@types/json-schema@7.0.15: - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - - /@types/node@20.10.2: - resolution: {integrity: sha512-37MXfxkb0vuIlRKHNxwCkb60PNBpR94u4efQuN4JgIAm66zfCDXGSAFCef9XUWFovX2R1ok6Z7MHhtdVXXkkIw==} - dependencies: - undici-types: 5.26.5 - - /@types/prop-types@15.7.11: - resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} - dev: false - - /@types/react@18.2.40: - resolution: {integrity: sha512-H+BUhb9C1zBtogDLAk+KCNRKiHDrqSwQT/0z0PVTwMFBxqg3011ByLomADtgkgMkfwj4AMOiXBReyLTUBg681g==} - dependencies: - '@types/prop-types': 15.7.11 - '@types/scheduler': 0.16.8 - csstype: 3.1.2 - dev: false - - /@types/scheduler@0.16.8: - resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} - dev: false - - /@types/sortablejs@1.15.7: - resolution: {integrity: sha512-PvgWCx1Lbgm88FdQ6S7OGvLIjWS66mudKPlfdrWil0TjsO5zmoZmzoKiiwRShs1dwPgrlkr0N4ewuy0/+QUXYQ==} - dev: false - - /@types/trusted-types@2.0.7: - resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} - dev: false - - /@types/webextension-polyfill@0.10.7: - resolution: {integrity: sha512-10ql7A0qzBmFB+F+qAke/nP1PIonS0TXZAOMVOxEUsm+lGSW6uwVcISFNa0I4Oyj0884TZVWGGMIWeXOVSNFHw==} - dev: false - - /@types/yargs-parser@21.0.3: - resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - dev: true - - /@types/yargs@17.0.32: - resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} - dependencies: - '@types/yargs-parser': 21.0.3 - dev: true - - /@ungap/structured-clone@1.2.0: - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - dev: true - - /@webassemblyjs/ast@1.11.6: - resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} - dependencies: - '@webassemblyjs/helper-numbers': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - - /@webassemblyjs/floating-point-hex-parser@1.11.6: - resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} - - /@webassemblyjs/helper-api-error@1.11.6: - resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} - - /@webassemblyjs/helper-buffer@1.11.6: - resolution: {integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==} - - /@webassemblyjs/helper-numbers@1.11.6: - resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} - dependencies: - '@webassemblyjs/floating-point-hex-parser': 1.11.6 - '@webassemblyjs/helper-api-error': 1.11.6 - '@xtuc/long': 4.2.2 - - /@webassemblyjs/helper-wasm-bytecode@1.11.6: - resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} - - /@webassemblyjs/helper-wasm-section@1.11.6: - resolution: {integrity: sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==} - dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-buffer': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/wasm-gen': 1.11.6 - - /@webassemblyjs/ieee754@1.11.6: - resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} - dependencies: - '@xtuc/ieee754': 1.2.0 - - /@webassemblyjs/leb128@1.11.6: - resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} - dependencies: - '@xtuc/long': 4.2.2 - - /@webassemblyjs/utf8@1.11.6: - resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} - - /@webassemblyjs/wasm-edit@1.11.6: - resolution: {integrity: sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==} - dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-buffer': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/helper-wasm-section': 1.11.6 - '@webassemblyjs/wasm-gen': 1.11.6 - '@webassemblyjs/wasm-opt': 1.11.6 - '@webassemblyjs/wasm-parser': 1.11.6 - '@webassemblyjs/wast-printer': 1.11.6 - - /@webassemblyjs/wasm-gen@1.11.6: - resolution: {integrity: sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==} - dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/ieee754': 1.11.6 - '@webassemblyjs/leb128': 1.11.6 - '@webassemblyjs/utf8': 1.11.6 - - /@webassemblyjs/wasm-opt@1.11.6: - resolution: {integrity: sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==} - dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-buffer': 1.11.6 - '@webassemblyjs/wasm-gen': 1.11.6 - '@webassemblyjs/wasm-parser': 1.11.6 - - /@webassemblyjs/wasm-parser@1.11.6: - resolution: {integrity: sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==} - dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-api-error': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/ieee754': 1.11.6 - '@webassemblyjs/leb128': 1.11.6 - '@webassemblyjs/utf8': 1.11.6 - - /@webassemblyjs/wast-printer@1.11.6: - resolution: {integrity: sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==} - dependencies: - '@webassemblyjs/ast': 1.11.6 - '@xtuc/long': 4.2.2 - - /@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4)(webpack@5.89.0): - resolution: {integrity: sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==} - engines: {node: '>=14.15.0'} - peerDependencies: - webpack: 5.x.x - webpack-cli: 5.x.x - dependencies: - webpack: 5.89.0(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack@5.89.0) - - /@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.89.0): - resolution: {integrity: sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==} - engines: {node: '>=14.15.0'} - peerDependencies: - webpack: 5.x.x - webpack-cli: 5.x.x - dependencies: - webpack: 5.89.0(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack@5.89.0) - - /@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack@5.89.0): - resolution: {integrity: sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==} - engines: {node: '>=14.15.0'} - peerDependencies: - webpack: 5.x.x - webpack-cli: 5.x.x - webpack-dev-server: '*' - peerDependenciesMeta: - webpack-dev-server: - optional: true - dependencies: - webpack: 5.89.0(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack@5.89.0) - - /@xtuc/ieee754@1.2.0: - resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} - - /@xtuc/long@4.2.2: - resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - - /acorn-import-assertions@1.9.0(acorn@8.11.2): - resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} - peerDependencies: - acorn: ^8 - dependencies: - acorn: 8.11.2 - - /acorn-jsx@5.3.2(acorn@8.11.2): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - acorn: 8.11.2 - dev: true - - /acorn@8.11.2: - resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} - engines: {node: '>=0.4.0'} - hasBin: true - - /agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} - dependencies: - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: false - - /ajv-formats@2.1.1(ajv@8.12.0): - resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - dependencies: - ajv: 8.12.0 - dev: true - - /ajv-keywords@3.5.2(ajv@6.12.6): - resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} - peerDependencies: - ajv: ^6.9.1 - dependencies: - ajv: 6.12.6 - - /ajv-keywords@5.1.0(ajv@8.12.0): - resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} - peerDependencies: - ajv: ^8.8.2 - dependencies: - ajv: 8.12.0 - fast-deep-equal: 3.1.3 - dev: true - - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - - /ajv@8.12.0: - resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - dev: true - - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: true - - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - dependencies: - color-convert: 2.0.1 - - /any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - dev: false - - /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - - /arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - dev: false - - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true - - /autoprefixer@10.4.16(postcss@8.4.32): - resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 - dependencies: - browserslist: 4.22.1 - caniuse-lite: 1.0.30001565 - fraction.js: 4.3.7 - normalize-range: 0.1.2 - picocolors: 1.0.0 - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: false - - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - /big.js@5.2.2: - resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} - dev: true - - /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} - - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - /brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - dependencies: - balanced-match: 1.0.2 - dev: false - - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - dependencies: - fill-range: 7.0.1 - - /browserslist@4.22.1: - resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - dependencies: - caniuse-lite: 1.0.30001565 - electron-to-chromium: 1.4.601 - node-releases: 2.0.14 - update-browserslist-db: 1.0.13(browserslist@4.22.1) - - /buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - dev: true - - /camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} - dev: false - - /caniuse-lite@1.0.30001565: - resolution: {integrity: sha512-xrE//a3O7TP0vaJ8ikzkD2c2NgcVUvsEe2IvFTntV4Yd1Z9FVzh+gW+enX96L0psrbaFMcVcH2l90xNuGDWc8w==} - - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.3 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - - /chrome-trace-event@1.0.3: - resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} - engines: {node: '>=6.0'} - - /ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} - dev: true - - /clone-deep@4.0.1: - resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} - engines: {node: '>=6'} - dependencies: - is-plain-object: 2.0.4 - kind-of: 6.0.3 - shallow-clone: 3.0.1 - - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - dependencies: - color-name: 1.1.4 - - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - /color-string@1.9.1: - resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} - dependencies: - color-name: 1.1.4 - simple-swizzle: 0.2.2 - dev: false - - /color@4.2.3: - resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} - engines: {node: '>=12.5.0'} - dependencies: - color-convert: 2.0.1 - color-string: 1.9.1 - dev: false - - /colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - - /commander@10.0.1: - resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} - engines: {node: '>=14'} - - /commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - - /commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - dev: false - - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - /copy-webpack-plugin@11.0.0(webpack@5.89.0): - resolution: {integrity: sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==} - engines: {node: '>= 14.15.0'} - peerDependencies: - webpack: ^5.1.0 - dependencies: - fast-glob: 3.3.2 - glob-parent: 6.0.2 - globby: 13.2.2 - normalize-path: 3.0.0 - schema-utils: 4.2.0 - serialize-javascript: 6.0.1 - webpack: 5.89.0(webpack-cli@5.1.4) - dev: true - - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - /css-loader@6.8.1(webpack@5.89.0): - resolution: {integrity: sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 - dependencies: - icss-utils: 5.1.0(postcss@8.4.32) - postcss: 8.4.32 - postcss-modules-extract-imports: 3.0.0(postcss@8.4.32) - postcss-modules-local-by-default: 4.0.3(postcss@8.4.32) - postcss-modules-scope: 3.0.0(postcss@8.4.32) - postcss-modules-values: 4.0.0(postcss@8.4.32) - postcss-value-parser: 4.2.0 - semver: 7.5.4 - webpack: 5.89.0(webpack-cli@5.1.4) - dev: true - - /cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - - /csstype@3.1.2: - resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} - dev: false - - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - - /deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: true - - /didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - dev: false - - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - dependencies: - path-type: 4.0.0 - dev: true - - /dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - dev: false - - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dependencies: - esutils: 2.0.3 - dev: true - - /dompurify@3.0.6: - resolution: {integrity: sha512-ilkD8YEnnGh1zJ240uJsW7AzE+2qpbOUYjacomn3AvJ6J4JhKGSZ2nh4wUIXPZrEPppaCLx5jFe8T89Rk8tQ7w==} - dev: true - - /dotenv@16.3.1: - resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} - engines: {node: '>=12'} - dev: false - - /electron-to-chromium@1.4.601: - resolution: {integrity: sha512-SpwUMDWe9tQu8JX5QCO1+p/hChAi9AE9UpoC3rcHVc+gdCGlbT3SGb5I1klgb952HRIyvt9wZhSz9bNBYz9swA==} - - /emojis-list@3.0.0: - resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} - engines: {node: '>= 4'} - dev: true - - /enhanced-resolve@5.15.0: - resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} - engines: {node: '>=10.13.0'} - dependencies: - graceful-fs: 4.2.11 - tapable: 2.2.1 - - /envinfo@7.11.0: - resolution: {integrity: sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==} - engines: {node: '>=4'} - hasBin: true - - /es-module-lexer@1.4.1: - resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==} - - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - dev: true - - /eslint-config-prettier@9.0.0(eslint@8.55.0): - resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - dependencies: - eslint: 8.55.0 - dev: true - - /eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} - dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 - - /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - dev: true - - /eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - - /eslint-webpack-plugin@4.0.1(eslint@8.55.0)(webpack@5.89.0): - resolution: {integrity: sha512-fUFcXpui/FftGx3NzvWgLZXlLbu+m74sUxGEgxgoxYcUtkIQbS6SdNNZkS99m5ycb23TfoNYrDpp1k/CK5j6Hw==} - engines: {node: '>= 14.15.0'} - peerDependencies: - eslint: ^8.0.0 - webpack: ^5.0.0 - dependencies: - '@types/eslint': 8.44.8 - eslint: 8.55.0 - jest-worker: 29.7.0 - micromatch: 4.0.5 - normalize-path: 3.0.0 - schema-utils: 4.2.0 - webpack: 5.89.0(webpack-cli@5.1.4) - dev: true - - /eslint@8.55.0: - resolution: {integrity: sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) - '@eslint-community/regexpp': 4.10.0 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.55.0 - '@humanwhocodes/config-array': 0.11.13 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.5.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.23.0 - graphemer: 1.4.0 - ignore: 5.3.0 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.3 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - dev: true - - /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - acorn: 8.11.2 - acorn-jsx: 5.3.2(acorn@8.11.2) - eslint-visitor-keys: 3.4.3 - dev: true - - /esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} - dependencies: - estraverse: 5.3.0 - dev: true - - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - dependencies: - estraverse: 5.3.0 - - /estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: true - - /events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - - /fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.5 - - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - /fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: true - - /fastest-levenshtein@1.0.16: - resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} - engines: {node: '>= 4.9.1'} - - /fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} - dependencies: - reusify: 1.0.4 - - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flat-cache: 3.2.0 - dev: true - - /file-loader@6.2.0(webpack@5.89.0): - resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==} - engines: {node: '>= 10.13.0'} - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 - dependencies: - loader-utils: 2.0.4 - schema-utils: 3.3.0 - webpack: 5.89.0(webpack-cli@5.1.4) - dev: true - - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - dependencies: - to-regex-range: 5.0.1 - - /find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} - dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 - - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - - /flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flatted: 3.2.9 - keyv: 4.5.4 - rimraf: 3.0.2 - dev: true - - /flat@5.0.2: - resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} - hasBin: true - - /flatted@3.2.9: - resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} - dev: true - - /fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - dev: false - - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - - /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - optional: true - - /function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - dependencies: - is-glob: 4.0.3 - - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - dependencies: - is-glob: 4.0.3 - - /glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - - /glob@7.1.6: - resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: false - - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - - /glob@9.3.2: - resolution: {integrity: sha512-BTv/JhKXFEHsErMte/AnfiSv8yYOLLiyH2lTg8vn02O21zWFgHPTfxtgn1QRe7NRgggUhC8hacR2Re94svHqeA==} - engines: {node: '>=16 || 14 >=14.17'} - dependencies: - fs.realpath: 1.0.0 - minimatch: 7.4.6 - minipass: 4.2.8 - path-scurry: 1.10.1 - dev: false - - /globals@13.23.0: - resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.20.2 - dev: true - - /globby@13.2.2: - resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.0 - merge2: 1.4.1 - slash: 4.0.0 - dev: true - - /graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - /graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - dev: true - - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - /hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} - engines: {node: '>= 0.4'} - dependencies: - function-bind: 1.1.2 - - /hey-listen@1.0.8: - resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==} - dev: false - - /https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} - dependencies: - agent-base: 6.0.2 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: false - - /icss-utils@5.1.0(postcss@8.4.32): - resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - dependencies: - postcss: 8.4.32 - dev: true - - /ignore@5.3.0: - resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} - engines: {node: '>= 4'} - dev: true - - /immediate@3.0.6: - resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} - dev: false - - /immutable@4.3.4: - resolution: {integrity: sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==} - dev: true - - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - dev: true - - /import-local@3.1.0: - resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} - engines: {node: '>=8'} - hasBin: true - dependencies: - pkg-dir: 4.2.0 - resolve-cwd: 3.0.0 - - /imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - dev: true - - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - /install@0.13.0: - resolution: {integrity: sha512-zDml/jzr2PKU9I8J/xyZBQn8rPCAY//UOYNmR01XwNwyfhEWObo2SWfSl1+0tm1u6PhxLwDnfsT/6jB7OUxqFA==} - engines: {node: '>= 0.10'} - dev: false - - /interpret@3.1.1: - resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==} - engines: {node: '>=10.13.0'} - - /is-arrayish@0.3.2: - resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - dev: false - - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - dependencies: - binary-extensions: 2.2.0 - - /is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} - dependencies: - hasown: 2.0.0 - - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - dependencies: - is-extglob: 2.1.1 - - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - dev: true - - /is-plain-object@2.0.4: - resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} - engines: {node: '>=0.10.0'} - dependencies: - isobject: 3.0.1 - - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - /isobject@3.0.1: - resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} - engines: {node: '>=0.10.0'} - - /jest-util@29.7.0: - resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.6.3 - '@types/node': 20.10.2 - chalk: 4.1.2 - ci-info: 3.9.0 - graceful-fs: 4.2.11 - picomatch: 2.3.1 - dev: true - - /jest-worker@27.5.1: - resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} - engines: {node: '>= 10.13.0'} - dependencies: - '@types/node': 20.10.2 - merge-stream: 2.0.0 - supports-color: 8.1.1 - - /jest-worker@29.7.0: - resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@types/node': 20.10.2 - jest-util: 29.7.0 - merge-stream: 2.0.0 - supports-color: 8.1.1 - dev: true - - /jiti@1.21.0: - resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} - hasBin: true - dev: false - - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: false - - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - dependencies: - argparse: 2.0.1 - dev: true - - /json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - dev: true - - /json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - - /json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - dev: true - - /json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: true - - /json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - dev: true - - /keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - dependencies: - json-buffer: 3.0.1 - dev: true - - /kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - - /levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - dev: true - - /lie@3.1.1: - resolution: {integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==} - dependencies: - immediate: 3.0.6 - dev: false - - /lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} - dev: false - - /lilconfig@3.0.0: - resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} - engines: {node: '>=14'} - dev: false - - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: false - - /loader-runner@4.3.0: - resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} - engines: {node: '>=6.11.5'} - - /loader-utils@2.0.4: - resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} - engines: {node: '>=8.9.0'} - dependencies: - big.js: 5.2.2 - emojis-list: 3.0.0 - json5: 2.2.3 - dev: true - - /localforage@1.10.0: - resolution: {integrity: sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==} - dependencies: - lie: 3.1.1 - dev: false - - /locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} - dependencies: - p-locate: 4.1.0 - - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - dependencies: - p-locate: 5.0.0 - - /lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true - - /loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - dependencies: - js-tokens: 4.0.0 - dev: false - - /lru-cache@10.1.0: - resolution: {integrity: sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==} - engines: {node: 14 || >=16.14} - dev: false - - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - dependencies: - yallist: 4.0.0 - - /magic-string@0.27.0: - resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} - engines: {node: '>=12'} - dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - dev: false - - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} - dependencies: - braces: 3.0.2 - picomatch: 2.3.1 - - /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - - /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.52.0 - - /mini-css-extract-plugin@2.7.6(webpack@5.89.0): - resolution: {integrity: sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 - dependencies: - schema-utils: 4.2.0 - webpack: 5.89.0(webpack-cli@5.1.4) - dev: true - - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - dependencies: - brace-expansion: 1.1.11 - - /minimatch@7.4.6: - resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==} - engines: {node: '>=10'} - dependencies: - brace-expansion: 2.0.1 - dev: false - - /minipass@4.2.8: - resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} - engines: {node: '>=8'} - dev: false - - /minipass@7.0.4: - resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} - engines: {node: '>=16 || 14 >=14.17'} - dev: false - - /motion@10.16.4: - resolution: {integrity: sha512-wvBeT0sZNgU6Od1aimjywBikqzm5yE97+L9eM/AoLy01AXNPdcnSDVHB3CoR0dGdHMbp/S0A/PjsJfWg0+k8Mg==} - dependencies: - '@motionone/animation': 10.16.3 - '@motionone/dom': 10.16.4 - '@motionone/svelte': 10.16.4 - '@motionone/types': 10.16.3 - '@motionone/utils': 10.16.3 - '@motionone/vue': 10.16.4 - dev: false - - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - - /mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 - dev: false - - /nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - /natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - dev: true - - /neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - - /node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - dependencies: - whatwg-url: 5.0.0 - dev: false - - /node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} - - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - - /normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} - dev: false - - /npm@10.2.4: - resolution: {integrity: sha512-umEuYneVEYO9KoEEI8n2sSGmNQeqco/3BSeacRlqIkCzw4E7XGtYSWMeJobxzr6hZ2n9cM+u5TsMTcC5bAgoWA==} - engines: {node: ^18.17.0 || >=20.5.0} - hasBin: true - dev: false - bundledDependencies: - - '@isaacs/string-locale-compare' - - '@npmcli/arborist' - - '@npmcli/config' - - '@npmcli/fs' - - '@npmcli/map-workspaces' - - '@npmcli/package-json' - - '@npmcli/promise-spawn' - - '@npmcli/run-script' - - '@sigstore/tuf' - - abbrev - - archy - - cacache - - chalk - - ci-info - - cli-columns - - cli-table3 - - columnify - - fastest-levenshtein - - fs-minipass - - glob - - graceful-fs - - hosted-git-info - - ini - - init-package-json - - is-cidr - - json-parse-even-better-errors - - libnpmaccess - - libnpmdiff - - libnpmexec - - libnpmfund - - libnpmhook - - libnpmorg - - libnpmpack - - libnpmpublish - - libnpmsearch - - libnpmteam - - libnpmversion - - make-fetch-happen - - minimatch - - minipass - - minipass-pipeline - - ms - - node-gyp - - nopt - - normalize-package-data - - npm-audit-report - - npm-install-checks - - npm-package-arg - - npm-pick-manifest - - npm-profile - - npm-registry-fetch - - npm-user-validate - - npmlog - - p-map - - pacote - - parse-conflict-json - - proc-log - - qrcode-terminal - - read - - semver - - spdx-expression-parse - - ssri - - strip-ansi - - supports-color - - tar - - text-table - - tiny-relative-date - - treeverse - - validate-npm-package-name - - which - - write-file-atomic - - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - dev: false - - /object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} - dev: false - - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - dependencies: - wrappy: 1.0.2 - - /optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} - dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - dev: true - - /p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} - dependencies: - p-try: 2.2.0 - - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - dependencies: - yocto-queue: 0.1.0 - - /p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} - dependencies: - p-limit: 2.3.0 - - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - dependencies: - p-limit: 3.1.0 - - /p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - dependencies: - callsites: 3.1.0 - dev: true - - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - /path-scurry@1.10.1: - resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} - engines: {node: '>=16 || 14 >=14.17'} - dependencies: - lru-cache: 10.1.0 - minipass: 7.0.4 - dev: false - - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - dev: true - - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - /pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - dev: false - - /pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - dev: false - - /pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} - dependencies: - find-up: 4.1.0 - - /postcss-import@15.1.0(postcss@8.4.32): - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} - peerDependencies: - postcss: ^8.0.0 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.8 - dev: false - - /postcss-js@4.0.1(postcss@8.4.32): - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} - engines: {node: ^12 || ^14 || >= 16} - peerDependencies: - postcss: ^8.4.21 - dependencies: - camelcase-css: 2.0.1 - postcss: 8.4.32 - dev: false - - /postcss-load-config@4.0.2(postcss@8.4.32): - resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} - engines: {node: '>= 14'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - dependencies: - lilconfig: 3.0.0 - postcss: 8.4.32 - yaml: 2.3.4 - dev: false - - /postcss-modules-extract-imports@3.0.0(postcss@8.4.32): - resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - dependencies: - postcss: 8.4.32 - dev: true - - /postcss-modules-local-by-default@4.0.3(postcss@8.4.32): - resolution: {integrity: sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - dependencies: - icss-utils: 5.1.0(postcss@8.4.32) - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-modules-scope@3.0.0(postcss@8.4.32): - resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: true - - /postcss-modules-values@4.0.0(postcss@8.4.32): - resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - dependencies: - icss-utils: 5.1.0(postcss@8.4.32) - postcss: 8.4.32 - dev: true - - /postcss-nested@6.0.1(postcss@8.4.32): - resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 - dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: false - - /postcss-selector-parser@6.0.13: - resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} - engines: {node: '>=4'} - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - - /postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - - /postcss@8.4.32: - resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.7 - picocolors: 1.0.0 - source-map-js: 1.0.2 - - /prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - dev: true - - /prettier@3.0.2: - resolution: {integrity: sha512-o2YR9qtniXvwEZlOKbveKfDQVyqxbEIWn48Z8m3ZJjBjcCmUy3xZGIv+7AkaeuaTr6yPXJjwv07ZWlsWbEy1rQ==} - engines: {node: '>=14'} - hasBin: true - dev: true - - /progress@2.0.3: - resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} - engines: {node: '>=0.4.0'} - dev: false - - /proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - dev: false - - /punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - /randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - dependencies: - safe-buffer: 5.2.1 - - /react@18.2.0: - resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} - engines: {node: '>=0.10.0'} - dependencies: - loose-envify: 1.4.0 - dev: false - - /read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} - dependencies: - pify: 2.3.0 - dev: false - - /readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - dependencies: - picomatch: 2.3.1 - - /rechoir@0.8.0: - resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} - engines: {node: '>= 10.13.0'} - dependencies: - resolve: 1.22.8 - - /require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - dev: true - - /resolve-cwd@3.0.0: - resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} - engines: {node: '>=8'} - dependencies: - resolve-from: 5.0.0 - - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - dev: true - - /resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - - /resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true - dependencies: - is-core-module: 2.13.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true - dependencies: - glob: 7.2.3 - dev: true - - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - dependencies: - queue-microtask: 1.2.3 - - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - - /sass-loader@13.3.2(sass@1.69.5)(webpack@5.89.0): - resolution: {integrity: sha512-CQbKl57kdEv+KDLquhC+gE3pXt74LEAzm+tzywcA0/aHZuub8wTErbjAoNI57rPUWRYRNC5WUnNl8eGJNbDdwg==} - engines: {node: '>= 14.15.0'} - peerDependencies: - fibers: '>= 3.1.0' - node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 - sass: ^1.3.0 - sass-embedded: '*' - webpack: ^5.0.0 - peerDependenciesMeta: - fibers: - optional: true - node-sass: - optional: true - sass: - optional: true - sass-embedded: - optional: true - dependencies: - neo-async: 2.6.2 - sass: 1.69.5 - webpack: 5.89.0(webpack-cli@5.1.4) - dev: true - - /sass@1.69.5: - resolution: {integrity: sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==} - engines: {node: '>=14.0.0'} - hasBin: true - dependencies: - chokidar: 3.5.3 - immutable: 4.3.4 - source-map-js: 1.0.2 - dev: true - - /schema-utils@3.3.0: - resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} - engines: {node: '>= 10.13.0'} - dependencies: - '@types/json-schema': 7.0.15 - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) - - /schema-utils@4.2.0: - resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==} - engines: {node: '>= 12.13.0'} - dependencies: - '@types/json-schema': 7.0.15 - ajv: 8.12.0 - ajv-formats: 2.1.1(ajv@8.12.0) - ajv-keywords: 5.1.0(ajv@8.12.0) - dev: true - - /semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} - engines: {node: '>=10'} - hasBin: true - dependencies: - lru-cache: 6.0.0 - - /serialize-javascript@6.0.1: - resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} - dependencies: - randombytes: 2.1.0 - - /shallow-clone@3.0.1: - resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} - engines: {node: '>=8'} - dependencies: - kind-of: 6.0.3 - - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - dependencies: - shebang-regex: 3.0.0 - - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - /simple-swizzle@0.2.2: - resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} - dependencies: - is-arrayish: 0.3.2 - dev: false - - /slash@4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} - dev: true - - /sortablejs@1.15.1: - resolution: {integrity: sha512-P5Cjvb0UG1ZVNiDPj/n4V+DinttXG6K8n7vM/HQf0C25K3YKQTQY6fsr/sEGsJGpQ9exmPxluHxKBc0mLKU1lQ==} - dev: false - - /source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} - engines: {node: '>=0.10.0'} - - /source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - - /source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} - dev: false - - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - dependencies: - ansi-regex: 5.0.1 - dev: true - - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: true - - /style-loader@3.3.3(webpack@5.89.0): - resolution: {integrity: sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 - dependencies: - webpack: 5.89.0(webpack-cli@5.1.4) - dev: true - - /sucrase@3.34.0: - resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} - engines: {node: '>=8'} - hasBin: true - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - commander: 4.1.1 - glob: 7.1.6 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.6 - ts-interface-checker: 0.1.13 - dev: false - - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - dependencies: - has-flag: 4.0.0 - - /supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} - dependencies: - has-flag: 4.0.0 - - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - /tailwindcss@3.3.5: - resolution: {integrity: sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA==} - engines: {node: '>=14.0.0'} - hasBin: true - 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.2 - 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.32 - postcss-import: 15.1.0(postcss@8.4.32) - postcss-js: 4.0.1(postcss@8.4.32) - postcss-load-config: 4.0.2(postcss@8.4.32) - postcss-nested: 6.0.1(postcss@8.4.32) - postcss-selector-parser: 6.0.13 - resolve: 1.22.8 - sucrase: 3.34.0 - transitivePeerDependencies: - - ts-node - dev: false - - /tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - - /terser-webpack-plugin@5.3.9(webpack@5.89.0): - resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==} - engines: {node: '>= 10.13.0'} - peerDependencies: - '@swc/core': '*' - esbuild: '*' - uglify-js: '*' - webpack: ^5.1.0 - peerDependenciesMeta: - '@swc/core': - optional: true - esbuild: - optional: true - uglify-js: - optional: true - dependencies: - '@jridgewell/trace-mapping': 0.3.20 - jest-worker: 27.5.1 - schema-utils: 3.3.0 - serialize-javascript: 6.0.1 - terser: 5.24.0 - webpack: 5.89.0(webpack-cli@5.1.4) - - /terser@5.24.0: - resolution: {integrity: sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==} - engines: {node: '>=10'} - hasBin: true - dependencies: - '@jridgewell/source-map': 0.3.5 - acorn: 8.11.2 - commander: 2.20.3 - source-map-support: 0.5.21 - - /text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: true - - /thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} - dependencies: - thenify: 3.3.1 - dev: false - - /thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - dependencies: - any-promise: 1.3.0 - dev: false - - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - dependencies: - is-number: 7.0.0 - - /tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - dev: false - - /ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - dev: false - - /ts-loader@9.5.1(typescript@5.3.2)(webpack@5.89.0): - resolution: {integrity: sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==} - engines: {node: '>=12.0.0'} - peerDependencies: - typescript: '*' - webpack: ^5.0.0 - dependencies: - chalk: 4.1.2 - enhanced-resolve: 5.15.0 - micromatch: 4.0.5 - semver: 7.5.4 - source-map: 0.7.4 - typescript: 5.3.2 - webpack: 5.89.0(webpack-cli@5.1.4) - dev: false - - /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - dev: false - - /type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.2.1 - dev: true - - /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - dev: true - - /typescript@5.3.2: - resolution: {integrity: sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==} - engines: {node: '>=14.17'} - hasBin: true - dev: false - - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - - /unplugin@1.0.1: - resolution: {integrity: sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA==} - dependencies: - acorn: 8.11.2 - chokidar: 3.5.3 - webpack-sources: 3.2.3 - webpack-virtual-modules: 0.5.0 - dev: false - - /update-browserslist-db@1.0.13(browserslist@4.22.1): - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - dependencies: - browserslist: 4.22.1 - escalade: 3.1.1 - picocolors: 1.0.0 - - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - dependencies: - punycode: 2.3.1 - - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - - /uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - hasBin: true - dev: false - - /watchpack@2.4.0: - resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} - engines: {node: '>=10.13.0'} - dependencies: - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - - /webextension-polyfill@0.10.0: - resolution: {integrity: sha512-c5s35LgVa5tFaHhrZDnr3FpQpjj1BB+RXhLTYUxGqBVN460HkbM8TBtEqdXWbpTKfzwCcjAZVF7zXCYSKtcp9g==} - dev: true - - /webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: false - - /webpack-cli@5.1.4(webpack@5.89.0): - resolution: {integrity: sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==} - engines: {node: '>=14.15.0'} - hasBin: true - peerDependencies: - '@webpack-cli/generators': '*' - webpack: 5.x.x - webpack-bundle-analyzer: '*' - webpack-dev-server: '*' - peerDependenciesMeta: - '@webpack-cli/generators': - optional: true - webpack-bundle-analyzer: - optional: true - webpack-dev-server: - optional: true - dependencies: - '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4)(webpack@5.89.0) - '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4)(webpack@5.89.0) - '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4)(webpack@5.89.0) - colorette: 2.0.20 - commander: 10.0.1 - cross-spawn: 7.0.3 - envinfo: 7.11.0 - fastest-levenshtein: 1.0.16 - import-local: 3.1.0 - interpret: 3.1.1 - rechoir: 0.8.0 - webpack: 5.89.0(webpack-cli@5.1.4) - webpack-merge: 5.10.0 - - /webpack-merge@5.10.0: - resolution: {integrity: sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==} - engines: {node: '>=10.0.0'} - dependencies: - clone-deep: 4.0.1 - flat: 5.0.2 - wildcard: 2.0.1 - - /webpack-sources@3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} - engines: {node: '>=10.13.0'} - - /webpack-virtual-modules@0.5.0: - resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==} - dev: false - - /webpack@5.89.0(webpack-cli@5.1.4): - resolution: {integrity: sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==} - engines: {node: '>=10.13.0'} - hasBin: true - peerDependencies: - webpack-cli: '*' - peerDependenciesMeta: - webpack-cli: - optional: true - dependencies: - '@types/eslint-scope': 3.7.7 - '@types/estree': 1.0.5 - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/wasm-edit': 1.11.6 - '@webassemblyjs/wasm-parser': 1.11.6 - acorn: 8.11.2 - acorn-import-assertions: 1.9.0(acorn@8.11.2) - browserslist: 4.22.1 - chrome-trace-event: 1.0.3 - enhanced-resolve: 5.15.0 - es-module-lexer: 1.4.1 - eslint-scope: 5.1.1 - events: 3.3.0 - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.0 - mime-types: 2.1.35 - neo-async: 2.6.2 - schema-utils: 3.3.0 - tapable: 2.2.1 - terser-webpack-plugin: 5.3.9(webpack@5.89.0) - watchpack: 2.4.0 - webpack-cli: 5.1.4(webpack@5.89.0) - webpack-sources: 3.2.3 - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - - /whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - dev: false - - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - dependencies: - isexe: 2.0.0 - - /wildcard@2.0.1: - resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} - - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - - /yaml@2.3.4: - resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} - engines: {node: '>= 14'} - dev: false - - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} diff --git a/postcss.config.cjs b/postcss.config.cjs deleted file mode 100644 index 34b1c5eb..00000000 --- a/postcss.config.cjs +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - plugins: [ - require("tailwindcss"), - require("autoprefixer"), - ], -}; \ No newline at end of file diff --git a/public/interface/popup.css b/public/interface/popup.css deleted file mode 100644 index aaa72a99..00000000 --- a/public/interface/popup.css +++ /dev/null @@ -1,14 +0,0 @@ -.hide { - opacity: 0; - pointer-events: none; -} - -.outside-container { - margin: 0; - overflow: hidden; - position: absolute; - right: 10px; - top: 80px; - height: 590px; - z-index: 20; -} diff --git a/public/manifest.json b/public/manifest.json deleted file mode 100644 index 3b33a730..00000000 --- a/public/manifest.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "manifest_version": 3, - "name": "BetterSEQTA+", - "version": "3.2.2", - "description": "Make SEQTA usable and beautiful! A fork of BetterSEQTA to continue development and add WAY more features!!!", - "icons": { - "32": "icons/icon-32.png", - "48": "icons/icon-48.png", - "64": "icons/icon-64.png" - }, - "action": { - "browser_style": true, - "default_popup": "interface/index.html#settings", - "default_icon": { - "32": "icons/icon-32.png", - "48": "icons/icon-48.png", - "64": "icons/icon-64.png" - } - }, - "permissions": ["tabs", "notifications", "storage"], - "host_permissions": ["https://newsapi.org/", "*://*/*"], - "background": { - "service_worker": "background.js" - }, - "content_scripts": [ - { - "matches": ["*://*/*"], - "js": ["browser-polyfill.js", "purify.min.js", "SEQTA.js"], - "run_at": "document_start" - } - ], - "web_accessible_resources": [ - { - "resources": ["icons/*"], - "matches": ["*://*/*"] - }, - { - "resources": ["fonts/*"], - "matches": ["*://*/*"] - }, - { - "resources": ["images/*"], - "matches": ["*://*/*"] - }, - { - "resources": ["css/*"], - "matches": ["*://*/*"] - }, - { - "resources": ["popup/*"], - "matches": ["*://*/*"] - }, - { - "resources": ["client.js"], - "matches": ["*://*/*"] - }, - { - "resources": ["index.css"], - "matches": ["*://*/*"] - }, - { - "resources": ["interface/*"], - "matches": ["*://*/*"] - }, - { - "resources": ["client/*"], - "matches": ["*://*/*"] - }, - { - "resources": ["resources/*"], - "matches": ["*://*/*"] - }, - { - "resources": ["backgrounds/*"], - "matches": ["*://*/*"] - } - ] -} \ No newline at end of file diff --git a/public/purify.min.js b/public/purify.min.js deleted file mode 100644 index 32954ef5..00000000 --- a/public/purify.min.js +++ /dev/null @@ -1,1389 +0,0 @@ -/*! @license DOMPurify 3.0.3 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.0.3/LICENSE */ -!(function (e, t) { - 'object' == typeof exports && 'undefined' != typeof module - ? (module.exports = t()) - : 'function' == typeof define && define.amd - ? define(t) - : ((e = - 'undefined' != typeof globalThis ? globalThis : e || self).DOMPurify = - t()); -})(this, function () { - 'use strict'; - const { - entries: e, - setPrototypeOf: t, - isFrozen: n, - getPrototypeOf: o, - getOwnPropertyDescriptor: r, - } = Object; - let { freeze: i, seal: a, create: l } = Object, - { apply: c, construct: s } = 'undefined' != typeof Reflect && Reflect; - c || - (c = function (e, t, n) { - return e.apply(t, n); - }), - i || - (i = function (e) { - return e; - }), - a || - (a = function (e) { - return e; - }), - s || - (s = function (e, t) { - return new e(...t); - }); - const m = b(Array.prototype.forEach), - u = b(Array.prototype.pop), - f = b(Array.prototype.push), - p = b(String.prototype.toLowerCase), - d = b(String.prototype.toString), - h = b(String.prototype.match), - g = b(String.prototype.replace), - T = b(String.prototype.indexOf), - y = b(String.prototype.trim), - E = b(RegExp.prototype.test), - A = - ((_ = TypeError), - function () { - for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++) - t[n] = arguments[n]; - return s(_, t); - }); - var _; - function b(e) { - return function (t) { - for ( - var n = arguments.length, o = new Array(n > 1 ? n - 1 : 0), r = 1; - r < n; - r++ - ) - o[r - 1] = arguments[r]; - return c(e, t, o); - }; - } - function N(e, o, r) { - var i; - (r = null !== (i = r) && void 0 !== i ? i : p), t && t(e, null); - let a = o.length; - for (; a--; ) { - let t = o[a]; - if ('string' == typeof t) { - const e = r(t); - e !== t && (n(o) || (o[a] = e), (t = e)); - } - e[t] = !0; - } - return e; - } - function S(t) { - const n = l(null); - for (const [o, r] of e(t)) n[o] = r; - return n; - } - function R(e, t) { - for (; null !== e; ) { - const n = r(e, t); - if (n) { - if (n.get) return b(n.get); - if ('function' == typeof n.value) return b(n.value); - } - e = o(e); - } - return function (e) { - return console.warn('fallback value for', e), null; - }; - } - const w = i([ - 'a', - 'abbr', - 'acronym', - 'address', - 'area', - 'article', - 'aside', - 'audio', - 'b', - 'bdi', - 'bdo', - 'big', - 'blink', - 'blockquote', - 'body', - 'br', - 'button', - 'canvas', - 'caption', - 'center', - 'cite', - 'code', - 'col', - 'colgroup', - 'content', - 'data', - 'datalist', - 'dd', - 'decorator', - 'del', - 'details', - 'dfn', - 'dialog', - 'dir', - 'div', - 'dl', - 'dt', - 'element', - 'em', - 'fieldset', - 'figcaption', - 'figure', - 'font', - 'footer', - 'form', - 'h1', - 'h2', - 'h3', - 'h4', - 'h5', - 'h6', - 'head', - 'header', - 'hgroup', - 'hr', - 'html', - 'i', - 'img', - 'input', - 'ins', - 'kbd', - 'label', - 'legend', - 'li', - 'main', - 'map', - 'mark', - 'marquee', - 'menu', - 'menuitem', - 'meter', - 'nav', - 'nobr', - 'ol', - 'optgroup', - 'option', - 'output', - 'p', - 'picture', - 'pre', - 'progress', - 'q', - 'rp', - 'rt', - 'ruby', - 's', - 'samp', - 'section', - 'select', - 'shadow', - 'small', - 'source', - 'spacer', - 'span', - 'strike', - 'strong', - 'style', - 'sub', - 'summary', - 'sup', - 'table', - 'tbody', - 'td', - 'template', - 'textarea', - 'tfoot', - 'th', - 'thead', - 'time', - 'tr', - 'track', - 'tt', - 'u', - 'ul', - 'var', - 'video', - 'wbr', - ]), - D = i([ - 'svg', - 'a', - 'altglyph', - 'altglyphdef', - 'altglyphitem', - 'animatecolor', - 'animatemotion', - 'animatetransform', - 'circle', - 'clippath', - 'defs', - 'desc', - 'ellipse', - 'filter', - 'font', - 'g', - 'glyph', - 'glyphref', - 'hkern', - 'image', - 'line', - 'lineargradient', - 'marker', - 'mask', - 'metadata', - 'mpath', - 'path', - 'pattern', - 'polygon', - 'polyline', - 'radialgradient', - 'rect', - 'stop', - 'style', - 'switch', - 'symbol', - 'text', - 'textpath', - 'title', - 'tref', - 'tspan', - 'view', - 'vkern', - ]), - L = i([ - 'feBlend', - 'feColorMatrix', - 'feComponentTransfer', - 'feComposite', - 'feConvolveMatrix', - 'feDiffuseLighting', - 'feDisplacementMap', - 'feDistantLight', - 'feDropShadow', - 'feFlood', - 'feFuncA', - 'feFuncB', - 'feFuncG', - 'feFuncR', - 'feGaussianBlur', - 'feImage', - 'feMerge', - 'feMergeNode', - 'feMorphology', - 'feOffset', - 'fePointLight', - 'feSpecularLighting', - 'feSpotLight', - 'feTile', - 'feTurbulence', - ]), - v = i([ - 'animate', - 'color-profile', - 'cursor', - 'discard', - 'font-face', - 'font-face-format', - 'font-face-name', - 'font-face-src', - 'font-face-uri', - 'foreignobject', - 'hatch', - 'hatchpath', - 'mesh', - 'meshgradient', - 'meshpatch', - 'meshrow', - 'missing-glyph', - 'script', - 'set', - 'solidcolor', - 'unknown', - 'use', - ]), - x = i([ - 'math', - 'menclose', - 'merror', - 'mfenced', - 'mfrac', - 'mglyph', - 'mi', - 'mlabeledtr', - 'mmultiscripts', - 'mn', - 'mo', - 'mover', - 'mpadded', - 'mphantom', - 'mroot', - 'mrow', - 'ms', - 'mspace', - 'msqrt', - 'mstyle', - 'msub', - 'msup', - 'msubsup', - 'mtable', - 'mtd', - 'mtext', - 'mtr', - 'munder', - 'munderover', - 'mprescripts', - ]), - C = i([ - 'maction', - 'maligngroup', - 'malignmark', - 'mlongdiv', - 'mscarries', - 'mscarry', - 'msgroup', - 'mstack', - 'msline', - 'msrow', - 'semantics', - 'annotation', - 'annotation-xml', - 'mprescripts', - 'none', - ]), - k = i(['#text']), - O = i([ - 'accept', - 'action', - 'align', - 'alt', - 'autocapitalize', - 'autocomplete', - 'autopictureinpicture', - 'autoplay', - 'background', - 'bgcolor', - 'border', - 'capture', - 'cellpadding', - 'cellspacing', - 'checked', - 'cite', - 'class', - 'clear', - 'color', - 'cols', - 'colspan', - 'controls', - 'controlslist', - 'coords', - 'crossorigin', - 'datetime', - 'decoding', - 'default', - 'dir', - 'disabled', - 'disablepictureinpicture', - 'disableremoteplayback', - 'download', - 'draggable', - 'enctype', - 'enterkeyhint', - 'face', - 'for', - 'headers', - 'height', - 'hidden', - 'high', - 'href', - 'hreflang', - 'id', - 'inputmode', - 'integrity', - 'ismap', - 'kind', - 'label', - 'lang', - 'list', - 'loading', - 'loop', - 'low', - 'max', - 'maxlength', - 'media', - 'method', - 'min', - 'minlength', - 'multiple', - 'muted', - 'name', - 'nonce', - 'noshade', - 'novalidate', - 'nowrap', - 'open', - 'optimum', - 'pattern', - 'placeholder', - 'playsinline', - 'poster', - 'preload', - 'pubdate', - 'radiogroup', - 'readonly', - 'rel', - 'required', - 'rev', - 'reversed', - 'role', - 'rows', - 'rowspan', - 'spellcheck', - 'scope', - 'selected', - 'shape', - 'size', - 'sizes', - 'span', - 'srclang', - 'start', - 'src', - 'srcset', - 'step', - 'style', - 'summary', - 'tabindex', - 'title', - 'translate', - 'type', - 'usemap', - 'valign', - 'value', - 'width', - 'xmlns', - 'slot', - ]), - I = i([ - 'accent-height', - 'accumulate', - 'additive', - 'alignment-baseline', - 'ascent', - 'attributename', - 'attributetype', - 'azimuth', - 'basefrequency', - 'baseline-shift', - 'begin', - 'bias', - 'by', - 'class', - 'clip', - 'clippathunits', - 'clip-path', - 'clip-rule', - 'color', - 'color-interpolation', - 'color-interpolation-filters', - 'color-profile', - 'color-rendering', - 'cx', - 'cy', - 'd', - 'dx', - 'dy', - 'diffuseconstant', - 'direction', - 'display', - 'divisor', - 'dur', - 'edgemode', - 'elevation', - 'end', - 'fill', - 'fill-opacity', - 'fill-rule', - 'filter', - 'filterunits', - 'flood-color', - 'flood-opacity', - 'font-family', - 'font-size', - 'font-size-adjust', - 'font-stretch', - 'font-style', - 'font-variant', - 'font-weight', - 'fx', - 'fy', - 'g1', - 'g2', - 'glyph-name', - 'glyphref', - 'gradientunits', - 'gradienttransform', - 'height', - 'href', - 'id', - 'image-rendering', - 'in', - 'in2', - 'k', - 'k1', - 'k2', - 'k3', - 'k4', - 'kerning', - 'keypoints', - 'keysplines', - 'keytimes', - 'lang', - 'lengthadjust', - 'letter-spacing', - 'kernelmatrix', - 'kernelunitlength', - 'lighting-color', - 'local', - 'marker-end', - 'marker-mid', - 'marker-start', - 'markerheight', - 'markerunits', - 'markerwidth', - 'maskcontentunits', - 'maskunits', - 'max', - 'mask', - 'media', - 'method', - 'mode', - 'min', - 'name', - 'numoctaves', - 'offset', - 'operator', - 'opacity', - 'order', - 'orient', - 'orientation', - 'origin', - 'overflow', - 'paint-order', - 'path', - 'pathlength', - 'patterncontentunits', - 'patterntransform', - 'patternunits', - 'points', - 'preservealpha', - 'preserveaspectratio', - 'primitiveunits', - 'r', - 'rx', - 'ry', - 'radius', - 'refx', - 'refy', - 'repeatcount', - 'repeatdur', - 'restart', - 'result', - 'rotate', - 'scale', - 'seed', - 'shape-rendering', - 'specularconstant', - 'specularexponent', - 'spreadmethod', - 'startoffset', - 'stddeviation', - 'stitchtiles', - 'stop-color', - 'stop-opacity', - 'stroke-dasharray', - 'stroke-dashoffset', - 'stroke-linecap', - 'stroke-linejoin', - 'stroke-miterlimit', - 'stroke-opacity', - 'stroke', - 'stroke-width', - 'style', - 'surfacescale', - 'systemlanguage', - 'tabindex', - 'targetx', - 'targety', - 'transform', - 'transform-origin', - 'text-anchor', - 'text-decoration', - 'text-rendering', - 'textlength', - 'type', - 'u1', - 'u2', - 'unicode', - 'values', - 'viewbox', - 'visibility', - 'version', - 'vert-adv-y', - 'vert-origin-x', - 'vert-origin-y', - 'width', - 'word-spacing', - 'wrap', - 'writing-mode', - 'xchannelselector', - 'ychannelselector', - 'x', - 'x1', - 'x2', - 'xmlns', - 'y', - 'y1', - 'y2', - 'z', - 'zoomandpan', - ]), - M = i([ - 'accent', - 'accentunder', - 'align', - 'bevelled', - 'close', - 'columnsalign', - 'columnlines', - 'columnspan', - 'denomalign', - 'depth', - 'dir', - 'display', - 'displaystyle', - 'encoding', - 'fence', - 'frame', - 'height', - 'href', - 'id', - 'largeop', - 'length', - 'linethickness', - 'lspace', - 'lquote', - 'mathbackground', - 'mathcolor', - 'mathsize', - 'mathvariant', - 'maxsize', - 'minsize', - 'movablelimits', - 'notation', - 'numalign', - 'open', - 'rowalign', - 'rowlines', - 'rowspacing', - 'rowspan', - 'rspace', - 'rquote', - 'scriptlevel', - 'scriptminsize', - 'scriptsizemultiplier', - 'selection', - 'separator', - 'separators', - 'stretchy', - 'subscriptshift', - 'supscriptshift', - 'symmetric', - 'voffset', - 'width', - 'xmlns', - ]), - U = i(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']), - P = a(/\{\{[\w\W]*|[\w\W]*\}\}/gm), - F = a(/<%[\w\W]*|[\w\W]*%>/gm), - H = a(/\${[\w\W]*}/gm), - z = a(/^data-[\-\w.\u00B7-\uFFFF]/), - B = a(/^aria-[\-\w]+$/), - W = a( - /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i, - ), - G = a(/^(?:\w+script|data):/i), - Y = a(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g), - j = a(/^html$/i); - var q = Object.freeze({ - __proto__: null, - MUSTACHE_EXPR: P, - ERB_EXPR: F, - TMPLIT_EXPR: H, - DATA_ATTR: z, - ARIA_ATTR: B, - IS_ALLOWED_URI: W, - IS_SCRIPT_OR_DATA: G, - ATTR_WHITESPACE: Y, - DOCTYPE_NAME: j, - }); - const X = () => ('undefined' == typeof window ? null : window), - K = function (e, t) { - if ('object' != typeof e || 'function' != typeof e.createPolicy) - return null; - let n = null; - const o = 'data-tt-policy-suffix'; - t && t.hasAttribute(o) && (n = t.getAttribute(o)); - const r = 'dompurify' + (n ? '#' + n : ''); - try { - return e.createPolicy(r, { - createHTML: (e) => e, - createScriptURL: (e) => e, - }); - } catch (e) { - return ( - console.warn('TrustedTypes policy ' + r + ' could not be created.'), - null - ); - } - }; - var V = (function t() { - let n = - arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : X(); - const o = (e) => t(e); - if ( - ((o.version = '3.0.3'), - (o.removed = []), - !n || !n.document || 9 !== n.document.nodeType) - ) - return (o.isSupported = !1), o; - const r = n.document, - a = r.currentScript; - let { document: l } = n; - const { - DocumentFragment: c, - HTMLTemplateElement: s, - Node: _, - Element: b, - NodeFilter: P, - NamedNodeMap: F = n.NamedNodeMap || n.MozNamedAttrMap, - HTMLFormElement: H, - DOMParser: z, - trustedTypes: B, - } = n, - G = b.prototype, - Y = R(G, 'cloneNode'), - V = R(G, 'nextSibling'), - $ = R(G, 'childNodes'), - Z = R(G, 'parentNode'); - if ('function' == typeof s) { - const e = l.createElement('template'); - e.content && e.content.ownerDocument && (l = e.content.ownerDocument); - } - let J, - Q = ''; - const { - implementation: ee, - createNodeIterator: te, - createDocumentFragment: ne, - getElementsByTagName: oe, - } = l, - { importNode: re } = r; - let ie = {}; - o.isSupported = - 'function' == typeof e && - 'function' == typeof Z && - ee && - void 0 !== ee.createHTMLDocument; - const { - MUSTACHE_EXPR: ae, - ERB_EXPR: le, - TMPLIT_EXPR: ce, - DATA_ATTR: se, - ARIA_ATTR: me, - IS_SCRIPT_OR_DATA: ue, - ATTR_WHITESPACE: fe, - } = q; - let { IS_ALLOWED_URI: pe } = q, - de = null; - const he = N({}, [...w, ...D, ...L, ...x, ...k]); - let ge = null; - const Te = N({}, [...O, ...I, ...M, ...U]); - let ye = Object.seal( - Object.create(null, { - tagNameCheck: { - writable: !0, - configurable: !1, - enumerable: !0, - value: null, - }, - attributeNameCheck: { - writable: !0, - configurable: !1, - enumerable: !0, - value: null, - }, - allowCustomizedBuiltInElements: { - writable: !0, - configurable: !1, - enumerable: !0, - value: !1, - }, - }), - ), - Ee = null, - Ae = null, - _e = !0, - be = !0, - Ne = !1, - Se = !0, - Re = !1, - we = !1, - De = !1, - Le = !1, - ve = !1, - xe = !1, - Ce = !1, - ke = !0, - Oe = !1; - const Ie = 'user-content-'; - let Me = !0, - Ue = !1, - Pe = {}, - Fe = null; - const He = N({}, [ - 'annotation-xml', - 'audio', - 'colgroup', - 'desc', - 'foreignobject', - 'head', - 'iframe', - 'math', - 'mi', - 'mn', - 'mo', - 'ms', - 'mtext', - 'noembed', - 'noframes', - 'noscript', - 'plaintext', - 'script', - 'style', - 'svg', - 'template', - 'thead', - 'title', - 'video', - 'xmp', - ]); - let ze = null; - const Be = N({}, ['audio', 'video', 'img', 'source', 'image', 'track']); - let We = null; - const Ge = N({}, [ - 'alt', - 'class', - 'for', - 'id', - 'label', - 'name', - 'pattern', - 'placeholder', - 'role', - 'summary', - 'title', - 'value', - 'style', - 'xmlns', - ]), - Ye = 'http://www.w3.org/1998/Math/MathML', - je = 'http://www.w3.org/2000/svg', - qe = 'http://www.w3.org/1999/xhtml'; - let Xe = qe, - Ke = !1, - Ve = null; - const $e = N({}, [Ye, je, qe], d); - let Ze; - const Je = ['application/xhtml+xml', 'text/html'], - Qe = 'text/html'; - let et, - tt = null; - const nt = l.createElement('form'), - ot = function (e) { - return e instanceof RegExp || e instanceof Function; - }, - rt = function (e) { - if (!tt || tt !== e) { - if ( - ((e && 'object' == typeof e) || (e = {}), - (e = S(e)), - (Ze = Ze = - -1 === Je.indexOf(e.PARSER_MEDIA_TYPE) - ? Qe - : e.PARSER_MEDIA_TYPE), - (et = 'application/xhtml+xml' === Ze ? d : p), - (de = 'ALLOWED_TAGS' in e ? N({}, e.ALLOWED_TAGS, et) : he), - (ge = 'ALLOWED_ATTR' in e ? N({}, e.ALLOWED_ATTR, et) : Te), - (Ve = - 'ALLOWED_NAMESPACES' in e ? N({}, e.ALLOWED_NAMESPACES, d) : $e), - (We = - 'ADD_URI_SAFE_ATTR' in e - ? N(S(Ge), e.ADD_URI_SAFE_ATTR, et) - : Ge), - (ze = - 'ADD_DATA_URI_TAGS' in e - ? N(S(Be), e.ADD_DATA_URI_TAGS, et) - : Be), - (Fe = 'FORBID_CONTENTS' in e ? N({}, e.FORBID_CONTENTS, et) : He), - (Ee = 'FORBID_TAGS' in e ? N({}, e.FORBID_TAGS, et) : {}), - (Ae = 'FORBID_ATTR' in e ? N({}, e.FORBID_ATTR, et) : {}), - (Pe = 'USE_PROFILES' in e && e.USE_PROFILES), - (_e = !1 !== e.ALLOW_ARIA_ATTR), - (be = !1 !== e.ALLOW_DATA_ATTR), - (Ne = e.ALLOW_UNKNOWN_PROTOCOLS || !1), - (Se = !1 !== e.ALLOW_SELF_CLOSE_IN_ATTR), - (Re = e.SAFE_FOR_TEMPLATES || !1), - (we = e.WHOLE_DOCUMENT || !1), - (ve = e.RETURN_DOM || !1), - (xe = e.RETURN_DOM_FRAGMENT || !1), - (Ce = e.RETURN_TRUSTED_TYPE || !1), - (Le = e.FORCE_BODY || !1), - (ke = !1 !== e.SANITIZE_DOM), - (Oe = e.SANITIZE_NAMED_PROPS || !1), - (Me = !1 !== e.KEEP_CONTENT), - (Ue = e.IN_PLACE || !1), - (pe = e.ALLOWED_URI_REGEXP || W), - (Xe = e.NAMESPACE || qe), - (ye = e.CUSTOM_ELEMENT_HANDLING || {}), - e.CUSTOM_ELEMENT_HANDLING && - ot(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck) && - (ye.tagNameCheck = e.CUSTOM_ELEMENT_HANDLING.tagNameCheck), - e.CUSTOM_ELEMENT_HANDLING && - ot(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck) && - (ye.attributeNameCheck = - e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck), - e.CUSTOM_ELEMENT_HANDLING && - 'boolean' == - typeof e.CUSTOM_ELEMENT_HANDLING - .allowCustomizedBuiltInElements && - (ye.allowCustomizedBuiltInElements = - e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements), - Re && (be = !1), - xe && (ve = !0), - Pe && - ((de = N({}, [...k])), - (ge = []), - !0 === Pe.html && (N(de, w), N(ge, O)), - !0 === Pe.svg && (N(de, D), N(ge, I), N(ge, U)), - !0 === Pe.svgFilters && (N(de, L), N(ge, I), N(ge, U)), - !0 === Pe.mathMl && (N(de, x), N(ge, M), N(ge, U))), - e.ADD_TAGS && (de === he && (de = S(de)), N(de, e.ADD_TAGS, et)), - e.ADD_ATTR && (ge === Te && (ge = S(ge)), N(ge, e.ADD_ATTR, et)), - e.ADD_URI_SAFE_ATTR && N(We, e.ADD_URI_SAFE_ATTR, et), - e.FORBID_CONTENTS && - (Fe === He && (Fe = S(Fe)), N(Fe, e.FORBID_CONTENTS, et)), - Me && (de['#text'] = !0), - we && N(de, ['html', 'head', 'body']), - de.table && (N(de, ['tbody']), delete Ee.tbody), - e.TRUSTED_TYPES_POLICY) - ) { - if ('function' != typeof e.TRUSTED_TYPES_POLICY.createHTML) - throw A( - 'TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.', - ); - if ('function' != typeof e.TRUSTED_TYPES_POLICY.createScriptURL) - throw A( - 'TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.', - ); - (J = e.TRUSTED_TYPES_POLICY), (Q = J.createHTML('')); - } else - void 0 === J && (J = K(B, a)), - null !== J && 'string' == typeof Q && (Q = J.createHTML('')); - i && i(e), (tt = e); - } - }, - it = N({}, ['mi', 'mo', 'mn', 'ms', 'mtext']), - at = N({}, ['foreignobject', 'desc', 'title', 'annotation-xml']), - lt = N({}, ['title', 'style', 'font', 'a', 'script']), - ct = N({}, D); - N(ct, L), N(ct, v); - const st = N({}, x); - N(st, C); - const mt = function (e) { - let t = Z(e); - (t && t.tagName) || (t = { namespaceURI: Xe, tagName: 'template' }); - const n = p(e.tagName), - o = p(t.tagName); - return ( - !!Ve[e.namespaceURI] && - (e.namespaceURI === je - ? t.namespaceURI === qe - ? 'svg' === n - : t.namespaceURI === Ye - ? 'svg' === n && ('annotation-xml' === o || it[o]) - : Boolean(ct[n]) - : e.namespaceURI === Ye - ? t.namespaceURI === qe - ? 'math' === n - : t.namespaceURI === je - ? 'math' === n && at[o] - : Boolean(st[n]) - : e.namespaceURI === qe - ? !(t.namespaceURI === je && !at[o]) && - !(t.namespaceURI === Ye && !it[o]) && - !st[n] && - (lt[n] || !ct[n]) - : !('application/xhtml+xml' !== Ze || !Ve[e.namespaceURI])) - ); - }, - ut = function (e) { - f(o.removed, { element: e }); - try { - e.parentNode.removeChild(e); - } catch (t) { - e.remove(); - } - }, - ft = function (e, t) { - try { - f(o.removed, { attribute: t.getAttributeNode(e), from: t }); - } catch (e) { - f(o.removed, { attribute: null, from: t }); - } - if ((t.removeAttribute(e), 'is' === e && !ge[e])) - if (ve || xe) - try { - ut(t); - } catch (e) {} - else - try { - t.setAttribute(e, ''); - } catch (e) {} - }, - pt = function (e) { - let t, n; - if (Le) e = '' + e; - else { - const t = h(e, /^[\r\n\t ]+/); - n = t && t[0]; - } - 'application/xhtml+xml' === Ze && - Xe === qe && - (e = - '' + - e + - ''); - const o = J ? J.createHTML(e) : e; - if (Xe === qe) - try { - t = new z().parseFromString(o, Ze); - } catch (e) {} - if (!t || !t.documentElement) { - t = ee.createDocument(Xe, 'template', null); - try { - t.documentElement.innerHTML = Ke ? Q : o; - } catch (e) {} - } - const r = t.body || t.documentElement; - return ( - e && - n && - r.insertBefore(l.createTextNode(n), r.childNodes[0] || null), - Xe === qe - ? oe.call(t, we ? 'html' : 'body')[0] - : we - ? t.documentElement - : r - ); - }, - dt = function (e) { - return te.call( - e.ownerDocument || e, - e, - P.SHOW_ELEMENT | P.SHOW_COMMENT | P.SHOW_TEXT, - null, - !1, - ); - }, - ht = function (e) { - return ( - e instanceof H && - ('string' != typeof e.nodeName || - 'string' != typeof e.textContent || - 'function' != typeof e.removeChild || - !(e.attributes instanceof F) || - 'function' != typeof e.removeAttribute || - 'function' != typeof e.setAttribute || - 'string' != typeof e.namespaceURI || - 'function' != typeof e.insertBefore || - 'function' != typeof e.hasChildNodes) - ); - }, - gt = function (e) { - return 'object' == typeof _ - ? e instanceof _ - : e && - 'object' == typeof e && - 'number' == typeof e.nodeType && - 'string' == typeof e.nodeName; - }, - Tt = function (e, t, n) { - ie[e] && - m(ie[e], (e) => { - e.call(o, t, n, tt); - }); - }, - yt = function (e) { - let t; - if ((Tt('beforeSanitizeElements', e, null), ht(e))) return ut(e), !0; - const n = et(e.nodeName); - if ( - (Tt('uponSanitizeElement', e, { tagName: n, allowedTags: de }), - e.hasChildNodes() && - !gt(e.firstElementChild) && - (!gt(e.content) || !gt(e.content.firstElementChild)) && - E(/<[/\w]/g, e.innerHTML) && - E(/<[/\w]/g, e.textContent)) - ) - return ut(e), !0; - if (!de[n] || Ee[n]) { - if (!Ee[n] && At(n)) { - if (ye.tagNameCheck instanceof RegExp && E(ye.tagNameCheck, n)) - return !1; - if (ye.tagNameCheck instanceof Function && ye.tagNameCheck(n)) - return !1; - } - if (Me && !Fe[n]) { - const t = Z(e) || e.parentNode, - n = $(e) || e.childNodes; - if (n && t) { - for (let o = n.length - 1; o >= 0; --o) - t.insertBefore(Y(n[o], !0), V(e)); - } - } - return ut(e), !0; - } - return e instanceof b && !mt(e) - ? (ut(e), !0) - : ('noscript' !== n && 'noembed' !== n) || - !E(/<\/no(script|embed)/i, e.innerHTML) - ? (Re && - 3 === e.nodeType && - ((t = e.textContent), - (t = g(t, ae, ' ')), - (t = g(t, le, ' ')), - (t = g(t, ce, ' ')), - e.textContent !== t && - (f(o.removed, { element: e.cloneNode() }), - (e.textContent = t))), - Tt('afterSanitizeElements', e, null), - !1) - : (ut(e), !0); - }, - Et = function (e, t, n) { - if (ke && ('id' === t || 'name' === t) && (n in l || n in nt)) - return !1; - if (be && !Ae[t] && E(se, t)); - else if (_e && E(me, t)); - else if (!ge[t] || Ae[t]) { - if ( - !( - (At(e) && - ((ye.tagNameCheck instanceof RegExp && E(ye.tagNameCheck, e)) || - (ye.tagNameCheck instanceof Function && - ye.tagNameCheck(e))) && - ((ye.attributeNameCheck instanceof RegExp && - E(ye.attributeNameCheck, t)) || - (ye.attributeNameCheck instanceof Function && - ye.attributeNameCheck(t)))) || - ('is' === t && - ye.allowCustomizedBuiltInElements && - ((ye.tagNameCheck instanceof RegExp && E(ye.tagNameCheck, n)) || - (ye.tagNameCheck instanceof Function && ye.tagNameCheck(n)))) - ) - ) - return !1; - } else if (We[t]); - else if (E(pe, g(n, fe, ''))); - else if ( - ('src' !== t && 'xlink:href' !== t && 'href' !== t) || - 'script' === e || - 0 !== T(n, 'data:') || - !ze[e] - ) { - if (Ne && !E(ue, g(n, fe, ''))); - else if (n) return !1; - } else; - return !0; - }, - At = function (e) { - return e.indexOf('-') > 0; - }, - _t = function (e) { - let t, n, r, i; - Tt('beforeSanitizeAttributes', e, null); - const { attributes: a } = e; - if (!a) return; - const l = { - attrName: '', - attrValue: '', - keepAttr: !0, - allowedAttributes: ge, - }; - for (i = a.length; i--; ) { - t = a[i]; - const { name: c, namespaceURI: s } = t; - if ( - ((n = 'value' === c ? t.value : y(t.value)), - (r = et(c)), - (l.attrName = r), - (l.attrValue = n), - (l.keepAttr = !0), - (l.forceKeepAttr = void 0), - Tt('uponSanitizeAttribute', e, l), - (n = l.attrValue), - l.forceKeepAttr) - ) - continue; - if ((ft(c, e), !l.keepAttr)) continue; - if (!Se && E(/\/>/i, n)) { - ft(c, e); - continue; - } - Re && ((n = g(n, ae, ' ')), (n = g(n, le, ' ')), (n = g(n, ce, ' '))); - const m = et(e.nodeName); - if (Et(m, r, n)) { - if ( - (!Oe || ('id' !== r && 'name' !== r) || (ft(c, e), (n = Ie + n)), - J && - 'object' == typeof B && - 'function' == typeof B.getAttributeType) - ) - if (s); - else - switch (B.getAttributeType(m, r)) { - case 'TrustedHTML': - n = J.createHTML(n); - break; - case 'TrustedScriptURL': - n = J.createScriptURL(n); - } - try { - s ? e.setAttributeNS(s, c, n) : e.setAttribute(c, n), - u(o.removed); - } catch (e) {} - } - } - Tt('afterSanitizeAttributes', e, null); - }, - bt = function e(t) { - let n; - const o = dt(t); - for (Tt('beforeSanitizeShadowDOM', t, null); (n = o.nextNode()); ) - Tt('uponSanitizeShadowNode', n, null), - yt(n) || (n.content instanceof c && e(n.content), _t(n)); - Tt('afterSanitizeShadowDOM', t, null); - }; - return ( - (o.sanitize = function (e) { - let t, - n, - i, - a, - l = - arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; - if ( - ((Ke = !e), Ke && (e = '\x3c!--\x3e'), 'string' != typeof e && !gt(e)) - ) { - if ('function' != typeof e.toString) - throw A('toString is not a function'); - if ('string' != typeof (e = e.toString())) - throw A('dirty is not a string, aborting'); - } - if (!o.isSupported) return e; - if ( - (De || rt(l), (o.removed = []), 'string' == typeof e && (Ue = !1), Ue) - ) { - if (e.nodeName) { - const t = et(e.nodeName); - if (!de[t] || Ee[t]) - throw A( - 'root node is forbidden and cannot be sanitized in-place', - ); - } - } else if (e instanceof _) - (t = pt('\x3c!----\x3e')), - (n = t.ownerDocument.importNode(e, !0)), - (1 === n.nodeType && 'BODY' === n.nodeName) || 'HTML' === n.nodeName - ? (t = n) - : t.appendChild(n); - else { - if (!ve && !Re && !we && -1 === e.indexOf('<')) - return J && Ce ? J.createHTML(e) : e; - if (((t = pt(e)), !t)) return ve ? null : Ce ? Q : ''; - } - t && Le && ut(t.firstChild); - const s = dt(Ue ? e : t); - for (; (i = s.nextNode()); ) - yt(i) || (i.content instanceof c && bt(i.content), _t(i)); - if (Ue) return e; - if (ve) { - if (xe) - for (a = ne.call(t.ownerDocument); t.firstChild; ) - a.appendChild(t.firstChild); - else a = t; - return ( - (ge.shadowroot || ge.shadowrootmod) && (a = re.call(r, a, !0)), a - ); - } - let m = we ? t.outerHTML : t.innerHTML; - return ( - we && - de['!doctype'] && - t.ownerDocument && - t.ownerDocument.doctype && - t.ownerDocument.doctype.name && - E(j, t.ownerDocument.doctype.name) && - (m = '\n' + m), - Re && ((m = g(m, ae, ' ')), (m = g(m, le, ' ')), (m = g(m, ce, ' '))), - J && Ce ? J.createHTML(m) : m - ); - }), - (o.setConfig = function (e) { - rt(e), (De = !0); - }), - (o.clearConfig = function () { - (tt = null), (De = !1); - }), - (o.isValidAttribute = function (e, t, n) { - tt || rt({}); - const o = et(e), - r = et(t); - return Et(o, r, n); - }), - (o.addHook = function (e, t) { - 'function' == typeof t && ((ie[e] = ie[e] || []), f(ie[e], t)); - }), - (o.removeHook = function (e) { - if (ie[e]) return u(ie[e]); - }), - (o.removeHooks = function (e) { - ie[e] && (ie[e] = []); - }), - (o.removeAllHooks = function () { - ie = {}; - }), - o - ); - })(); - return V; -}); -//# sourceMappingURL=purify.min.js.map diff --git a/src/SEQTA.ts b/src/SEQTA.ts index 84037667..d0216462 100644 --- a/src/SEQTA.ts +++ b/src/SEQTA.ts @@ -1,164 +1,150 @@ -/* eslint-disable no-inner-declarations */ -import * as Sentry from "@sentry/browser"; +import * as Sentry from "@sentry/browser" -browser.storage.local.get([ "telemetry" ]).then((telemetry) => { - if (telemetry.telemetry === true) { - Sentry.init({ - dsn: "https://54bdb68e80b45182ded22ecf9fe9529c@o4506347383291904.ingest.sentry.io/4506347462393856", - integrations: [ - new Sentry.BrowserTracing({ - // Set 'tracePropagationTargets' to control for which URLs distributed tracing should be enabled - tracePropagationTargets: ["localhost", /^https:\/\/yourserver\.io\/api/], - }), - new Sentry.Replay(), - ], - // Performance Monitoring - tracesSampleRate: 1.0, // Capture 100% of the transactions - // Session Replay - replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production. - replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur. - }); - } -}) -import browser from 'webextension-polyfill'; -import { animate, spring, stagger } from 'motion'; -import Color from 'color'; -import Sortable from 'sortablejs'; +import { animate, spring, stagger } from 'motion' +import loading, { AppendLoadingSymbol } from './seqta/ui/Loading' -import ShortcutLinks from './seqta/content/links.json'; -import MenuitemSVGKey from './seqta/content/MenuItemSVGKey.json'; -import stringToHTML from './seqta/utils/stringToHTML'; -import loading, { AppendLoadingSymbol } from './seqta/ui/Loading'; -import { response } from './seqta/utils/GetPrefs'; -import { onError } from './seqta/utils/onError'; +import updateVideo from 'url:./resources/update-video.mp4' +import IconFamily from 'url:./resources/fonts/IconFamily.woff' +import LogoLight from 'url:./resources/icons/betterseqta-light-icon.png' +import LogoLightOutline from 'url:./resources/icons/betterseqta-light-outline.png' +import icon48 from 'url:./resources/icons/icon-48.png' -// Icons -import assessmentsicon from './seqta/icons/assessmentsIcon'; -import coursesicon from './seqta/icons/coursesIcon'; -import StorageListener from './seqta/utils/StorageListener'; -import { MessageHandler } from './seqta/utils/MessageListener'; -import { updateBgDurations } from './seqta/ui/Animation'; -import { updateAllColors } from './seqta/ui/colors/Manager'; -import { appendBackgroundToUI } from './seqta/ui/ImageBackgrounds'; -import { enableCurrentTheme } from './seqta/ui/Themes'; -import { delay } from "./seqta/utils/delay"; -import { SettingsState } from "./types/storage"; +import Popup from 'url:./interface/index.html' + +import Color from 'color' +import MenuitemSVGKey from './seqta/content/MenuItemSVGKey.json' +import { MessageHandler } from './seqta/utils/MessageListener' +import { SettingsState } from "./types/storage" +import ShortcutLinks from './seqta/content/links.json' +import Sortable from 'sortablejs' +import StorageListener from './seqta/utils/StorageListener' +import { appendBackgroundToUI } from './seqta/ui/ImageBackgrounds' +import assessmentsicon from './seqta/icons/assessmentsIcon' +import browser from 'webextension-polyfill' +import coursesicon from './seqta/icons/coursesIcon' +import { delay } from "./seqta/utils/delay" +import { enableCurrentTheme } from './seqta/ui/Themes' +import iframeCSS from "bundle-text:./css/iframe.scss" +import { onError } from './seqta/utils/onError' +import stringToHTML from './seqta/utils/stringToHTML' +import { getDarkMode, updateAllColors } from './seqta/ui/colors/Manager' +import { updateBgDurations } from './seqta/ui/Animation' declare global { interface Window { - chrome?: any; + chrome?: any } } -export let isChrome = window.chrome; -let SettingsClicked = false; -export let MenuOptionsOpen = false; -let UserInitalCode = ''; -let currentSelectedDate = new Date(); -let LessonInterval: any; -export let DarkMode: boolean; +export let isChrome = window.chrome +let SettingsClicked = false +export let MenuOptionsOpen = false +let UserInitalCode = '' +let currentSelectedDate = new Date() +let LessonInterval: any +export let DarkMode: boolean -var MenuItemMutation = false; -var NonSEQTAPage = false; -var IsSEQTAPage = false; +var MenuItemMutation = false +var NonSEQTAPage = false +var IsSEQTAPage = false document.addEventListener( 'load', async function () { - CheckForMenuList(); - const hasSEQTAText = document.childNodes[1].textContent?.includes('Copyright (c) SEQTA Software'); - const hasSEQTATitle = document.title.includes('SEQTA Learn'); + CheckForMenuList() + const hasSEQTAText = document.childNodes[1].textContent?.includes('Copyright (c) SEQTA Software') + const hasSEQTATitle = document.title.includes('SEQTA Learn') if (hasSEQTAText && hasSEQTATitle && !IsSEQTAPage) { - IsSEQTAPage = true; - console.log('[BetterSEQTA+] Verified SEQTA Page'); + IsSEQTAPage = true + console.log('[BetterSEQTA+] Verified SEQTA Page') - const link = GetCSSElement('css/documentload.css'); - document.getElementsByTagName('html')[0].appendChild(link); + import('./css/injected.scss') + import('./css/documentload.scss') - enableCurrentTheme(); + enableCurrentTheme() try { - const items = await browser.storage.local.get() as SettingsState; + const items = await browser.storage.local.get() as SettingsState - main(items); + main(items) } catch (error: any) { - onError(error); + onError(error) } } if (!hasSEQTAText && !NonSEQTAPage) { - NonSEQTAPage = true; + NonSEQTAPage = true } }, true, -); +) function SetDisplayNone(ElementName: string) { - return `li[data-key=${ElementName}]{display:var(--menuHidden) !important; transition: 1s;}`; + return `li[data-key=${ElementName}]{display:var(--menuHidden) !important; transition: 1s;}` } function animbkEnable(item: any) { if (item.animatedbk) { - CreateBackground(); + CreateBackground() } else { - RemoveBackground(); - document.getElementById('container')!.style.background = 'var(--background-secondary)'; + RemoveBackground() + document.getElementById('container')!.style.background = 'var(--background-secondary)' } } export async function HideMenuItems(): Promise { try { - const result = await browser.storage.local.get() as SettingsState; + const result = await browser.storage.local.get() as SettingsState - let stylesheetInnerText: string = ''; + let stylesheetInnerText: string = '' for (const [menuItem, { toggle }] of Object.entries(result.menuitems)) { if (!toggle) { - stylesheetInnerText += SetDisplayNone(menuItem); - console.log(`[BetterSEQTA+] Hiding ${menuItem} menu item`); + stylesheetInnerText += SetDisplayNone(menuItem) + console.log(`[BetterSEQTA+] Hiding ${menuItem} menu item`) } } - const menuItemStyle: HTMLStyleElement = document.createElement('style'); - menuItemStyle.innerText = stylesheetInnerText; - document.head.appendChild(menuItemStyle); + const menuItemStyle: HTMLStyleElement = document.createElement('style') + menuItemStyle.innerText = stylesheetInnerText + document.head.appendChild(menuItemStyle) } catch (error) { - console.error("An error occurred:", error); + console.error("An error occurred:", error) } } function OpenWhatsNewPopup() { - const background = document.createElement('div'); - background.id = 'whatsnewbk'; - background.classList.add('whatsnewBackground'); + const background = document.createElement('div') + background.id = 'whatsnewbk' + background.classList.add('whatsnewBackground') - const container = document.createElement('div'); - container.classList.add('whatsnewContainer'); + const container = document.createElement('div') + container.classList.add('whatsnewContainer') var header: any = stringToHTML(`

What's New

BetterSEQTA+ V${browser.runtime.getManifest().version}

-
`).firstChild; + `).firstChild - let imagecont = document.createElement('div'); - imagecont.classList.add('whatsnewImgContainer'); - let video = document.createElement('video'); - let source = document.createElement('source'); - source.setAttribute('src', browser.runtime.getURL('resources/update-video.mp4')); - source.setAttribute('type', 'video/mp4'); - video.autoplay = true; - video.muted = true; - video.loop = true; - video.appendChild(source); - video.classList.add('whatsnewImg'); - imagecont.appendChild(video); + let imagecont = document.createElement('div') + imagecont.classList.add('whatsnewImgContainer') + let video = document.createElement('video') + let source = document.createElement('source') + source.setAttribute('src', updateVideo) + source.setAttribute('type', 'video/mp4') + video.autoplay = true + video.muted = true + video.loop = true + video.appendChild(source) + video.classList.add('whatsnewImg') + imagecont.appendChild(video) - let textcontainer = document.createElement('div'); - textcontainer.classList.add('whatsnewTextContainer'); + let textcontainer = document.createElement('div') + textcontainer.classList.add('whatsnewTextContainer') let textheader: any = stringToHTML( '

DESIGN OVERHAUL

', - ).firstChild; - textcontainer.append(textheader); + ).firstChild + textcontainer.append(textheader) let text = stringToHTML( String.raw` @@ -229,7 +215,7 @@ function OpenWhatsNewPopup() {
  • Found in the BetterSEQTA+ Settings menu, custom shortcuts can now be created with a name and URL of your choice.
  • `, - ).firstChild; + ).firstChild let footer = stringToHTML( String.raw` @@ -248,30 +234,30 @@ function OpenWhatsNewPopup() { - `).firstChild; + `).firstChild - let exitbutton = document.createElement('div'); - exitbutton.id = 'whatsnewclosebutton'; + let exitbutton = document.createElement('div') + exitbutton.id = 'whatsnewclosebutton' - container.append(header); - container.append(imagecont); - container.append(textcontainer); - container.append(text as ChildNode); - container.append(footer as ChildNode); - container.append(exitbutton); + container.append(header) + container.append(imagecont) + container.append(textcontainer) + container.append(text as ChildNode) + container.append(footer as ChildNode) + container.append(exitbutton) - background.append(container); + background.append(container) - document.getElementById('container')!.append(background); + document.getElementById('container')!.append(background) - let bkelement = document.getElementById('whatsnewbk'); - let popup = document.getElementsByClassName('whatsnewContainer')[0]; + let bkelement = document.getElementById('whatsnewbk') + let popup = document.getElementsByClassName('whatsnewContainer')[0] animate( [popup, bkelement as HTMLElement], { scale: [0, 1], opacity: [0, 1] }, { easing: spring({ stiffness: 220, damping: 18 }) } - ); + ) animate( '.whatsnewTextContainer *', @@ -281,122 +267,124 @@ function OpenWhatsNewPopup() { duration: 0.5, easing: [.22, .03, .26, 1] } - ); + ) - browser.storage.local.remove(['justupdated']); + browser.storage.local.remove(['justupdated']) bkelement!.addEventListener('click', function (event) { // Check if the click event originated from the element itself and not any of its children if (event.target === bkelement) { - DeleteWhatsNew(); + DeleteWhatsNew() } }); - var closeelement = document.getElementById('whatsnewclosebutton'); + var closeelement = document.getElementById('whatsnewclosebutton') closeelement!.addEventListener('click', function () { - DeleteWhatsNew(); - }); + DeleteWhatsNew() + }) } async function finishLoad() { try { - var loadingbk = document.getElementById('loading'); - loadingbk!.style.opacity = '0'; - await delay(501); - loadingbk!.remove(); + document.querySelector('.legacy-root')!.classList.remove('hidden') + var loadingbk = document.getElementById('loading') + loadingbk!.style.opacity = '0' + await delay(501) + loadingbk!.remove() } catch (err) { - console.log(err); + console.log(err) } - const result = browser.storage.local.get(['justupdated']); + const result = browser.storage.local.get(['justupdated']) function open (result: any) { if (result.justupdated && !document.getElementById('whatsnewbk')) { - OpenWhatsNewPopup(); + OpenWhatsNewPopup() } } result.then(open, onError) } async function DeleteWhatsNew() { - const bkelement = document.getElementById('whatsnewbk'); - const popup = document.getElementsByClassName('whatsnewContainer')[0]; + const bkelement = document.getElementById('whatsnewbk') + const popup = document.getElementsByClassName('whatsnewContainer')[0] animate( [popup, bkelement!], { opacity: [1, 0], scale: [1, 0] }, { easing: [.22, .03, .26, 1] } ).finished.then(() => { - bkelement!.remove(); - }); + bkelement!.remove() + }); } export function CreateBackground() { - var bkCheck = document.getElementsByClassName('bg'); + var bkCheck = document.getElementsByClassName('bg') if (bkCheck.length !== 0) { - return; + return } // Creating and inserting 3 divs containing the background applied to the pages - var bklocation = document.getElementById('container'); - var menu = document.getElementById('menu'); - var bk = document.createElement('div'); - bk.classList.add('bg'); + var bklocation = document.getElementById('container') + var menu = document.getElementById('menu') + var bk = document.createElement('div') + bk.classList.add('bg') - bklocation!.insertBefore(bk, menu); + bklocation!.insertBefore(bk, menu) - var bk2 = document.createElement('div'); - bk2.classList.add('bg'); - bk2.classList.add('bg2'); - bklocation!.insertBefore(bk2, menu); + var bk2 = document.createElement('div') + bk2.classList.add('bg') + bk2.classList.add('bg2') + bklocation!.insertBefore(bk2, menu) - var bk3 = document.createElement('div'); - bk3.classList.add('bg'); - bk3.classList.add('bg3'); - bklocation!.insertBefore(bk3, menu); + var bk3 = document.createElement('div') + bk3.classList.add('bg') + bk3.classList.add('bg3') + bklocation!.insertBefore(bk3, menu) } export function RemoveBackground() { - var bk = document.getElementsByClassName('bg'); - var bk2 = document.getElementsByClassName('bg2'); - var bk3 = document.getElementsByClassName('bg3'); + var bk = document.getElementsByClassName('bg') + var bk2 = document.getElementsByClassName('bg2') + var bk3 = document.getElementsByClassName('bg3') - if (bk.length == 0 || bk2.length == 0 || bk3.length == 0) return; - bk[0].remove(); - bk2[0].remove(); - bk3[0].remove(); + if (bk.length == 0 || bk2.length == 0 || bk3.length == 0) return + bk[0].remove() + bk2[0].remove() + bk3[0].remove() } -export function waitForElm(selector: any) { +export function waitForElm(selector: string) { return new Promise((resolve) => { - if (document.querySelector(selector)) { - return resolve(document.querySelector(selector)); + const querySelector = () => document.querySelector(selector); + + if (querySelector()) { + return resolve(querySelector()); } const observer = new MutationObserver(() => { - if (document.querySelector(selector)) { - resolve(document.querySelector(selector)); + if (querySelector()) { + resolve(querySelector()); observer.disconnect(); } }); - observer.observe(document.body, { - childList: true, - subtree: true, - }); + if (document.body) { + observer.observe(document.body, { + childList: true, + subtree: true, + }); + } else { + document.addEventListener('DOMContentLoaded', () => { + observer.observe(document.body, { + childList: true, + subtree: true, + }); + }); + } }); } -async function RunColourCheck(element: any) { - if ( - typeof element.contentDocument.documentElement.childNodes[1] == 'undefined' - ) { - await delay(1000); - RunColourCheck(element); - } else { - element.contentDocument.documentElement.childNodes[1].style.color = 'white'; - } -} -export function GetCSSElement (file: string) { +export function GetCSSElement(file: string) { const cssFile = browser.runtime.getURL(file) const fileref = document.createElement('link') fileref.setAttribute('rel', 'stylesheet') @@ -422,82 +410,65 @@ function removeThemeTagsFromNotices () { } } -function CheckiFrameItems() { - // Injecting CSS File to the webpage to overwrite iFrame default CSS - let fileref = GetCSSElement('css/iframe.css'); +async function updateIframesWithDarkMode(): Promise { + // Load the CSS file to overwrite iFrame default CSS + const cssLink = document.createElement('style') + cssLink.classList.add('iframecss') + const cssContent = document.createTextNode(iframeCSS) + cssLink.appendChild(cssContent) - const observer = new MutationObserver(function (mutations_list) { - mutations_list.forEach(function (mutation) { - mutation.addedNodes.forEach(function (added_node) { - const node = added_node as HTMLElement - if (node.tagName == 'IFRAME') { - const result = browser.storage.local.get('DarkMode') as Promise; - function open (result: any) { - DarkMode = result.DarkMode; - const node = added_node as HTMLIFrameElement - if (DarkMode) { - RunColourCheck(node); - const childNode = node.contentDocument!.documentElement.childNodes[1] as HTMLElement - if ( - childNode.style - .color != 'white' - ) { - childNode.style.color = - 'white'; - } - const innerHTMLNode = node.contentDocument!.documentElement.firstChild! as HTMLElement - if ( - !innerHTMLNode.innerHTML.includes( - 'iframe.css', - ) - ) { - innerHTMLNode.append( - fileref, - ); - } - node.addEventListener('load', function () { - const childNode = node.contentDocument!.documentElement.childNodes[1] as HTMLElement - const innerHTMLNode = node.contentDocument!.documentElement.firstChild! as HTMLElement - if ( - childNode.style - .color != 'white' - ) { - childNode.style.color = - 'white'; - } - if ( - !innerHTMLNode.innerHTML.includes( - 'iframe.css', - ) - ) { - innerHTMLNode.append( - fileref, - ); - } - }); - } + const observer = new MutationObserver(async (mutationsList) => { + for (const mutation of mutationsList) { + for (const node of mutation.addedNodes) { + if (node.nodeName === 'IFRAME') { + const iframe = node as HTMLIFrameElement + try { + const settings = await browser.storage.local.get('DarkMode') as SettingsState + applyDarkModeToIframe(iframe, cssLink, settings.DarkMode); + } catch (error) { + console.error('Error applying dark mode:', error) } - result.then(open, onError) } + } + } + }); + + if (document.body) { + observer.observe(document.body, { + childList: true, + subtree: true, + }); + } else { + document.addEventListener('DOMContentLoaded', () => { + observer.observe(document.body, { + childList: true, + subtree: true, }); }); - }); + } +} - observer.observe(document.body, { - subtree: true, - childList: true, - }); +function applyDarkModeToIframe(iframe: HTMLIFrameElement, cssLink: HTMLStyleElement, DarkMode: boolean): void { + const iframeDocument = iframe.contentDocument + if (!iframeDocument) return + + if (DarkMode) iframeDocument.body.classList.add('dark') + + const head = iframeDocument.head + if (head && !head.innerHTML.includes('iframecss')) { + head.appendChild(cssLink) + } } function SortMessagePageItems(messagesParentElement: any) { - let filterbutton = document.createElement('div'); - filterbutton.classList.add('messages-filterbutton'); - filterbutton.innerText = 'Filter'; + let filterbutton = document.createElement('div') + filterbutton.classList.add('messages-filterbutton') + filterbutton.innerText = 'Filter' let header = document.getElementsByClassName( 'MessageList__MessageList___3DxoC', - )[0].firstChild as HTMLElement; - header.append(filterbutton); + )[0].firstChild as HTMLElement + header.append(filterbutton) messagesParentElement /* const observer = new MutationObserver(function (mutations_list) { @@ -507,9 +478,9 @@ function SortMessagePageItems(messagesParentElement: any) { if (node.dataset.message) { // Check if added_node.firstChild.title is in block list } - }); - }); - }); + }) + }) + }) observer.observe(messagesParentElement, { subtree: true, @@ -518,42 +489,42 @@ function SortMessagePageItems(messagesParentElement: any) { } async function LoadPageElements(): Promise { - await AddBetterSEQTAElements(true); - const sublink: string | undefined = window.location.href.split('/')[4]; + await AddBetterSEQTAElements(true) + const sublink: string | undefined = window.location.href.split('/')[4] async function handleNewsPage(): Promise { - console.log('[BetterSEQTA+] Started Init'); - const settings: SettingsState = await browser.storage.local.get() as SettingsState; + console.log('[BetterSEQTA+] Started Init') + const settings: SettingsState = await browser.storage.local.get() as SettingsState if (settings.onoff) { - SendNewsPage(); - const notificationSettings: SettingsState = await browser.storage.local.get() as SettingsState; + SendNewsPage() + const notificationSettings: SettingsState = await browser.storage.local.get() as SettingsState if (notificationSettings.notificationcollector) { - enableNotificationCollector(); + enableNotificationCollector() } - finishLoad(); + finishLoad() } } async function handleDefault(): Promise { - finishLoad(); - const settings: SettingsState = await browser.storage.local.get() as SettingsState; + finishLoad() + const settings: SettingsState = await browser.storage.local.get() as SettingsState if (settings.notificationcollector) { - enableNotificationCollector(); + enableNotificationCollector() } } switch (sublink) { case 'news': - await handleNewsPage(); - break; + await handleNewsPage() + break case 'home': case undefined: - window.location.replace(`${location.origin}/#?page=/home`); - LoadInit(); - break; + window.location.replace(`${location.origin}/#?page=/home`) + LoadInit() + break default: - await handleDefault(); - break; + await handleDefault() + break } const observer = new MutationObserver(function (mutations_list) { @@ -561,110 +532,110 @@ async function LoadPageElements(): Promise { mutation.addedNodes.forEach(function (added_node) { const node = added_node as HTMLElement if (node.classList.contains('messages')) { - let element = document.getElementById('title')!.firstChild as HTMLElement; - element.innerText = 'Direct Messages'; - document.title = 'Direct Messages ― SEQTA Learn'; - SortMessagePageItems(added_node); + let element = document.getElementById('title')!.firstChild as HTMLElement + element.innerText = 'Direct Messages' + document.title = 'Direct Messages ― SEQTA Learn' + SortMessagePageItems(added_node) } else if (node.classList.contains('notices')) { - CheckNoticeTextColour(added_node); + CheckNoticeTextColour(added_node) } - }); - }); - }); + }) + }) + }) observer.observe(document.querySelector('#main') as HTMLElement, { subtree: false, childList: true, - }); + }) } function CheckNoticeTextColour(notice: any) { const observer = new MutationObserver(function (mutations_list) { mutations_list.forEach(function (mutation) { mutation.addedNodes.forEach(function (added_node) { - const node = added_node as HTMLElement; + const node = added_node as HTMLElement const result = browser.storage.local.get(['DarkMode']) function open (result: any) { - DarkMode = result.DarkMode; + DarkMode = result.DarkMode if (node.classList.contains('notice')) { - var hex = node.style.cssText.split(' ')[1]; + var hex = node.style.cssText.split(' ')[1] if (hex) { const hex1 = hex.slice(0,-1) - var threshold = GetThresholdOfColor(hex1); + var threshold = GetThresholdOfColor(hex1) if (DarkMode && threshold < 100) { - node.style.cssText = '--color: undefined;'; + node.style.cssText = '--color: undefined;' } } } } result.then(open, onError) - }); - }); - }); + }) + }) + }) observer.observe(notice, { subtree: true, childList: true, - }); + }) } export function tryLoad() { waitForElm('.login').then(() => { - finishLoad(); - }); + finishLoad() + }) waitForElm('.day-container').then(() => { - finishLoad(); - }); + finishLoad() + }) waitForElm('[data-key=welcome]').then((elm: any) => { - elm.classList.remove('active'); - }); + elm.classList.remove('active') + }) waitForElm('.code').then((elm: any) => { - if (!elm.innerText.includes('BetterSEQTA')) LoadPageElements(); - }); + if (!elm.innerText.includes('BetterSEQTA')) LoadPageElements() + }) // Waits for page to call on load, run scripts document.addEventListener( 'load', function () { - CheckiFrameItems(); - removeThemeTagsFromNotices(); - documentTextColor(); + updateIframesWithDarkMode() + removeThemeTagsFromNotices() + documentTextColor() }, true, - ); + ) const observer = new MutationObserver(() => { documentTextColor() }) observer.observe(document!, { attributes: true, childList: true, subtree: true, attributeFilter: ['td'], }) } function ChangeMenuItemPositions(storage: any) { - let menuorder = storage; + let menuorder = storage - var menuList = document.querySelector('#menu')!.firstChild!.childNodes; + var menuList = document.querySelector('#menu')!.firstChild!.childNodes - let listorder = []; + let listorder = [] for (let i = 0; i < menuList.length; i++) { const menu = menuList[i] as HTMLElement - let a = menuorder.indexOf(menu.dataset.key); + let a = menuorder.indexOf(menu.dataset.key) - listorder.push(a); + listorder.push(a) } - var newArr = []; + var newArr = [] for (var i = 0; i < listorder.length; i++) { - newArr[listorder[i]] = menuList[i]; + newArr[listorder[i]] = menuList[i] } - let listItemsDOM = document.getElementById('menu')!.firstChild; + let listItemsDOM = document.getElementById('menu')!.firstChild for (let i = 0; i < newArr.length; i++) { - const element = newArr[i]; + const element = newArr[i] if (element) { const elem = element as HTMLElement - elem.setAttribute('data-checked', 'true'); - listItemsDOM!.appendChild(element); + elem.setAttribute('data-checked', 'true') + listItemsDOM!.appendChild(element) } } } @@ -672,7 +643,7 @@ function ChangeMenuItemPositions(storage: any) { export async function ObserveMenuItemPosition() { const result = browser.storage.local.get() function open (result: any) { - let menuorder = result.menuorder; + let menuorder = result.menuorder if (menuorder && result.onoff) { const observer = new MutationObserver(function (mutations_list) { mutations_list.forEach(function (mutation) { @@ -684,18 +655,18 @@ export async function ObserveMenuItemPosition() { ReplaceMenuSVG( node, MenuitemSVGKey[node.dataset.key as keyof typeof MenuitemSVGKey], - ); + ) } - ChangeMenuItemPositions(menuorder); + ChangeMenuItemPositions(menuorder) } - }); - }); - }); + }) + }) + }) observer.observe(document.querySelector('#menu')!.firstChild!, { subtree: true, childList: true, - }); + }) } } result.then(open, onError) @@ -704,237 +675,237 @@ export async function ObserveMenuItemPosition() { function main(storedSetting: SettingsState) { // Handle undefined onoff setting if (typeof storedSetting.onoff === 'undefined') { - browser.runtime.sendMessage({ type: 'setDefaultStorage' }); + browser.runtime.sendMessage({ type: 'setDefaultStorage' }) + } + + if (storedSetting.telemetry && storedSetting.onoff) { + Sentry.init({ + dsn: "https://54bdb68e80b45182ded22ecf9fe9529c@o4506347383291904.ingest.sentry.io/4506347462393856", + integrations: [ + new Sentry.BrowserTracing({ + // Set 'tracePropagationTargets' to control for which URLs distributed tracing should be enabled + tracePropagationTargets: ["localhost", /^https:\/\/yourserver\.io\/api/], + }), + new Sentry.Replay(), + ], + // Performance Monitoring + tracesSampleRate: 1.0, // Capture 100% of the transactions + // Session Replay + replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production. + replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur. + }) } const handleDisabled = () => { - waitForElm('.code').then(AppendElementsToDisabledPage); - }; + waitForElm('.code').then(AppendElementsToDisabledPage) + } - if (storedSetting.DarkMode) { - console.log('[BetterSEQTA+] Enabled'); - if (DarkMode) { - document.documentElement.classList.add('dark'); - } + if (storedSetting.onoff) { + console.log('[BetterSEQTA+] Enabled') + if (DarkMode) document.documentElement.classList.add('dark') + + document.querySelector('.legacy-root')?.classList.add('hidden') + + new StorageListener() + new MessageHandler() - updateAllColors(storedSetting); - InjectStyles(); - loading(); - InjectCustomIcons(); - HideMenuItems(); - CheckLoadOnPeriods(); - tryLoad(); + updateAllColors(storedSetting) + loading() + InjectCustomIcons() + HideMenuItems() + CheckLoadOnPeriods() + tryLoad() - window.addEventListener('load', tryLoad); + window.addEventListener('load', tryLoad) } else { handleDisabled() - window.addEventListener('load', handleDisabled); + window.addEventListener('load', handleDisabled) } } -function InjectStyles() { - const inject = GetCSSElement('css/injected.css'); - document.head.appendChild(inject); - document.getElementsByTagName('html')[0].appendChild(inject); -} - function InjectCustomIcons() { - const fontURL = browser.runtime.getURL('fonts/IconFamily.woff'); + console.log('[BetterSEQTA+] Injecting Icons') - const style = document.createElement('style'); - style.setAttribute('type', 'text/css'); + const style = document.createElement('style') + style.setAttribute('type', 'text/css') style.innerHTML = ` @font-face { font-family: 'IconFamily'; - src: url('${fontURL}') format('woff'); + src: url('${IconFamily}') format('woff'); font-weight: normal; font-style: normal; - }`; - document.head.appendChild(style); + }` + document.head.appendChild(style) } export function AppendElementsToDisabledPage() { - AddBetterSEQTAElements(false); + AddBetterSEQTAElements(false) - let settingsStyle = document.createElement('style'); + let settingsStyle = document.createElement('style') settingsStyle.innerText = ` .addedButton { - position: absolute !important; - right: 50px; - width: 35px; - height: 35px; - padding: 6px !important; - overflow: unset !important; - border-radius: 50%; - margin: 7px !important; - cursor: pointer; - color: white !important; + position: absolute !important + right: 50px + width: 35px + height: 35px + padding: 6px !important + overflow: unset !important + border-radius: 50% + margin: 7px !important + cursor: pointer + color: white !important } .addedButton svg { - margin: 6px; + margin: 6px } .outside-container { - top: 48px !important; + top: 48px !important } #ExtensionPopup { - border-radius: 1rem; - box-shadow: 0px 0px 20px -2px rgba(0, 0, 0, 0.6); - transform-origin: 70% 0; + border-radius: 1rem + box-shadow: 0px 0px 20px -2px rgba(0, 0, 0, 0.6) + transform-origin: 70% 0 } - `; - document.head.append(settingsStyle); + ` + document.head.append(settingsStyle) } -new StorageListener(); -new MessageHandler(); - -var PageLoaded = false; +var PageLoaded = false async function CheckLoadOnPeriods() { if (!PageLoaded) { - await delay(1000); - var code = document.getElementsByClassName('code')[0]; + await delay(1000) + var code = document.getElementsByClassName('code')[0] if (code && !UserInitalCode) { - LoadPageElements(); - finishLoad(); - PageLoaded = true; + LoadPageElements() + finishLoad() + PageLoaded = true } if (!code) { - CheckLoadOnPeriods(); + CheckLoadOnPeriods() } } } export function closeSettings() { - const ExtensionSettings = document.getElementById('ExtensionPopup')!; - const ExtensionIframe = document.getElementById('ExtensionIframe') as HTMLIFrameElement; + const ExtensionSettings = document.getElementById('ExtensionPopup')! + const ExtensionIframe = document.getElementById('ExtensionIframe') as HTMLIFrameElement if (SettingsClicked == true) { - ExtensionSettings!.classList.add('hide'); + ExtensionSettings!.classList.add('hide') animate( '#ExtensionPopup', { opacity: [1, 0], scale: [1, 0] }, { easing: spring({ stiffness: 220, damping: 18 }) } - ); - SettingsClicked = false; + ) + SettingsClicked = false if (ExtensionIframe.contentWindow) { - ExtensionIframe.contentWindow.postMessage('popupClosed', '*'); + ExtensionIframe.contentWindow.postMessage('popupClosed', '*') } } - ExtensionSettings!.classList.add('hide'); + ExtensionSettings!.classList.add('hide') } function addExtensionSettings() { - const link = GetCSSElement('interface/popup.css'); - document.querySelector('html')!.appendChild(link); + /* const link = GetCSSElement('src/interface/popup.css') + document.querySelector('html')!.appendChild(link) */ - const extensionPopup = document.createElement('div'); - extensionPopup.classList.add('outside-container', 'hide'); - extensionPopup.id = 'ExtensionPopup'; - document.body.appendChild(extensionPopup); + const extensionPopup = document.createElement('div') + extensionPopup.classList.add('outside-container', 'hide') + extensionPopup.id = 'ExtensionPopup' + document.body.appendChild(extensionPopup) - const extensionIframe: HTMLIFrameElement = document.createElement('iframe'); - extensionIframe.src = `${browser.runtime.getURL('interface/index.html')}#settings/embedded`; - extensionIframe.id = 'ExtensionIframe'; - extensionIframe.setAttribute('allowTransparency', 'true'); - extensionIframe.setAttribute('excludeDarkCheck', 'true'); - extensionIframe.style.width = '384px'; - extensionIframe.style.height = '600px'; - extensionIframe.style.border = 'none'; - extensionPopup.appendChild(extensionIframe); + const extensionIframe: HTMLIFrameElement = document.createElement('iframe') + extensionIframe.src = `${Popup}#settings/embedded` + extensionIframe.id = 'ExtensionIframe' + extensionIframe.setAttribute('allowTransparency', 'true') + extensionIframe.setAttribute('excludeDarkCheck', 'true') + extensionIframe.style.width = '384px' + extensionIframe.style.height = '600px' + extensionIframe.style.border = 'none' + extensionPopup.appendChild(extensionIframe) - const container = document.getElementById('container'); + const container = document.getElementById('container') const closeExtensionPopup = () => { - const ExtensionIframe = document.getElementById('ExtensionIframe') as HTMLIFrameElement; + const ExtensionIframe = document.getElementById('ExtensionIframe') as HTMLIFrameElement - extensionPopup.classList.add('hide'); + extensionPopup.classList.add('hide') animate( '#ExtensionPopup', { opacity: [1, 0], scale: [1, 0] }, { easing: [.22, .03, .26, 1] } - ); + ) if (ExtensionIframe.contentWindow) { - ExtensionIframe.contentWindow.postMessage('popupClosed', '*'); + ExtensionIframe.contentWindow.postMessage('popupClosed', '*') } - SettingsClicked = false; - }; + SettingsClicked = false + } container!.onclick = (event) => { if ((event.target as HTMLElement).closest('#AddedSettings') == null && SettingsClicked) { closeExtensionPopup() } - }; -} - -function saveNewOrder(sortable: any) { - var order = sortable.toArray(); - browser.storage.local.set({ menuorder: order }); -} - -function cloneAttributes(target: any, source: any) { - [...source.attributes].forEach((attr) => { - target.setAttribute(attr.nodeName, attr.nodeValue); - }); + } } export function OpenMenuOptions() { const result = browser.storage.local.get() function open (result: any) { - var container = document.getElementById('container'); - var menu = document.getElementById('menu'); + var container = document.getElementById('container') + var menu = document.getElementById('menu') if (result.defaultmenuorder.length == '0') { - let childnodes = menu!.firstChild!.childNodes; - let newdefaultmenuorder = []; + let childnodes = menu!.firstChild!.childNodes + let newdefaultmenuorder = [] for (let i = 0; i < childnodes.length; i++) { - const element = childnodes[i]; - newdefaultmenuorder.push((element as HTMLElement).dataset.key); - browser.storage.local.set({ defaultmenuorder: newdefaultmenuorder }); + const element = childnodes[i] + newdefaultmenuorder.push((element as HTMLElement).dataset.key) + browser.storage.local.set({ defaultmenuorder: newdefaultmenuorder }) } } - let childnodes = menu!.firstChild!.childNodes; + let childnodes = menu!.firstChild!.childNodes if (result.defaultmenuorder.length != childnodes.length) { for (let i = 0; i < childnodes.length; i++) { - const element = childnodes[i]; + const element = childnodes[i] if (!result.defaultmenuorder.indexOf((element as HTMLElement).dataset.key)) { - let newdefaultmenuorder = result.defaultmenuorder; - newdefaultmenuorder.push((element as HTMLElement).dataset.key); - browser.storage.local.set({ defaultmenuorder: newdefaultmenuorder }); + let newdefaultmenuorder = result.defaultmenuorder + newdefaultmenuorder.push((element as HTMLElement).dataset.key) + browser.storage.local.set({ defaultmenuorder: newdefaultmenuorder }) } } } - MenuOptionsOpen = true; + MenuOptionsOpen = true - let cover = document.createElement('div'); - cover.classList.add('notMenuCover'); - menu!.style.zIndex = '20'; - menu!.style.setProperty('--menuHidden', 'flex'); - container!.append(cover); + let cover = document.createElement('div') + cover.classList.add('notMenuCover') + menu!.style.zIndex = '20' + menu!.style.setProperty('--menuHidden', 'flex') + container!.append(cover) - let menusettings = document.createElement('div'); - menusettings.classList.add('editmenuoption-container'); + let menusettings = document.createElement('div') + menusettings.classList.add('editmenuoption-container') - let defaultbutton = document.createElement('div'); - defaultbutton.classList.add('editmenuoption'); - defaultbutton.innerText = 'Restore Default'; - defaultbutton.id = 'restoredefaultoption'; + let defaultbutton = document.createElement('div') + defaultbutton.classList.add('editmenuoption') + defaultbutton.innerText = 'Restore Default' + defaultbutton.id = 'restoredefaultoption' - let savebutton = document.createElement('div'); - savebutton.classList.add('editmenuoption'); - savebutton.innerText = 'Save'; - savebutton.id = 'restoredefaultoption'; + let savebutton = document.createElement('div') + savebutton.classList.add('editmenuoption') + savebutton.innerText = 'Save' + savebutton.id = 'restoredefaultoption' - menusettings.appendChild(defaultbutton); - menusettings.appendChild(savebutton); + menusettings.appendChild(defaultbutton) + menusettings.appendChild(savebutton) - menu!.appendChild(menusettings); + menu!.appendChild(menusettings) - let ListItems = menu!.firstChild!.childNodes; + let ListItems = menu!.firstChild!.childNodes for (let i = 0; i < ListItems.length; i++) { - const element1 = ListItems[i]; + const element1 = ListItems[i] const element = element1 as HTMLElement (element as HTMLElement).classList.add('draggable'); @@ -944,9 +915,9 @@ export function OpenMenuOptions() { } let MenuItemToggle = stringToHTML( - `
    `, + `
    ` ).firstChild; - (element as HTMLElement).append(MenuItemToggle!); + (element as HTMLElement).append(MenuItemToggle!) if (!element.dataset.betterseqta) { const a = document.createElement('section') @@ -958,98 +929,98 @@ export function OpenMenuOptions() { } if (Object.keys(result.menuitems).length == 0) { - menubuttons = menu!.firstChild!.childNodes; - var menuItems = {}; + menubuttons = menu!.firstChild!.childNodes + var menuItems = {} for (var i = 0; i < menubuttons.length; i++) { - var id = (menubuttons[i] as HTMLElement).dataset.key; - const element: any = {}; + var id = (menubuttons[i] as HTMLElement).dataset.key + const element: any = {} element.toggle = true; (menuItems[id as keyof typeof menuItems] as any) = element; } - browser.storage.local.set({ menuitems: menuItems }); + browser.storage.local.set({ menuitems: menuItems }) } - var menubuttons: any = document.getElementsByClassName('menuitem'); + var menubuttons: any = document.getElementsByClassName('menuitem') const result1 = browser.storage.local.get(['menuitems']) function open (result: any) { - var menuItems = result.menuitems; - let buttons = document.getElementsByClassName('menuitem'); + var menuItems = result.menuitems + let buttons = document.getElementsByClassName('menuitem') for (var i = 0; i < buttons.length; i++) { - var id = buttons[i].id; + var id = buttons[i].id if (menuItems[id]) { - (buttons[i] as HTMLInputElement).checked = menuItems[id].toggle; + (buttons[i] as HTMLInputElement).checked = menuItems[id].toggle } if (!menuItems[id]) { - (buttons[i] as HTMLInputElement).checked = true; + (buttons[i] as HTMLInputElement).checked = true } } } - result1.then(open, onError); + result1.then(open, onError) try { - var el = document.querySelector('#menu > ul'); + var el = document.querySelector('#menu > ul') var sortable = Sortable.create((el as HTMLElement), { draggable: '.draggable', dataIdAttr: 'data-key', animation: 150, easing: "cubic-bezier(.5,0,.5,1)", onEnd: function () { - saveNewOrder(sortable); + saveNewOrder(sortable) }, }); } catch (err) { - console.log(err); + console.log(err) } function changeDisplayProperty(element: any) { if (!element.checked) { - element.parentNode.parentNode.style.display = 'var(--menuHidden)'; + element.parentNode.parentNode.style.display = 'var(--menuHidden)' } if (element.checked) { element.parentNode.parentNode.style.setProperty( 'display', 'flex', 'important', - ); + ) } } function StoreMenuSettings() { - const menuItems: any = {}; + const menuItems: any = {} const menubuttons = menu!.firstChild!.childNodes const button = document.getElementsByClassName('menuitem') for (let i = 0; i < menubuttons.length; i++) { - const id = (menubuttons[i] as HTMLElement).dataset.key; - const element: any = {}; + const id = (menubuttons[i] as HTMLElement).dataset.key + const element: any = {} element.toggle = (button[i] as HTMLInputElement).checked - menuItems[id as keyof typeof menuItems] = element; + menuItems[id as keyof typeof menuItems] = element } browser.storage.local.set({ menuitems: menuItems }) } for (let i = 0; i < menubuttons.length; i++) { - const element = menubuttons[i]; + const element = menubuttons[i] element.addEventListener('change', () => { - element.parentElement.parentElement.getAttribute('data-key'); - StoreMenuSettings(); - changeDisplayProperty(element); - }); + element.parentElement.parentElement.getAttribute('data-key') + StoreMenuSettings() + changeDisplayProperty(element) + }) } function closeAll() { - console.log("Closing!"); - ListItems = menu!.firstChild!.childNodes; - menusettings.remove(); - cover.remove(); - MenuOptionsOpen = false; - menu!.style.setProperty('--menuHidden', 'none'); + console.log("Closing!") + ListItems = menu!.firstChild!.childNodes + menusettings.remove() + cover.remove() + MenuOptionsOpen = false + menu!.style.setProperty('--menuHidden', 'none') for (let i = 0; i < ListItems.length; i++) { - const element1 = ListItems[i]; + const element1 = ListItems[i] const element = element1 as HTMLElement - element.classList.remove('draggable'); - element.setAttribute('draggable', 'false'); + element.classList.remove('draggable') + element.setAttribute('draggable', 'false') if (!element.dataset.betterseqta) { @@ -1061,96 +1032,107 @@ export function OpenMenuOptions() { } } - let switches = menu!.querySelectorAll('.onoffswitch'); + let switches = menu!.querySelectorAll('.onoffswitch') for (let i = 0; i < switches.length; i++) { - switches[i].remove(); + switches[i].remove() } } - cover.addEventListener('click', closeAll); - savebutton.addEventListener('click', closeAll); + cover.addEventListener('click', closeAll) + savebutton.addEventListener('click', closeAll) defaultbutton.addEventListener('click', function () { const result = browser.storage.local.get() function open (response: any) { - const options = response.defaultmenuorder; - browser.storage.local.set({ menuorder: options }); - ChangeMenuItemPositions(options); + const options = response.defaultmenuorder + browser.storage.local.set({ menuorder: options }) + ChangeMenuItemPositions(options) for (let i = 0; i < menubuttons.length; i++) { - const element = menubuttons[i]; - element.checked = true; + const element = menubuttons[i] + element.checked = true element.parentNode.parentNode.style.setProperty( 'display', 'flex', 'important', - ); + ) } - saveNewOrder(sortable); + saveNewOrder(sortable) } result.then(open, onError) - }); + }) } result.then(open, onError) } +function saveNewOrder(sortable: any) { + var order = sortable.toArray() + browser.storage.local.set({ menuorder: order }) +} + +function cloneAttributes(target: any, source: any) { + [...source.attributes].forEach((attr) => { + target.setAttribute(attr.nodeName, attr.nodeValue) + }) +} + function ReplaceMenuSVG(element: HTMLElement, svg: string) { - let item = element.firstChild as HTMLElement; - item!.firstChild!.remove(); + let item = element.firstChild as HTMLElement + item!.firstChild!.remove() if (element.dataset.key == 'messages') { - (element!.firstChild! as HTMLElement).innerText! = 'Direct Messages'; + (element!.firstChild! as HTMLElement).innerText! = 'Direct Messages' } - let newsvg = stringToHTML(svg).firstChild; - item.insertBefore((newsvg as Node), item.firstChild); + let newsvg = stringToHTML(svg).firstChild + item.insertBefore((newsvg as Node), item.firstChild) } async function AddBetterSEQTAElements(toggle: any) { - const code = document.getElementsByClassName('code')[0]; + const code = document.getElementsByClassName('code')[0] // Replaces students code with the version of BetterSEQTA if (code != null) { if (!code.innerHTML.includes('BetterSEQTA')) { - UserInitalCode = code.innerHTML; - code.innerHTML = `BetterSEQTA v${browser.runtime.getManifest().version}`; - code.setAttribute('data-hover', 'Click for user code'); + UserInitalCode = code.innerHTML + code.innerHTML = `BetterSEQTA v${browser.runtime.getManifest().version}` + code.setAttribute('data-hover', 'Click for user code') code.addEventListener('click', function () { - var code = document.getElementsByClassName('code')[0]; + var code = document.getElementsByClassName('code')[0] if (code.innerHTML.includes('BetterSEQTA')) { - code.innerHTML = UserInitalCode; - code.setAttribute('data-hover', 'Click for BetterSEQTA version'); + code.innerHTML = UserInitalCode + code.setAttribute('data-hover', 'Click for BetterSEQTA version') } else { code.innerHTML = `BetterSEQTA v${ browser.runtime.getManifest().version - }`; - code.setAttribute('data-hover', 'Click for user code'); + }` + code.setAttribute('data-hover', 'Click for user code') } - }); + }) if (toggle) { // Creates Home menu button and appends it as the first child of the list - const result = await browser.storage.local.get(); + const result = await browser.storage.local.get() - animbkEnable(result); - updateBgDurations(result); + animbkEnable(result) + updateBgDurations(result) - DarkMode = result.DarkMode; + DarkMode = result.DarkMode if (DarkMode) { - document.documentElement.classList.add('dark'); + document.documentElement.classList.add('dark') } - const container = document.getElementById('content')!; + const container = document.getElementById('content')! const div = document.createElement('div') - div.classList.add('titlebar'); - container.append(div); - const NewButton = stringToHTML('
  • '); + div.classList.add('titlebar') + container.append(div) + const NewButton = stringToHTML('
  • ') - const menu = document.getElementById('menu')!; - const List = menu.firstChild! as HTMLElement; + const menu = document.getElementById('menu')! + const List = menu.firstChild! as HTMLElement if (NewButton.firstChild) { - List.insertBefore(NewButton.firstChild, List.firstChild); + List.insertBefore(NewButton.firstChild, List.firstChild) } try { @@ -1165,25 +1147,25 @@ async function AddBetterSEQTAElements(toggle: any) { query: null, redirect_url: location.origin, }), - }); + }) // Parse the JSON response and wait for it - const responseData = await response.json(); - let info = responseData.payload; + const responseData = await response.json() + let info = responseData.payload // Manipulate the DOM as needed - const titlebar = document.getElementsByClassName('titlebar')[0]; + const titlebar = document.getElementsByClassName('titlebar')[0] const userInfo = stringToHTML( '
    ', - ).firstChild; - titlebar.append(userInfo!); + ).firstChild + titlebar.append(userInfo!) - const userinfo = stringToHTML(`

    ${info.userDesc}

    ${UserInitalCode}

    `).firstChild; - titlebar.append(userinfo!); + const userinfo = stringToHTML(`

    ${info.userDesc}

    ${UserInitalCode}

    `).firstChild + titlebar.append(userinfo!) - var logoutbutton = document.getElementsByClassName('logout')[0]; - var userInfosvgdiv = document.getElementById('logouttooltip')!; - userInfosvgdiv.appendChild(logoutbutton); + var logoutbutton = document.getElementsByClassName('logout')[0] + var userInfosvgdiv = document.getElementById('logouttooltip')! + userInfosvgdiv.appendChild(logoutbutton) // Await the fetch response const peopleResponse = await fetch(`${location.origin}/seqta/student/load/message/people`, { @@ -1192,212 +1174,213 @@ async function AddBetterSEQTAElements(toggle: any) { 'Content-Type': 'application/json; charset=utf-8', }, body: JSON.stringify({ mode: 'student' }), - }); + }) // Await the JSON parsing of the response - const peopleResponseData = await peopleResponse.json(); - let students = peopleResponseData.payload; + const peopleResponseData = await peopleResponse.json() + let students = peopleResponseData.payload // Process the students data var index = students.findIndex(function (person: any) { return ( person.firstname == info.userDesc.split(' ')[0] && person.surname == info.userDesc.split(' ')[1] - ); - }); + ) + }) - let houseelement1 = document.getElementsByClassName('userInfohouse')[0]; + let houseelement1 = document.getElementsByClassName('userInfohouse')[0] const houseelement = houseelement1 as HTMLElement if (students[index]?.house) { - (houseelement as HTMLElement).style.background = students[index].house_colour; - try { - let colorresult = GetThresholdOfColor(students[index]?.house_colour); - - houseelement.style.color = colorresult && colorresult > 300 ? 'black' : 'white'; - houseelement.innerText = students[index].year + students[index].house; - } catch (error) { - houseelement.innerText = students[index].house; + if (students[index]?.house_colour) { + houseelement.style.background = students[index].house_colour + try { + let colorresult = GetThresholdOfColor(students[index]?.house_colour) + + houseelement.style.color = colorresult && colorresult > 300 ? 'black' : 'white' + houseelement.innerText = students[index].year + students[index].house + } catch (error) { + houseelement.innerText = students[index].house + } } } else { - houseelement.innerText = students[index].year; + houseelement.innerText = students[index].year } } catch (error) { - console.error('Error fetching and processing student data:', error); + console.error('Error fetching and processing student data:', error) } - const NewsButtonStr = '
  • '; - const NewsButton = stringToHTML(NewsButtonStr); - List!.appendChild(NewsButton.firstChild!); + const NewsButtonStr = '
  • ' + const NewsButton = stringToHTML(NewsButtonStr) + List!.appendChild(NewsButton.firstChild!) - let a = document.createElement('div'); - a.classList.add('icon-cover'); - a.id = 'icon-cover'; - menu!.appendChild(a); + let a = document.createElement('div') + a.classList.add('icon-cover') + a.id = 'icon-cover' + menu!.appendChild(a) - const menuCover = document.querySelector('#icon-cover'); + const menuCover = document.querySelector('#icon-cover') menuCover!.addEventListener('click', function () { - location.href = '../#?page=/home'; - SendHomePage(); + location.href = '../#?page=/home' + loadHomePage(); (document! .getElementById('menu')! - .firstChild! as HTMLElement).classList.remove('noscroll'); - }); + .firstChild! as HTMLElement).classList.remove('noscroll') + }) // Creates the home container when the menu button is pressed - const homebutton = document.getElementById('homebutton'); + const homebutton = document.getElementById('homebutton') homebutton!.addEventListener('click', function () { if (!MenuOptionsOpen) { - SendHomePage(); + loadHomePage() } - }); + }) // Creates the news container when the menu button is pressed - const newsbutton = document.getElementById('newsbutton'); + const newsbutton = document.getElementById('newsbutton') newsbutton!.addEventListener('click', function () { if (!MenuOptionsOpen) { - SendNewsPage(); + SendNewsPage() } - }); + }) } - appendBackgroundToUI(); - addExtensionSettings(); + appendBackgroundToUI() + addExtensionSettings() // If betterSEQTA+ is enabled, run the code if (toggle) { // Creates settings and dashboard buttons next to alerts let SettingsButton = stringToHTML( '', - ); - let ContentDiv = document.getElementById('content'); - ContentDiv!.append(SettingsButton.firstChild!); + ) + let ContentDiv = document.getElementById('content') + ContentDiv!.append(SettingsButton.firstChild!) const result: any = await new Promise(resolve => { - const result = browser.storage.local.get(); + const result = browser.storage.local.get() result.then(resolve, onError) - }); + }) - const DarkMode = result!.DarkMode; - const tooltipString = GetLightDarkModeString(DarkMode); + const DarkMode = result!.DarkMode + const tooltipString = GetLightDarkModeString(DarkMode) const svgContent = DarkMode ? '' : - ''; + '' const LightDarkModeButton = stringToHTML(` - `); + `) - ContentDiv!.append(LightDarkModeButton.firstChild!); + ContentDiv!.append(LightDarkModeButton.firstChild!) - updateAllColors(DarkMode, result.selectedColor); + updateAllColors(DarkMode, result.selectedColor) document.getElementById('LightDarkModeButton')!.addEventListener('click', async () => { const result: any = await new Promise(resolve => { - const result = browser.storage.local.get(); + const result = browser.storage.local.get() result.then(resolve, onError) - }); + }) - const newDarkMode = !result!.DarkMode; - browser.storage.local.set({ DarkMode: newDarkMode }); + const newDarkMode = !result!.DarkMode + browser.storage.local.set({ DarkMode: newDarkMode }) - updateAllColors(newDarkMode, result.selectedColor); + updateAllColors(newDarkMode, result.selectedColor) - const darklightText = document.getElementById('darklighttooliptext'); - darklightText!.innerText = GetLightDarkModeString(newDarkMode); - }); + const darklightText = document.getElementById('darklighttooliptext') + darklightText!.innerText = GetLightDarkModeString(newDarkMode) + }) // Locate the menuToggle element - const menuToggle = document.getElementById('menuToggle'); - menuToggle!.innerHTML = ''; + const menuToggle = document.getElementById('menuToggle') + menuToggle!.innerHTML = '' // Create three divs to act as lines of the hamburger icon for (let i = 0; i < 3; i++) { - const line = document.createElement('div'); - line.className = 'hamburger-line'; - menuToggle!.appendChild(line); + const line = document.createElement('div') + line.className = 'hamburger-line' + menuToggle!.appendChild(line) } } else { // Creates settings and dashboard buttons next to alerts let SettingsButton = stringToHTML( '', - ); - let ContentDiv = document.getElementById('content'); - ContentDiv!.append(SettingsButton.firstChild!); + ) + let ContentDiv = document.getElementById('content') + ContentDiv!.append(SettingsButton.firstChild!) } - var AddedSettings = document.getElementById('AddedSettings'); - var extensionPopup = document.getElementById('ExtensionPopup'); + var AddedSettings = document.getElementById('AddedSettings') + var extensionPopup = document.getElementById('ExtensionPopup') AddedSettings!.addEventListener('click', function () { if (SettingsClicked) { - extensionPopup!.classList.add('hide'); + extensionPopup!.classList.add('hide') animate( '#ExtensionPopup', { opacity: [1, 0], scale: [1, 0] }, { easing: spring({ stiffness: 220, damping: 18 }) } ); - (document.getElementById('ExtensionIframe')! as HTMLIFrameElement).contentWindow!.postMessage('popupClosed', '*'); + (document.getElementById('ExtensionIframe')! as HTMLIFrameElement).contentWindow!.postMessage('popupClosed', '*') SettingsClicked = false; } else { - extensionPopup!.classList.remove('hide'); + extensionPopup!.classList.remove('hide') animate( '#ExtensionPopup', { opacity: [0, 1], scale: [0, 1] }, { easing: spring({ stiffness: 260, damping: 24 }) } ) - SettingsClicked = true; + SettingsClicked = true } - }); + }) } } } - function GetLightDarkModeString(darkmodetoggle: boolean) { - let tooltipstring; + let tooltipstring if (darkmodetoggle) { - tooltipstring = 'Switch to light theme'; + tooltipstring = 'Switch to light theme' } else { - tooltipstring = 'Switch to dark theme'; + tooltipstring = 'Switch to dark theme' } - return tooltipstring; + return tooltipstring } function CheckCurrentLesson(lesson: any, num: number) { - var startTime = lesson.from; - var endTime = lesson.until; + var startTime = lesson.from + var endTime = lesson.until // Gets current time - let currentDate = new Date(); + let currentDate = new Date() // Takes start time of current lesson and makes it into a Date function for comparison - let startDate = new Date(currentDate.getTime()); - startDate.setHours(startTime.split(':')[0]); - startDate.setMinutes(startTime.split(':')[1]); - startDate.setSeconds(parseInt('00')); + let startDate = new Date(currentDate.getTime()) + startDate.setHours(startTime.split(':')[0]) + startDate.setMinutes(startTime.split(':')[1]) + startDate.setSeconds(parseInt('00')) // Takes end time of current lesson and makes it into a Date function for comparison - let endDate = new Date(currentDate.getTime()); - endDate.setHours(endTime.split(':')[0]); - endDate.setMinutes(endTime.split(':')[1]); - endDate.setSeconds(parseInt('00')); + let endDate = new Date(currentDate.getTime()) + endDate.setHours(endTime.split(':')[0]) + endDate.setMinutes(endTime.split(':')[1]) + endDate.setSeconds(parseInt('00')) // Gets the difference between the start time and current time - var difference = startDate.getTime() - currentDate.getTime(); + var difference = startDate.getTime() - currentDate.getTime() // Converts the difference into minutes - var minutes = Math.floor(difference / 1000 / 60); + var minutes = Math.floor(difference / 1000 / 60) // Checks if current time is between the start time and end time of current tested lesson - let valid = startDate < currentDate && endDate > currentDate; + let valid = startDate < currentDate && endDate > currentDate - let id = lesson.code + num; - const date = new Date(); + let id = lesson.code + num + const date = new Date() - var elementA = document.getElementById(id); + var elementA = document.getElementById(id) if (!elementA) { - clearInterval(LessonInterval); + clearInterval(LessonInterval) } else { if ( currentSelectedDate.toLocaleDateString('en-au') == @@ -1405,11 +1388,11 @@ function CheckCurrentLesson(lesson: any, num: number) { ) { if (valid) { // Apply the activelesson class to increase the box-shadow of current lesson - elementA.classList.add('activelesson'); + elementA.classList.add('activelesson') } else { // Removes the activelesson class to ensure only the active lesson have the class if (elementA != null) { - elementA.classList.remove('activelesson'); + elementA.classList.remove('activelesson') } } } @@ -1422,7 +1405,7 @@ function CheckCurrentLesson(lesson: any, num: number) { if (result.lessonalert) { // Checks if notifications are supported if (!window.Notification) { - console.log('Browser does not support notifications.'); + console.log('Browser does not support notifications.') } else { // check if permission is already granted if (Notification.permission === 'granted') { @@ -1434,7 +1417,7 @@ function CheckCurrentLesson(lesson: any, num: number) { lesson.room + ' \nTeacher: ' + lesson.staff, - }); + }) } else { // request permission from user Notification.requestPermission() @@ -1449,14 +1432,14 @@ function CheckCurrentLesson(lesson: any, num: number) { lesson.room + ' \nTeacher: ' + lesson.staff, - }); + }) } else { - console.log('User blocked notifications.'); + console.log('User blocked notifications.') } }) .catch(function (err) { - console.error(err); - }); + console.error(err) + }) } } } @@ -1467,35 +1450,35 @@ function CheckCurrentLesson(lesson: any, num: number) { export function GetThresholdOfColor(color: any) { // Case-insensitive regular expression for matching RGBA colors - const rgbaRegex = /rgba?\(([^)]+)\)/gi; + const rgbaRegex = /rgba?\(([^)]+)\)/gi // Check if the color string is a gradient (linear or radial) if (color.includes('gradient')) { - let gradientThresholds = []; + let gradientThresholds = [] // Find and replace all instances of RGBA in the gradient - let match; + let match while ((match = rgbaRegex.exec(color)) !== null) { // Extract the individual components (r, g, b, a) - const rgbaString = match[1]; - const [r, g, b] = rgbaString.split(',').map(str => str.trim()); + const rgbaString = match[1] + const [r, g, b] = rgbaString.split(',').map(str => str.trim()) // Compute the threshold using your existing algorithm - const threshold = Math.sqrt(parseInt(r) ** 2 + parseInt(g) ** 2 + parseInt(b) ** 2); + const threshold = Math.sqrt(parseInt(r) ** 2 + parseInt(g) ** 2 + parseInt(b) ** 2) // Store the computed threshold - gradientThresholds.push(threshold); + gradientThresholds.push(threshold) } // Calculate the average threshold - const averageThreshold = gradientThresholds.reduce((acc, val) => acc + val, 0) / gradientThresholds.length; + const averageThreshold = gradientThresholds.reduce((acc, val) => acc + val, 0) / gradientThresholds.length - return averageThreshold; + return averageThreshold } else { // Handle the color as a simple RGBA (or hex, or whatever the Color library supports) - const rgb = Color.rgb(color).object(); - return Math.sqrt(rgb.r ** 2 + rgb.g ** 2 + rgb.b ** 2); + const rgb = Color.rgb(color).object() + return Math.sqrt(rgb.r ** 2 + rgb.g ** 2 + rgb.b ** 2) } } @@ -1504,24 +1487,24 @@ function CheckCurrentLessonAll(lessons: any) { LessonInterval = setInterval( function () { for (let i = 0; i < lessons.length; i++) { - CheckCurrentLesson(lessons[i], i + 1); + CheckCurrentLesson(lessons[i], i + 1) } }.bind(lessons), 60000, - ); + ) } // Helper function to build the assessment URL function buildAssessmentURL(programmeID: any, metaID: any, itemID = '') { - const base = '../#?page=/assessments/'; - return itemID ? `${base}${programmeID}:${metaID}&item=${itemID}` : `${base}${programmeID}:${metaID}`; + const base = '../#?page=/assessments/' + return itemID ? `${base}${programmeID}:${metaID}&item=${itemID}` : `${base}${programmeID}:${metaID}` } // Function to create a lesson div element from a lesson object function makeLessonDiv(lesson: any, num: number) { - if (!lesson) throw new Error('No lesson provided.'); + if (!lesson) throw new Error('No lesson provided.') - const { code, colour, description, staff, room, from, until, attendanceTitle, programmeID, metaID, assessments } = lesson; + const { code, colour, description, staff, room, from, until, attendanceTitle, programmeID, metaID, assessments } = lesson // Construct the base lesson string with default values using ternary operators let lessonString = ` @@ -1531,21 +1514,21 @@ function makeLessonDiv(lesson: any, num: number) {

    ${room || 'Unknown'}

    ${from || 'Unknown'} - ${until || 'Unknown'}

    ${attendanceTitle || 'Unknown'}
    - `; + ` // Add buttons for assessments and courses if applicable if (programmeID !== 0) { lessonString += `
    ${assessmentsicon}
    ${coursesicon}
    - `; + ` } // Add assessments if they exist if (assessments && assessments.length > 0) { const assessmentString = assessments.map((element: any) => `

    ${element.title}

    ` - ).join(''); + ).join('') lessonString += `
    @@ -1554,113 +1537,111 @@ function makeLessonDiv(lesson: any, num: number) {
    ${assessmentString}
    - `; + ` } - lessonString += '
    '; + lessonString += '
    ' - return stringToHTML(lessonString); + return stringToHTML(lessonString) } function CheckUnmarkedAttendance(lessonattendance: any) { if (lessonattendance) { - var lesson = lessonattendance.label; + var lesson = lessonattendance.label } else { - lesson = ' '; + lesson = ' ' } - return lesson; + return lesson } function callHomeTimetable(date: string, change?: any) { // Creates a HTTP Post Request to the SEQTA page for the students timetable - var xhr = new XMLHttpRequest(); - xhr.open('POST', `${location.origin}/seqta/student/load/timetable?`, true); + var xhr = new XMLHttpRequest() + xhr.open('POST', `${location.origin}/seqta/student/load/timetable?`, true) // Sets the response type to json - xhr.setRequestHeader('Content-Type', 'application/json; charset=utf-8'); + xhr.setRequestHeader('Content-Type', 'application/json; charset=utf-8') xhr.onreadystatechange = function () { // Once the response is ready if (xhr.readyState === 4) { - var serverResponse = JSON.parse(xhr.response); - let lessonArray: Array = []; - const DayContainer = document.getElementById('day-container')!; + var serverResponse = JSON.parse(xhr.response) + let lessonArray: Array = [] + const DayContainer = document.getElementById('day-container')! // If items in response: if (serverResponse.payload.items.length > 0) { if (DayContainer.innerText || change) { for (let i = 0; i < serverResponse.payload.items.length; i++) { - lessonArray.push(serverResponse.payload.items[i]); + lessonArray.push(serverResponse.payload.items[i]) } lessonArray.sort(function (a, b) { - return a.from.localeCompare(b.from); - }); + return a.from.localeCompare(b.from) + }) // If items in the response, set each corresponding value into divs // lessonArray = lessonArray.splice(1) GetLessonColours().then((colours) => { - let subjects = colours; + let subjects = colours for (let i = 0; i < lessonArray.length; i++) { - let subjectname = `timetable.subject.colour.${lessonArray[i].code}`; + let subjectname = `timetable.subject.colour.${lessonArray[i].code}` let subject = subjects.find( (element: any) => element.name === subjectname, - ); + ) if (!subject) { - lessonArray[i].colour = '--item-colour: #8e8e8e;'; + lessonArray[i].colour = '--item-colour: #8e8e8e;' } else { - lessonArray[i].colour = `--item-colour: ${subject.value};`; - let result = GetThresholdOfColor(subject.value); + lessonArray[i].colour = `--item-colour: ${subject.value};` + let result = GetThresholdOfColor(subject.value) if (result > 300) { - lessonArray[i].invert = true; + lessonArray[i].invert = true } } // Removes seconds from the start and end times - lessonArray[i].from = lessonArray[i].from.substring(0, 5); - lessonArray[i].until = lessonArray[i].until.substring(0, 5); + lessonArray[i].from = lessonArray[i].from.substring(0, 5) + lessonArray[i].until = lessonArray[i].until.substring(0, 5) // Checks if attendance is unmarked, and sets the string to " ". lessonArray[i].attendanceTitle = CheckUnmarkedAttendance( lessonArray[i].attendance, - ); + ) } // If on home page, apply each lesson to HTML with information in each div - DayContainer.innerText = ''; + DayContainer.innerText = '' for (let i = 0; i < lessonArray.length; i++) { - var div = makeLessonDiv(lessonArray[i], i + 1); + var div = makeLessonDiv(lessonArray[i], i + 1) // Append each of the lessons into the day-container if (lessonArray[i].invert) { const div1 = div.firstChild! as HTMLElement - div1.classList.add('day-inverted'); + div1.classList.add('day-inverted') } - DayContainer.append(div.firstChild as HTMLElement); + DayContainer.append(div.firstChild as HTMLElement) } - const today = new Date(); + const today = new Date() if (currentSelectedDate.getDate() == today.getDate()) { for (let i = 0; i < lessonArray.length; i++) { - CheckCurrentLesson(lessonArray[i], i + 1); + CheckCurrentLesson(lessonArray[i], i + 1) } // For each lesson, check the start and end times - CheckCurrentLessonAll(lessonArray); + CheckCurrentLessonAll(lessonArray) } - }); + }) } } else { - if (!DayContainer.innerText || change) { - DayContainer.innerText = ''; - var dummyDay = document.createElement('div'); - dummyDay.classList.add('day-empty'); - let img = document.createElement('img'); - img.src = browser.runtime.getURL('icons/betterseqta-light-icon.png'); - let text = document.createElement('p'); - text.innerText = 'No lessons available.'; - dummyDay.append(img); - dummyDay.append(text); - DayContainer.append(dummyDay); - } + DayContainer.innerHTML = '' + var dummyDay = document.createElement('div') + dummyDay.classList.add('day-empty') + let img = document.createElement('img') + img.src = LogoLight + let text = document.createElement('p') + text.innerText = 'No lessons available.' + dummyDay.append(img) + dummyDay.append(text) + DayContainer.append(dummyDay) } } - }; + } xhr.send( JSON.stringify({ // Information sent to SEQTA page as a request with the dates and student number @@ -1669,7 +1650,7 @@ function callHomeTimetable(date: string, change?: any) { // Funny number student: 69, }), - ); + ) } function GetUpcomingAssessments() { @@ -1679,11 +1660,11 @@ function GetUpcomingAssessments() { 'Content-Type': 'application/json; charset=utf-8', }, body: JSON.stringify({ student: 69 }), - }); + }) return func .then((result) => result.json()) - .then((response) => response.payload); + .then((response) => response.payload) } async function GetActiveClasses() { @@ -1692,111 +1673,111 @@ async function GetActiveClasses() { method: 'POST', headers: { 'Content-Type': 'application/json; charset=utf-8' }, body: JSON.stringify({}) - }); + }) if (!response.ok) { - throw new Error(`HTTP error! Status: ${response.status}`); + throw new Error(`HTTP error! Status: ${response.status}`) } - const data = await response.json(); - return data.payload; + const data = await response.json() + return data.payload } catch (error) { - console.error('Oops! There was a problem fetching active classes:', error); + console.error('Oops! There was a problem fetching active classes:', error) } } function comparedate(obj1: any, obj2: any) { if (obj1.date < obj2.date) { - return -1; + return -1 } if (obj1.date > obj2.date) { - return 1; + return 1 } - return 0; + return 0 } function CreateElement(type: string, class_?: any, id?: any, innerText?: string, innerHTML?: string, style?: string) { - let element = document.createElement(type); + let element = document.createElement(type) if (class_ !== undefined) { - element.classList.add(class_); + element.classList.add(class_) } if (id !== undefined) { - element.id = id; + element.id = id } if (innerText !== undefined) { - element.innerText = innerText; + element.innerText = innerText } if (innerHTML !== undefined) { - element.innerHTML = innerHTML; + element.innerHTML = innerHTML } if (style !== undefined) { - element.style.cssText = style; + element.style.cssText = style } - return element; + return element } function createAssessmentDateDiv(date: string, value: any, datecase?: any) { - var options = { weekday: 'long' as 'long', month: 'long' as 'long', day: 'numeric' as 'numeric' }; - const FormattedDate = new Date(date); + var options = { weekday: 'long' as 'long', month: 'long' as 'long', day: 'numeric' as 'numeric' } + const FormattedDate = new Date(date) - const assessments = value.assessments; - const container = value.div; + const assessments = value.assessments + const container = value.div - let DateTitleDiv = document.createElement('div'); - DateTitleDiv.classList.add('upcoming-date-title'); + let DateTitleDiv = document.createElement('div') + DateTitleDiv.classList.add('upcoming-date-title') if (datecase) { - let datetitle = document.createElement('h5'); - datetitle.classList.add('upcoming-special-day'); - datetitle.innerText = datecase; - DateTitleDiv.append(datetitle); - container.setAttribute('data-day', datecase); + let datetitle = document.createElement('h5') + datetitle.classList.add('upcoming-special-day') + datetitle.innerText = datecase + DateTitleDiv.append(datetitle) + container.setAttribute('data-day', datecase) } - let DateTitle = document.createElement('h5'); - DateTitle.innerText = FormattedDate.toLocaleDateString('en-AU', options); - DateTitleDiv.append(DateTitle); + let DateTitle = document.createElement('h5') + DateTitle.innerText = FormattedDate.toLocaleDateString('en-AU', options) + DateTitleDiv.append(DateTitle) - container.append(DateTitleDiv); + container.append(DateTitleDiv) - let assessmentContainer = document.createElement('div'); - assessmentContainer.classList.add('upcoming-date-assessments'); + let assessmentContainer = document.createElement('div') + assessmentContainer.classList.add('upcoming-date-assessments') for (let i = 0; i < assessments.length; i++) { - const element = assessments[i]; - let item = document.createElement('div'); - item.classList.add('upcoming-assessment'); - item.setAttribute('data-subject', element.code); - item.id = `assessment${element.id}`; + const element = assessments[i] + let item = document.createElement('div') + item.classList.add('upcoming-assessment') + item.setAttribute('data-subject', element.code) + item.id = `assessment${element.id}` - item.style.cssText = element.colour; + item.style.cssText = element.colour - let titlediv = document.createElement('div'); - titlediv.classList.add('upcoming-subject-title'); + let titlediv = document.createElement('div') + titlediv.classList.add('upcoming-subject-title') let titlesvg = stringToHTML(` - `).firstChild; - titlediv.append(titlesvg!); + `).firstChild + titlediv.append(titlesvg!) - let detailsdiv = document.createElement('div'); - detailsdiv.classList.add('upcoming-details'); - let detailstitle = document.createElement('h5'); - detailstitle.innerText = `${element.subject} assessment`; - let subject = document.createElement('p'); - subject.innerText = element.title; - subject.classList.add('upcoming-assessment-title'); + let detailsdiv = document.createElement('div') + detailsdiv.classList.add('upcoming-details') + let detailstitle = document.createElement('h5') + detailstitle.innerText = `${element.subject} assessment` + let subject = document.createElement('p') + subject.innerText = element.title + subject.classList.add('upcoming-assessment-title') subject.onclick = function () { document.querySelector('#menu ul')!.classList.add('noscroll'); - location.href = `../#?page=/assessments/${element.programmeID}:${element.metaclassID}&item=${element.id}`; - }; - detailsdiv.append(detailstitle); - detailsdiv.append(subject); + location.href = `../#?page=/assessments/${element.programmeID}:${element.metaclassID}&item=${element.id}` + } + detailsdiv.append(detailstitle) + detailsdiv.append(subject) - item.append(titlediv); - item.append(detailsdiv); - assessmentContainer.append(item); + item.append(titlediv) + item.append(detailsdiv) + assessmentContainer.append(item) fetch(`${location.origin}/seqta/student/assessment/submissions/get`, { method: 'POST', @@ -1812,22 +1793,22 @@ function createAssessmentDateDiv(date: string, value: any, datecase?: any) { .then((result) => result.json()) .then((response) => { if (response.payload.length > 0) { - const assessment = document.querySelector(`#assessment${element.id}`); + const assessment = document.querySelector(`#assessment${element.id}`) // ticksvg = stringToHTML(``).firstChild - // ticksvg.classList.add('upcoming-tick'); - // assessment.append(ticksvg); - let submittedtext = document.createElement('div'); - submittedtext.classList.add('upcoming-submittedtext'); - submittedtext.innerText = 'Submitted'; - assessment!.append(submittedtext); + // ticksvg.classList.add('upcoming-tick') + // assessment.append(ticksvg) + let submittedtext = document.createElement('div') + submittedtext.classList.add('upcoming-submittedtext') + submittedtext.innerText = 'Submitted' + assessment!.append(submittedtext) } - }); + }) } - container.append(assessmentContainer); + container.append(assessmentContainer) - return container; + return container } function CheckSpecialDay(date1: Date, date2: Date) { @@ -1836,227 +1817,227 @@ function CheckSpecialDay(date1: Date, date2: Date) { date1.getMonth() === date2.getMonth() && date1.getDate() - 1 === date2.getDate() ) { - return 'Yesterday'; + return 'Yesterday' } if ( date1.getFullYear() === date2.getFullYear() && date1.getMonth() === date2.getMonth() && date1.getDate() === date2.getDate() ) { - return 'Today'; + return 'Today' } if ( date1.getFullYear() === date2.getFullYear() && date1.getMonth() === date2.getMonth() && date1.getDate() + 1 === date2.getDate() ) { - return 'Tomorrow'; + return 'Tomorrow' } } function CreateSubjectFilter(subjectcode: any, itemcolour: string, checked: any) { - let label = CreateElement('label', 'upcoming-checkbox-container'); - label.innerText = subjectcode; - let input1 = CreateElement('input'); + let label = CreateElement('label', 'upcoming-checkbox-container') + label.innerText = subjectcode + let input1 = CreateElement('input') const input = input1 as HTMLInputElement - input.type = 'checkbox'; - input.checked = checked; - input.id = `filter-${subjectcode}`; - label.style.cssText = itemcolour; - let span = CreateElement('span', 'upcoming-checkmark'); - label.append(input); - label.append(span); + input.type = 'checkbox' + input.checked = checked + input.id = `filter-${subjectcode}` + label.style.cssText = itemcolour + let span = CreateElement('span', 'upcoming-checkmark') + label.append(input) + label.append(span) input.addEventListener('change', function (change) { const result = browser.storage.local.get() function open (storage: any) { - let filters = storage.subjectfilters; - let id = (change.target as HTMLInputElement)!.id.split('-')[1]; - filters[id] = (change.target as HTMLInputElement)!.checked; + let filters = storage.subjectfilters + let id = (change.target as HTMLInputElement)!.id.split('-')[1] + filters[id] = (change.target as HTMLInputElement)!.checked - browser.storage.local.set({ subjectfilters: filters }); + browser.storage.local.set({ subjectfilters: filters }) } result.then(open, onError) - }); + }) - return label; + return label } function CreateFilters(subjects: any) { const result = browser.storage.local.get() function open (result: any) { - let filteroptions = result.subjectfilters; + let filteroptions = result.subjectfilters - let filterdiv = document.querySelector('#upcoming-filters'); + let filterdiv = document.querySelector('#upcoming-filters') for (let i = 0; i < subjects.length; i++) { - const element = subjects[i]; + const element = subjects[i] // eslint-disable-next-line if (!Object.prototype.hasOwnProperty.call(filteroptions, element.code)) { - filteroptions[element.code] = true; - browser.storage.local.set({ subjectfilters: filteroptions }); + filteroptions[element.code] = true + browser.storage.local.set({ subjectfilters: filteroptions }) } let elementdiv = CreateSubjectFilter( element.code, element.colour, filteroptions[element.code], - ); + ) - filterdiv!.append(elementdiv); + filterdiv!.append(elementdiv) } } result.then(open, onError) } function CreateUpcomingSection(assessments: any, activeSubjects: any) { - let upcomingitemcontainer = document.querySelector('#upcoming-items'); - let overdueDates = []; - let upcomingDates = {}; + let upcomingitemcontainer = document.querySelector('#upcoming-items') + let overdueDates = [] + let upcomingDates = {} - // date = '2022/3/20'; - // var Today = new Date(date); + // date = '2022/3/20' + // var Today = new Date(date) - var Today = new Date(); + var Today = new Date() // Removes overdue assessments from the upcoming assessments array and pushes to overdue array for (let i = 0; i < assessments.length; i++) { - const element = assessments[i]; - let assessmentdue = new Date(element.due); + const element = assessments[i] + let assessmentdue = new Date(element.due) - CheckSpecialDay(Today, assessmentdue); + CheckSpecialDay(Today, assessmentdue) if (assessmentdue < Today) { if (!CheckSpecialDay(Today, assessmentdue)) { - overdueDates.push(element); - assessments.splice(i, 1); - i--; + overdueDates.push(element) + assessments.splice(i, 1) + i-- } } } - var TomorrowDate = new Date(); - TomorrowDate.setDate(TomorrowDate.getDate() + 1); + var TomorrowDate = new Date() + TomorrowDate.setDate(TomorrowDate.getDate() + 1) GetLessonColours().then((colours) => { - let subjects = colours; + let subjects = colours for (let i = 0; i < assessments.length; i++) { - let subjectname = `timetable.subject.colour.${assessments[i].code}`; + let subjectname = `timetable.subject.colour.${assessments[i].code}` - let subject = subjects.find((element: any) => element.name === subjectname); + let subject = subjects.find((element: any) => element.name === subjectname) if (!subject) { - assessments[i].colour = '--item-colour: #8e8e8e;'; + assessments[i].colour = '--item-colour: #8e8e8e;' } else { - assessments[i].colour = `--item-colour: ${subject.value};`; + assessments[i].colour = `--item-colour: ${subject.value};` GetThresholdOfColor(subject.value); // result (originally) result = GetThresholdOfColor } } for (let i = 0; i < activeSubjects.length; i++) { - const element = activeSubjects[i]; - let subjectname = `timetable.subject.colour.${element.code}`; - let colour = colours.find((element: any) => element.name === subjectname); + const element = activeSubjects[i] + let subjectname = `timetable.subject.colour.${element.code}` + let colour = colours.find((element: any) => element.name === subjectname) if (!colour) { - element.colour = '--item-colour: #8e8e8e;'; + element.colour = '--item-colour: #8e8e8e;' } else { - element.colour = `--item-colour: ${colour.value};`; - let result = GetThresholdOfColor(colour.value); + element.colour = `--item-colour: ${colour.value};` + let result = GetThresholdOfColor(colour.value) if (result > 300) { - element.invert = true; + element.invert = true } } } - CreateFilters(activeSubjects); + CreateFilters(activeSubjects) // @ts-ignore - let type; + let type // @ts-ignore - let class_; + let class_ for (let i = 0; i < assessments.length; i++) { - const element: any = assessments[i]; + const element: any = assessments[i] if (!upcomingDates[element.due as keyof typeof upcomingDates]) { - let dateObj: any = new Object(); + let dateObj: any = new Object() dateObj.div = CreateElement( // TODO: not sure whats going on here? // eslint-disable-next-line type = "div", // eslint-disable-next-line class_ = "upcoming-date-container", - ); - dateObj.assessments = []; + ) + dateObj.assessments = [] - dateObj = upcomingDates[element.due as keyof typeof upcomingDates] as any; + dateObj = upcomingDates[element.due as keyof typeof upcomingDates] as any } let assessmentDateDiv = upcomingDates[element.due as keyof typeof upcomingDates]; - (assessmentDateDiv as any).assessments.push(element); + (assessmentDateDiv as any).assessments.push(element) } for (var date in upcomingDates) { - let assessmentdue = new Date((upcomingDates[date as keyof typeof upcomingDates] as any).assessments[0].due); - let specialcase = CheckSpecialDay(Today, assessmentdue); - let assessmentDate; + let assessmentdue = new Date((upcomingDates[date as keyof typeof upcomingDates] as any).assessments[0].due) + let specialcase = CheckSpecialDay(Today, assessmentdue) + let assessmentDate if (specialcase) { - let datecase: string = specialcase!; + let datecase: string = specialcase! assessmentDate = createAssessmentDateDiv( date, upcomingDates[date as keyof typeof upcomingDates], // eslint-disable-next-line datecase, - ); + ) } else { - assessmentDate = createAssessmentDateDiv(date, upcomingDates[date as keyof typeof upcomingDates]); + assessmentDate = createAssessmentDateDiv(date, upcomingDates[date as keyof typeof upcomingDates]) } if (specialcase === 'Yesterday') { upcomingitemcontainer!.insertBefore( assessmentDate, upcomingitemcontainer!.firstChild, - ); + ) } else { - upcomingitemcontainer!.append(assessmentDate); + upcomingitemcontainer!.append(assessmentDate) } } const result = browser.storage.local.get() function open (result: any) { - FilterUpcomingAssessments(result.subjectfilters); + FilterUpcomingAssessments(result.subjectfilters) } result.then(open, onError) - }); + }) } function AddPlaceHolderToParent(parent: any, numberofassessments: any) { - let textcontainer = CreateElement('div', 'upcoming-blank'); - let textblank = CreateElement('p', 'upcoming-hiddenassessment'); - let s = ''; + let textcontainer = CreateElement('div', 'upcoming-blank') + let textblank = CreateElement('p', 'upcoming-hiddenassessment') + let s = '' if (numberofassessments > 1) { - s = 's'; + s = 's' } - textblank.innerText = `${numberofassessments} hidden assessment${s} due`; - textcontainer.append(textblank); - textcontainer.setAttribute('data-hidden', 'true'); + textblank.innerText = `${numberofassessments} hidden assessment${s} due` + textcontainer.append(textblank) + textcontainer.setAttribute('data-hidden', 'true') - parent.append(textcontainer); + parent.append(textcontainer) } function FilterUpcomingAssessments(subjectoptions: any) { for (var item in subjectoptions) { - let subjectdivs = document.querySelectorAll(`[data-subject="${item}"]`); + let subjectdivs = document.querySelectorAll(`[data-subject="${item}"]`) for (let i = 0; i < subjectdivs.length; i++) { - const element = subjectdivs[i]; + const element = subjectdivs[i] if (!subjectoptions[item]) { - element.classList.add('hidden'); + element.classList.add('hidden') } if (subjectoptions[item]) { - element.classList.remove('hidden'); + element.classList.remove('hidden') } - (element.parentNode! as HTMLElement).classList.remove('hidden'); + (element.parentNode! as HTMLElement).classList.remove('hidden') - let children = element.parentNode!.parentNode!.children; + let children = element.parentNode!.parentNode!.children for (let i = 0; i < children.length; i++) { - const element = children[i]; + const element = children[i] if (element.hasAttribute('data-hidden')) { - element.remove(); + element.remove() } } @@ -2066,16 +2047,16 @@ function FilterUpcomingAssessments(subjectoptions: any) { ) { if (element.parentNode!.querySelectorAll('.hidden').length > 0) { if (!(element.parentNode!.parentNode! as HTMLElement).hasAttribute('data-day')) { - (element.parentNode!.parentNode! as HTMLElement).classList.add('hidden'); + (element.parentNode!.parentNode! as HTMLElement).classList.add('hidden') } else { AddPlaceHolderToParent( element.parentNode!.parentNode, element.parentNode!.querySelectorAll('.hidden').length, - ); + ) } } } else { - (element.parentNode!.parentNode! as HTMLElement).classList.remove('hidden'); + (element.parentNode!.parentNode! as HTMLElement).classList.remove('hidden') } } } @@ -2083,9 +2064,9 @@ function FilterUpcomingAssessments(subjectoptions: any) { browser.storage.onChanged.addListener(function (changes) { if (changes.subjectfilters) { - FilterUpcomingAssessments(changes.subjectfilters.newValue); + FilterUpcomingAssessments(changes.subjectfilters.newValue) } -}); +}) async function GetLessonColours() { let func = fetch(`${location.origin}/seqta/student/load/prefs?`, { @@ -2094,20 +2075,20 @@ async function GetLessonColours() { 'Content-Type': 'application/json; charset=utf-8', }, body: JSON.stringify({ request: 'userPrefs', asArray: true, user: 69 }), - }); + }) return func .then((result) => result.json()) - .then((response) => response.payload); + .then((response) => response.payload) } export function CreateCustomShortcutDiv(element: any) { // Creates the stucture and element information for each seperate shortcut - var shortcut = document.createElement('a'); - shortcut.setAttribute('href', element.url); - shortcut.setAttribute('target', '_blank'); - var shortcutdiv = document.createElement('div'); - shortcutdiv.classList.add('shortcut'); - shortcutdiv.classList.add('customshortcut'); + var shortcut = document.createElement('a') + shortcut.setAttribute('href', element.url) + shortcut.setAttribute('target', '_blank') + var shortcutdiv = document.createElement('div') + shortcutdiv.classList.add('shortcut') + shortcutdiv.classList.add('customshortcut') let image = stringToHTML( ` @@ -2126,234 +2107,322 @@ export function CreateCustomShortcutDiv(element: any) { `, ).firstChild; - (image as HTMLElement).classList.add('shortcuticondiv'); - var text = document.createElement('p'); - text.textContent = element.name; - shortcutdiv.append(image!); - shortcutdiv.append(text); - shortcut.append(shortcutdiv); + (image as HTMLElement).classList.add('shortcuticondiv') + var text = document.createElement('p') + text.textContent = element.name + shortcutdiv.append(image!) + shortcutdiv.append(text) + shortcut.append(shortcutdiv) - document.getElementById('shortcuts')!.append(shortcut); + document.getElementById('shortcuts')!.append(shortcut) } export function RemoveShortcutDiv(elements: any) { elements.forEach((element: any) => { - const shortcuts = document.querySelectorAll('.shortcut'); + const shortcuts = document.querySelectorAll('.shortcut') shortcuts.forEach((shortcut) => { const anchorElement = shortcut.parentElement; // the element is the parent const textElement = shortcut.querySelector('p'); //

    is a direct child of .shortcut - const title = textElement ? textElement.textContent : ''; + const title = textElement ? textElement.textContent : '' - let shouldRemove = title === element.name; + let shouldRemove = title === element.name // Check href only if element.url exists if (element.url) { - shouldRemove = shouldRemove && (anchorElement!.getAttribute('href') === element.url); + shouldRemove = shouldRemove && (anchorElement!.getAttribute('href') === element.url) } if (shouldRemove) { - anchorElement!.remove(); + anchorElement!.remove() } - }); - }); + }) + }) } function AddCustomShortcutsToPage() { const result = browser.storage.local.get(['customshortcuts']) function open (result: any) { - var customshortcuts: any = Object.values(result)[0]; + var customshortcuts: any = Object.values(result)[0] if (customshortcuts.length > 0) { (document.getElementsByClassName('shortcut-container')[0] as HTMLElement).style.display = - 'block'; + 'block' for (let i = 0; i < customshortcuts.length; i++) { - const element = customshortcuts[i]; - CreateCustomShortcutDiv(element); + const element = customshortcuts[i] + CreateCustomShortcutDiv(element) } } } result.then(open, onError) } -function SendHomePage() { - setTimeout(function () { - // Sends the html data for the home page - console.log('[BetterSEQTA] Started Loading Home Page'); - document.title = 'Home ― SEQTA Learn'; - var element = document.querySelector('[data-key=home]'); +async function loadHomePage() { + // Sends the html data for the home page + console.log('[BetterSEQTA] Started Loading Home Page') - // Apply the active class to indicate clicked on home button - element!.classList.add('active'); + document.title = 'Home ― SEQTA Learn' + const element = document.querySelector('[data-key=home]') - // Remove all current elements in the main div to add new elements - var main = document.getElementById('main'); - main!.innerHTML = ''; + await new Promise((resolve) => { + // Delay to prevent SEQTA from removing the UI elements + setTimeout(resolve, 8) + }) - const titlediv = document.getElementById('title')!.firstChild; - ((titlediv!) as HTMLElement).innerText = 'Home'; - (document.querySelector('link[rel*="icon"]')! as HTMLLinkElement).href = - browser.runtime.getURL('icons/icon-48.png'); + // Apply the active class to indicate clicked on home button + element!.classList.add('active') - currentSelectedDate = new Date(); + // Remove all current elements in the main div to add new elements + const main = document.getElementById('main') - // Creates the root of the home page added to the main div - var html = stringToHTML('

    '); - - // Appends the html file to main div - // Note : firstChild of html is done due to needing to grab the body from the stringToHTML function - main!.append(html.firstChild!); + if (!main) { + console.error('Main element not found.') + return + } - // Gets the current date - const date = new Date(); + const icon = document.querySelector('link[rel*="icon"]')! as HTMLLinkElement + icon.href = icon48 - // Formats the current date used send a request for timetable and notices later - var TodayFormatted = - date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + (date.getDate() < 10 ? '0' : '') + date.getDate(); + currentSelectedDate = new Date() - // Replaces actual date with a selected date. Used for testing. - // TodayFormatted = "2020-08-31"; + // Creates the root of the home page added to the main div + let homeContainer = stringToHTML('
    ') + + // Appends the html file to main div + // Note: firstChild of html is done due to needing to grab the body from the stringToHTML function + main.append(homeContainer?.firstChild!) - // Creates the shortcut container into the home container - var ShortcutStr = '
    '; - var Shortcut = stringToHTML(ShortcutStr); - // Appends the shortcut container into the home container - document.getElementById('home-container')!.append(Shortcut.firstChild!); + // Gets the current date + const date = new Date() - // Creates the container div for the timetable portion of the home page - var TimetableStr = '

    Today\'s Lessons

    '; - var Timetable = stringToHTML(TimetableStr); - // Appends the timetable container into the home container - document.getElementById('home-container')!.append(Timetable.firstChild!); - callHomeTimetable(TodayFormatted, true) + // Creates the shortcut container into the home container + const Shortcut = stringToHTML('
    ') + // Appends the shortcut container into the home container + document.getElementById('home-container')?.append(Shortcut?.firstChild!) + + // Creates the container div for the timetable portion of the home page + const Timetable = stringToHTML('

    Today\'s Lessons

    ') + // Appends the timetable container into the home container + document.getElementById('home-container')?.append(Timetable?.firstChild!) + + // Formats the current date used send a request for timetable and notices later + const TodayFormatted = + date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + (date.getDate() < 10 ? '0' : '') + date.getDate() - var timetablearrowback = document.getElementById('home-timetable-back'); - var timetablearrowforward = document.getElementById( - 'home-timetable-forward', - ); + callHomeTimetable(TodayFormatted, true) - function SetTimetableSubtitle() { - var homelessonsubtitle = document.getElementById('home-lesson-subtitle'); - const date = new Date(); - if ( - date.getFullYear() == currentSelectedDate.getFullYear() && - date.getMonth() == currentSelectedDate.getMonth() - ) { - if (date.getDate() == currentSelectedDate.getDate()) { - // Change text to Today's Lessons - homelessonsubtitle!.innerText = 'Today\'s Lessons'; - } else if (date.getDate() - 1 == currentSelectedDate.getDate()) { - // Change text to Yesterday's Lessons - homelessonsubtitle!.innerText = 'Yesterday\'s Lessons'; - } else if (date.getDate() + 1 == currentSelectedDate.getDate()) { - // Change text to Tomorrow's Lessons - homelessonsubtitle!.innerText = 'Tomorrow\'s Lessons'; - } else { - // Change text to date of the day - homelessonsubtitle!.innerText = `${currentSelectedDate.toLocaleString( - 'en-us', - { weekday: 'short' }, - )} ${currentSelectedDate.toLocaleDateString('en-au')}`; - } + + const timetablearrowback = document.getElementById('home-timetable-back') + const timetablearrowforward = document.getElementById('home-timetable-forward') + + function SetTimetableSubtitle() { + var homelessonsubtitle = document.getElementById('home-lesson-subtitle') + const date = new Date() + if ( + date.getFullYear() == currentSelectedDate.getFullYear() && + date.getMonth() == currentSelectedDate.getMonth() + ) { + if (date.getDate() == currentSelectedDate.getDate()) { + // Change text to Today's Lessons + homelessonsubtitle!.innerText = 'Today\'s Lessons' + } else if (date.getDate() - 1 == currentSelectedDate.getDate()) { + // Change text to Yesterday's Lessons + homelessonsubtitle!.innerText = 'Yesterday\'s Lessons' + } else if (date.getDate() + 1 == currentSelectedDate.getDate()) { + // Change text to Tomorrow's Lessons + homelessonsubtitle!.innerText = 'Tomorrow\'s Lessons' } else { // Change text to date of the day homelessonsubtitle!.innerText = `${currentSelectedDate.toLocaleString( 'en-us', { weekday: 'short' }, - )} ${currentSelectedDate.toLocaleDateString('en-au')}`; + )} ${currentSelectedDate.toLocaleDateString('en-au')}` } + } else { + // Change text to date of the day + homelessonsubtitle!.innerText = `${currentSelectedDate.toLocaleString( + 'en-us', + { weekday: 'short' }, + )} ${currentSelectedDate.toLocaleDateString('en-au')}` } + } - function changeTimetable(value: any) { - currentSelectedDate.setDate(currentSelectedDate.getDate() + value); - let FormattedDate = - currentSelectedDate.getFullYear() + - '-' + - (currentSelectedDate.getMonth() + 1) + - '-' + - currentSelectedDate.getDate(); - callHomeTimetable(FormattedDate, true); - SetTimetableSubtitle(); - } + function changeTimetable(value: any) { + currentSelectedDate.setDate(currentSelectedDate.getDate() + value) + let FormattedDate = + currentSelectedDate.getFullYear() + + '-' + + (currentSelectedDate.getMonth() + 1) + + '-' + + currentSelectedDate.getDate() + callHomeTimetable(FormattedDate, true) + SetTimetableSubtitle() + } - timetablearrowback!.addEventListener('click', function () { - changeTimetable(-1); - }); - timetablearrowforward!.addEventListener('click', function () { - changeTimetable(1); - }); + timetablearrowback!.addEventListener('click', function () { + changeTimetable(-1) + }) + timetablearrowforward!.addEventListener('click', function () { + changeTimetable(1) + }) - // Adds the shortcuts to the shortcut container - const result = browser.storage.local.get(['shortcuts']) - function open (result: any) { + // Adds the shortcuts to the shortcut container + const result = browser.storage.local.get(['shortcuts']) + function open (result: any) { - const shortcuts = Object.values(result)[0]; - addShortcuts(shortcuts); - } - result.then(open, onError) + const shortcuts = Object.values(result)[0] + addShortcuts(shortcuts) + } + result.then(open, onError) - // Creates the upcoming container and appends to the home container - var upcomingcontainer = document.createElement('div'); - upcomingcontainer.classList.add('upcoming-container'); - upcomingcontainer.classList.add('border'); + // Creates the upcoming container and appends to the home container + var upcomingcontainer = document.createElement('div') + upcomingcontainer.classList.add('upcoming-container') + upcomingcontainer.classList.add('border') - let upcomingtitlediv = CreateElement('div', 'upcoming-title'); - let upcomingtitle = document.createElement('h2'); - upcomingtitle.classList.add('home-subtitle'); - upcomingtitle.innerText = 'Upcoming Assessments'; - upcomingtitlediv.append(upcomingtitle); + let upcomingtitlediv = CreateElement('div', 'upcoming-title') + let upcomingtitle = document.createElement('h2') + upcomingtitle.classList.add('home-subtitle') + upcomingtitle.innerText = 'Upcoming Assessments' + upcomingtitlediv.append(upcomingtitle) - let upcomingfilterdiv = CreateElement( - 'div', - 'upcoming-filters', - 'upcoming-filters', - ); - upcomingtitlediv.append(upcomingfilterdiv); + let upcomingfilterdiv = CreateElement( + 'div', + 'upcoming-filters', + 'upcoming-filters', + ) + upcomingtitlediv.append(upcomingfilterdiv) - upcomingcontainer.append(upcomingtitlediv); + upcomingcontainer.append(upcomingtitlediv) - let upcomingitems = document.createElement('div'); - upcomingitems.id = 'upcoming-items'; - upcomingitems.classList.add('upcoming-items'); + let upcomingitems = document.createElement('div') + upcomingitems.id = 'upcoming-items' + upcomingitems.classList.add('upcoming-items') - upcomingcontainer.append(upcomingitems); + upcomingcontainer.append(upcomingitems) - document.getElementById('home-container')!.append(upcomingcontainer); + document.getElementById('home-container')!.append(upcomingcontainer) - // Creates the notices container into the home container - const NoticesStr = String.raw` -
    -
    -

    Notices

    - -
    -
    -
    ` - - var Notices = stringToHTML(NoticesStr); - // Appends the shortcut container into the home container - document.getElementById('home-container')!.append(Notices.firstChild!); - - animate( - '.home-container > div', - { opacity: [0, 1], y: [10, 0] }, - { - delay: stagger(0.2, { start: 0 }), - duration: 0.6, - easing: [.22, .03, .26, 1] - } - ); - - callHomeTimetable(TodayFormatted); - const labelArray = response.payload[1].value.split(' ') - - const xhr2 = new XMLHttpRequest() - xhr2.open( - 'POST', - `${location.origin}/seqta/student/load/notices?`, - true - ) - xhr2.setRequestHeader('Content-Type', 'application/json; charset=utf-8') + // Creates the notices container into the home container + const NoticesStr = String.raw` +
    +
    +

    Notices

    + +
    +
    +
    ` + var Notices = stringToHTML(NoticesStr) + // Appends the shortcut container into the home container + document.getElementById('home-container')!.append(Notices.firstChild!) + + animate( + '.home-container > div', + { opacity: [0, 1], y: [10, 0] }, + { + delay: stagger(0.2, { start: 0 }), + duration: 0.6, + easing: [.22, .03, .26, 1] + } + ) + + callHomeTimetable(TodayFormatted) + + const GetPrefs = await fetch(`${location.origin}/seqta/student/load/prefs?`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ asArray: true, request: 'userPrefs' }) + }) + + const response = await GetPrefs.json() + + const labelArray = response.payload[1].value.split(' ') + + const xhr2 = new XMLHttpRequest() + xhr2.open( + 'POST', + `${location.origin}/seqta/student/load/notices?`, + true + ) + xhr2.setRequestHeader('Content-Type', 'application/json; charset=utf-8') + + xhr2.onreadystatechange = function () { + if (xhr2.readyState === 4) { + const NoticesPayload = JSON.parse(xhr2.response) + const NoticeContainer = document.getElementById('notice-container') + if (NoticesPayload.payload.length === 0) { + if (!NoticeContainer!.innerText) { + // If no notices: display no notices + const dummyNotice = document.createElement('div') + dummyNotice.textContent = 'No notices for today.' + dummyNotice.classList.add('dummynotice') + NoticeContainer!.append(dummyNotice) + } + } else { + if (!NoticeContainer!.innerText) { + // For each element in the response json: + const result = browser.storage.local.get(['DarkMode']) + function noticeInfoDiv (result: any) { + for (let i = 0; i < NoticesPayload.payload.length; i++) { + if (labelArray.includes(JSON.stringify(NoticesPayload.payload[i].label))) { + // Create a div, and place information from json response + const NewNotice = document.createElement('div') + NewNotice.classList.add('notice') + const title = stringToHTML( + '

    ' + NoticesPayload.payload[i].title + '

    ' + ) + NewNotice.append(title.firstChild!) + + if (NoticesPayload.payload[i].label_title !== undefined) { + const label = stringToHTML( + '
    ' + NoticesPayload.payload[i].label_title + '
    ' + ) + NewNotice.append(label.firstChild!) + } + + const staff = stringToHTML( + '
    ' + NoticesPayload.payload[i].staff + '
    ' + ) + NewNotice.append(staff.firstChild!) + // Converts the string into HTML + const content = stringToHTML(NoticesPayload.payload[i].contents.replace(/\[\[[\w]+[:][\w]+[\]\]]+/g, '').replace(/ +/, ' '), true) + for (let i = 0; i < content.childNodes.length; i++) { + NewNotice.append(content.childNodes[i]) + } + // Gets the colour for the top section of each notice + + let colour = NoticesPayload.payload[i].colour + if (typeof (colour) === 'string') { + const rgb = GetThresholdOfColor(colour) + const DarkModeResult = result.DarkMode + if (rgb < 100 && DarkModeResult) { + colour = undefined + } + } + + const colourbar = document.createElement('div') + colourbar.classList.add('colourbar') + colourbar.style.background = 'var(--colour)' + NewNotice.style.cssText = `--colour: ${colour}` + // Appends the colour bar to the new notice + NewNotice.append(colourbar) + // Appends the new notice into the notice container + NoticeContainer!.append(NewNotice) + } + } + } + result.then(noticeInfoDiv, onError) + } + } + } + } + // Data sent as the POST request + const dateControl = document.querySelector('input[type="date"]') as HTMLInputElement + xhr2.send(JSON.stringify({ date: dateControl!.value })) + function onInputChange (e: any) { + xhr2.open('POST', `${location.origin}/seqta/student/load/notices?`, true) + xhr2.setRequestHeader('Content-Type', 'application/json; charset=utf-8') + xhr2.send(JSON.stringify({ date: e.target.value })) xhr2.onreadystatechange = function () { if (xhr2.readyState === 4) { const NoticesPayload = JSON.parse(xhr2.response) @@ -2367,352 +2436,274 @@ function SendHomePage() { NoticeContainer!.append(dummyNotice) } } else { - if (!NoticeContainer!.innerText) { - // For each element in the response json: - const result = browser.storage.local.get(['DarkMode']) - function noticeInfoDiv (result: any) { - for (let i = 0; i < NoticesPayload.payload.length; i++) { - if (labelArray.includes(JSON.stringify(NoticesPayload.payload[i].label))) { - // Create a div, and place information from json response - const NewNotice = document.createElement('div') - NewNotice.classList.add('notice') - const title = stringToHTML( - '

    ' + NoticesPayload.payload[i].title + '

    ' + document.querySelectorAll('.notice').forEach(e => e.remove()) + // For each element in the response json: + const result = browser.storage.local.get(['DarkMode']) + function noticeInfoDiv (result: any) { + for (let i = 0; i < NoticesPayload.payload.length; i++) { + + if (labelArray.includes(JSON.stringify(NoticesPayload.payload[i].label))) { + // Create a div, and place information from json response + const NewNotice = document.createElement('div') + NewNotice.classList.add('notice') + const title = stringToHTML( + '

    ' + NoticesPayload.payload[i].title + '

    ' + ) + NewNotice.append(title.firstChild!) + + if (NoticesPayload.payload[i].label_title !== undefined) { + const label = stringToHTML( + '
    ' + NoticesPayload.payload[i].label_title + '
    ' ) - NewNotice.append(title.firstChild!) - - if (NoticesPayload.payload[i].label_title !== undefined) { - const label = stringToHTML( - '
    ' + NoticesPayload.payload[i].label_title + '
    ' - ) - NewNotice.append(label.firstChild!) - } - - const staff = stringToHTML( - '
    ' + NoticesPayload.payload[i].staff + '
    ' - ) - NewNotice.append(staff.firstChild!) - // Converts the string into HTML - const content = stringToHTML(NoticesPayload.payload[i].contents.replace(/\[\[[\w]+[:][\w]+[\]\]]+/g, '').replace(/ +/, ' '), true) - for (let i = 0; i < content.childNodes.length; i++) { - NewNotice.append(content.childNodes[i]) - } - // Gets the colour for the top section of each notice - - let colour = NoticesPayload.payload[i].colour - if (typeof (colour) === 'string') { - const rgb = GetThresholdOfColor(colour) - const DarkModeResult = result.DarkMode - if (rgb < 100 && DarkModeResult) { - colour = undefined - } - } - - const colourbar = document.createElement('div') - colourbar.classList.add('colourbar') - colourbar.style.background = 'var(--colour)' - NewNotice.style.cssText = `--colour: ${colour}` - // Appends the colour bar to the new notice - NewNotice.append(colourbar) - // Appends the new notice into the notice container - NoticeContainer!.append(NewNotice) + NewNotice.append(label.firstChild!) } + + const staff = stringToHTML( + '
    ' + NoticesPayload.payload[i].staff + '
    ' + ) + NewNotice.append(staff.firstChild!) + // Converts the string into HTML + const content = stringToHTML(NoticesPayload.payload[i].contents.replace(/\[\[[\w]+[:][\w]+[\]\]]+/g, '').replace(/ +/, ' '), true) + for (let i = 0; i < content.childNodes.length; i++) { + NewNotice.append(content.childNodes[i]) + } + // Gets the colour for the top section of each notice + + let colour = NoticesPayload.payload[i].colour + if (typeof (colour) === 'string') { + const rgb = GetThresholdOfColor(colour) + const DarkModeResult = result.DarkMode + if (rgb < 100 && DarkModeResult) { + colour = undefined + } + } + + const colourbar = document.createElement('div') + colourbar.classList.add('colourbar') + colourbar.style.background = 'var(--colour)' + NewNotice.style.cssText = `--colour: ${colour}` + // Appends the colour bar to the new notice + NewNotice.append(colourbar) + // Appends the new notice into the notice container + NoticeContainer!.append(NewNotice) } } - result.then(noticeInfoDiv, onError) } + result.then(noticeInfoDiv, onError) } } } - // Data sent as the POST request - const dateControl = document.querySelector('input[type="date"]') as HTMLInputElement - xhr2.send(JSON.stringify({ date: dateControl!.value })) - function onInputChange (e: any) { - xhr2.open('POST', `${location.origin}/seqta/student/load/notices?`, true) - xhr2.setRequestHeader('Content-Type', 'application/json; charset=utf-8') - xhr2.send(JSON.stringify({ date: e.target.value })) - xhr2.onreadystatechange = function () { - if (xhr2.readyState === 4) { - const NoticesPayload = JSON.parse(xhr2.response) - const NoticeContainer = document.getElementById('notice-container') - if (NoticesPayload.payload.length === 0) { - if (!NoticeContainer!.innerText) { - // If no notices: display no notices - const dummyNotice = document.createElement('div') - dummyNotice.textContent = 'No notices for today.' - dummyNotice.classList.add('dummynotice') - NoticeContainer!.append(dummyNotice) - } - } else { - document.querySelectorAll('.notice').forEach(e => e.remove()) - // For each element in the response json: - const result = browser.storage.local.get(['DarkMode']) - function noticeInfoDiv (result: any) { - for (let i = 0; i < NoticesPayload.payload.length; i++) { + } + dateControl.addEventListener('input', onInputChange) - if (labelArray.includes(JSON.stringify(NoticesPayload.payload[i].label))) { - // Create a div, and place information from json response - const NewNotice = document.createElement('div') - NewNotice.classList.add('notice') - const title = stringToHTML( - '

    ' + NoticesPayload.payload[i].title + '

    ' - ) - NewNotice.append(title.firstChild!) - - if (NoticesPayload.payload[i].label_title !== undefined) { - const label = stringToHTML( - '
    ' + NoticesPayload.payload[i].label_title + '
    ' - ) - NewNotice.append(label.firstChild!) - } - - const staff = stringToHTML( - '
    ' + NoticesPayload.payload[i].staff + '
    ' - ) - NewNotice.append(staff.firstChild!) - // Converts the string into HTML - const content = stringToHTML(NoticesPayload.payload[i].contents.replace(/\[\[[\w]+[:][\w]+[\]\]]+/g, '').replace(/ +/, ' '), true) - for (let i = 0; i < content.childNodes.length; i++) { - NewNotice.append(content.childNodes[i]) - } - // Gets the colour for the top section of each notice - - let colour = NoticesPayload.payload[i].colour - if (typeof (colour) === 'string') { - const rgb = GetThresholdOfColor(colour) - const DarkModeResult = result.DarkMode - if (rgb < 100 && DarkModeResult) { - colour = undefined - } - } - - const colourbar = document.createElement('div') - colourbar.classList.add('colourbar') - colourbar.style.background = 'var(--colour)' - NewNotice.style.cssText = `--colour: ${colour}` - // Appends the colour bar to the new notice - NewNotice.append(colourbar) - // Appends the new notice into the notice container - NoticeContainer!.append(NewNotice) - } - } - } - result.then(noticeInfoDiv, onError) - } - } - } + // Sends similar HTTP Post Request for the notices + const result1 = browser.storage.local.get() + function open1 (result: any) { + if (result.notificationcollector) { + enableNotificationCollector() } - dateControl.addEventListener('input', onInputChange) + } + result1.then(open1, onError) + let activeClassList: any - // Sends similar HTTP Post Request for the notices - const result1 = browser.storage.local.get() - function open1 (result: any) { - if (result.notificationcollector) { - enableNotificationCollector(); - } + const assessments = await GetUpcomingAssessments() + const classes = await GetActiveClasses() + + // Gets all subjects for the student + for (let i = 0; i < classes.length; i++) { + const element = classes[i] + // eslint-disable-next-line + if (element.hasOwnProperty("active")) { // for some reason eslint gets mad, even though it works? + // Finds the active class list with the current subjects + activeClassList = classes[i] } - result1.then(open1, onError) - let activeClassList: any; - GetUpcomingAssessments().then((assessments) => { - GetActiveClasses().then((classes) => { - // Gets all subjects for the student - for (let i = 0; i < classes.length; i++) { - const element = classes[i]; - // eslint-disable-next-line - if (element.hasOwnProperty("active")) { // for some reason eslint gets mad, even though it works? - // Finds the active class list with the current subjects - activeClassList = classes[i]; - } - } - let activeSubjects = activeClassList.subjects; + } + + let activeSubjects = [] + if (activeClassList?.subjects) { + activeSubjects = activeClassList.subjects + } - let activeSubjectCodes = []; - // Gets the code for each of the subjects and puts them in an array - let element; - for (let i = 0; i < activeSubjects.length; i++) { - element = activeSubjects[i]; - activeSubjectCodes.push(element.code); - } + let activeSubjectCodes = [] + + // Gets the code for each of the subjects and puts them in an array + for (let i = 0; i < activeSubjects.length; i++) { + activeSubjectCodes.push(activeSubjects[i].code) + } - let CurrentAssessments = []; - for (let i = 0; i < assessments.length; i++) { - element = assessments[i]; - if (activeSubjectCodes.includes(element.code)) { - CurrentAssessments.push(element); - } - } + let CurrentAssessments = [] + for (let i = 0; i < assessments.length; i++) { + if (activeSubjectCodes.includes(assessments[i].code)) { + CurrentAssessments.push(element) + } + } - CurrentAssessments.sort(comparedate); + CurrentAssessments.sort(comparedate) - CreateUpcomingSection(CurrentAssessments, activeSubjects); - }); - }); - }, 8); + CreateUpcomingSection(CurrentAssessments, activeSubjects) } export function addShortcuts(shortcuts: any) { for (let i = 0; i < shortcuts.length; i++) { - const currentShortcut = shortcuts[i]; + const currentShortcut = shortcuts[i] if (currentShortcut?.enabled) { - const Itemname = (currentShortcut?.name ?? '').replace(/\s/g, ''); + const Itemname = (currentShortcut?.name ?? '').replace(/\s/g, '') - const linkDetails = ShortcutLinks?.[Itemname as keyof typeof ShortcutLinks]; + const linkDetails = ShortcutLinks?.[Itemname as keyof typeof ShortcutLinks] if (linkDetails) { createNewShortcut( linkDetails.link, linkDetails.icon, linkDetails.viewBox, currentShortcut?.name - ); + ) } else { - console.warn(`No link details found for '${Itemname}'`); + console.warn(`No link details found for '${Itemname}'`) } } } - AddCustomShortcutsToPage(); + AddCustomShortcutsToPage() } export function enableNotificationCollector() { - var xhr3 = new XMLHttpRequest(); - xhr3.open('POST', `${location.origin}/seqta/student/heartbeat?`, true); + var xhr3 = new XMLHttpRequest() + xhr3.open('POST', `${location.origin}/seqta/student/heartbeat?`, true) xhr3.setRequestHeader( 'Content-Type', 'application/json; charset=utf-8' - ); + ) xhr3.onreadystatechange = function () { if (xhr3.readyState === 4) { - var Notifications = JSON.parse(xhr3.response); + var Notifications = JSON.parse(xhr3.response) var alertdiv = document.getElementsByClassName( 'notifications__bubble___1EkSQ' - )[0]; + )[0] if (typeof alertdiv == 'undefined') { - console.log('[BetterSEQTA] No notifications currently'); + console.log('[BetterSEQTA] No notifications currently') } else { - alertdiv.textContent = Notifications.payload.notifications.length; + alertdiv.textContent = Notifications.payload.notifications.length } } - }; + } xhr3.send( JSON.stringify({ timestamp: '1970-01-01 00:00:00.0', hash: '#?page=/home', }) - ); + ) } export function disableNotificationCollector() { - var alertdiv = document.getElementsByClassName('notifications__bubble___1EkSQ')[0]; + var alertdiv = document.getElementsByClassName('notifications__bubble___1EkSQ')[0] if (typeof alertdiv != 'undefined') { - var currentNumber = parseInt(alertdiv.textContent!); + var currentNumber = parseInt(alertdiv.textContent!) if (currentNumber < 9) { - alertdiv.textContent = currentNumber.toString(); + alertdiv.textContent = currentNumber.toString() } else { - alertdiv.textContent = '9+'; + alertdiv.textContent = '9+' } } } function createNewShortcut(link: any, icon: any, viewBox: any, title: any) { // Creates the stucture and element information for each seperate shortcut - let shortcut = document.createElement('a'); - shortcut.setAttribute('href', link); - shortcut.setAttribute('target', '_blank'); - let shortcutdiv = document.createElement('div'); - shortcutdiv.classList.add('shortcut'); + let shortcut = document.createElement('a') + shortcut.setAttribute('href', link) + shortcut.setAttribute('target', '_blank') + let shortcutdiv = document.createElement('div') + shortcutdiv.classList.add('shortcut') let image = stringToHTML( ``, ).firstChild; - (image! as HTMLElement).classList.add('shortcuticondiv'); - let text = document.createElement('p'); - text.textContent = title; - shortcutdiv.append(image as HTMLElement); - shortcutdiv.append(text); - shortcut.append(shortcutdiv); + (image! as HTMLElement).classList.add('shortcuticondiv') + let text = document.createElement('p') + text.textContent = title + shortcutdiv.append(image as HTMLElement) + shortcutdiv.append(text) + shortcut.append(shortcutdiv) - document.getElementById('shortcuts')!.appendChild(shortcut); + document.getElementById('shortcuts')!.appendChild(shortcut) } function SendNewsPage() { setTimeout(function () { // Sends the html data for the home page - console.log('[BetterSEQTA] Started Loading News Page'); - document.title = 'News ― SEQTA Learn'; - var element = document.querySelector('[data-key=news]'); + console.log('[BetterSEQTA] Started Loading News Page') + document.title = 'News ― SEQTA Learn' + var element = document.querySelector('[data-key=news]') // Apply the active class to indicate clicked on home button - element!.classList.add('active'); + element!.classList.add('active') // Remove all current elements in the main div to add new elements - var main = document.getElementById('main'); - main!.innerHTML = ''; + var main = document.getElementById('main') + main!.innerHTML = '' // Creates the root of the home page added to the main div - var htmlStr = '

    Latest Headlines - ABC News

    '; + var htmlStr = '

    Latest Headlines - ABC News

    ' - var html = stringToHTML(htmlStr); + var html = stringToHTML(htmlStr) // Appends the html file to main div // Note : firstChild of html is done due to needing to grab the body from the stringToHTML function - main!.append(html.firstChild!); + main!.append(html.firstChild!) const titlediv = document.getElementById('title')!.firstChild; - (titlediv! as HTMLElement).innerText = 'News'; - AppendLoadingSymbol('newsloading', '#news-container'); + (titlediv! as HTMLElement).innerText = 'News' + AppendLoadingSymbol('newsloading', '#news-container') browser.runtime.sendMessage({ type: 'sendNews' }).then(function (response) { - let newsarticles = response.news.articles; - var newscontainer = document.querySelector('#news-container'); - document.getElementById('newsloading')!.remove(); + let newsarticles = response.news.articles + var newscontainer = document.querySelector('#news-container') + document.getElementById('newsloading')!.remove() for (let i = 0; i < newsarticles.length; i++) { - let newsarticle = document.createElement('a'); - newsarticle.classList.add('NewsArticle'); - newsarticle.href = newsarticles[i].url; - newsarticle.target = '_blank'; + let newsarticle = document.createElement('a') + newsarticle.classList.add('NewsArticle') + newsarticle.href = newsarticles[i].url + newsarticle.target = '_blank' - let articleimage = document.createElement('div'); - articleimage.classList.add('articleimage'); + let articleimage = document.createElement('div') + articleimage.classList.add('articleimage') if (newsarticles[i].urlToImage == 'null') { - articleimage.style.backgroundImage = `url(${browser.runtime.getURL( - 'icons/betterseqta-light-outline.png', - )})`; - articleimage.style.width = '20%'; - articleimage.style.margin = '0 7.5%'; + articleimage.style.backgroundImage = `url(${LogoLightOutline})` + articleimage.style.width = '20%' + articleimage.style.margin = '0 7.5%' } else { - articleimage.style.backgroundImage = `url(${newsarticles[i].urlToImage})`; + articleimage.style.backgroundImage = `url(${newsarticles[i].urlToImage})` } - let articletext = document.createElement('div'); - articletext.classList.add('ArticleText'); - let title = document.createElement('a'); - title.innerText = newsarticles[i].title; - title.href = newsarticles[i].url; - title.target = '_blank'; + let articletext = document.createElement('div') + articletext.classList.add('ArticleText') + let title = document.createElement('a') + title.innerText = newsarticles[i].title + title.href = newsarticles[i].url + title.target = '_blank' - let description = document.createElement('p'); - description.innerHTML = newsarticles[i].description; + let description = document.createElement('p') + description.innerHTML = newsarticles[i].description - articletext.append(title); - articletext.append(description); + articletext.append(title) + articletext.append(description) - newsarticle.append(articleimage); - newsarticle.append(articletext); - newscontainer!.append(newsarticle); + newsarticle.append(articleimage) + newsarticle.append(articletext) + newscontainer!.append(newsarticle) } - }); - }, 8); + }) + }, 8) } async function CheckForMenuList() { if (!MenuItemMutation) { try { - if (document.getElementById('menu')!.firstChild) { - ObserveMenuItemPosition(); - MenuItemMutation = true; + if (document.getElementById('menu')?.firstChild) { + ObserveMenuItemPosition() + MenuItemMutation = true } } catch (error) { - return; + return } } } @@ -2754,11 +2745,11 @@ function documentTextColor () { browser.storage.onChanged.addListener(documentTextColor) function LoadInit() { - console.log('[BetterSEQTA] Started Init'); + console.log('[BetterSEQTA] Started Init') const result = browser.storage.local.get() function open (result: any) { if (result.onoff) { - SendHomePage(); + loadHomePage() } } result.then(open, onError) diff --git a/src/background.ts b/src/background.ts index 6ceb2df2..8c586e86 100644 --- a/src/background.ts +++ b/src/background.ts @@ -1,4 +1,5 @@ import * as Sentry from "@sentry/browser"; +import browser from 'webextension-polyfill' browser.storage.local.get([ "telemetry" ]).then((telemetry) => { if (telemetry.telemetry === true) { @@ -20,7 +21,6 @@ browser.storage.local.get([ "telemetry" ]).then((telemetry) => { } }) -import browser from 'webextension-polyfill' import { onError } from './seqta/utils/onError'; export const openDB = () => { return new Promise((resolve, reject) => { diff --git a/src/css/documentload.js b/src/css/documentload.ts similarity index 100% rename from src/css/documentload.js rename to src/css/documentload.ts diff --git a/src/css/iframe.js b/src/css/iframe.js deleted file mode 100644 index cc616640..00000000 --- a/src/css/iframe.js +++ /dev/null @@ -1 +0,0 @@ -import './iframe.scss'; diff --git a/src/css/iframe.scss b/src/css/iframe.scss index 17cef99b..5b5ef625 100644 --- a/src/css/iframe.scss +++ b/src/css/iframe.scss @@ -15,85 +15,99 @@ * along with EvenBetterSEQTA. If not, see . */ -html, p, div, span { - color: white !important; - text-shadow: 1px 1px 2px #161616, 0 0 1em #161616; + body { + background: transparent; } -body { - background-color: transparent !important; -} +.dark { + p, + div, + span { + color: white !important; + text-shadow: 1px 1px 2px #161616, 0 0 1em #161616; + } -blockquote.forward > .preamble { - color: rgba(255, 255, 255, 0.7) !important; -} + body { + background-color: transparent !important; + } -blockquote.forward > .preamble > .date > .value, blockquote.forward > .preamble > .sender > .value { - color: rgba(255, 255, 255, 0.7) !important; -} + blockquote.forward > .preamble { + color: rgba(255, 255, 255, 0.7) !important; -blockquote.forward > .preamble > .date > .label, blockquote.forward > .preamble > .sender > .label { - color: rgba(255, 255, 255, 0.7) !important; -} + > p, + div, + span { + background: transparent !important; + } -table th { - background-color: #161616; -} + > .date > .value, + blockquote.forward > .preamble > .sender > .value { + color: rgba(255, 255, 255, 0.7) !important; + } -::-webkit-scrollbar { - width: 10px; - height: 10px; - transition: 1s; -} + > .date > .label, + blockquote.forward > .preamble > .sender > .label { + color: rgba(255, 255, 255, 0.7) !important; + } + } -::-webkit-scrollbar-track { - background-color: transparent; -} + [bgcolor="#ffffff"] > * { + color: black !important; + text-shadow: none !important; + } -::-webkit-scrollbar-thumb { - border-radius: 10rem !important; -} + table th { + background-color: #161616; + } -::-webkit-scrollbar-corner { - background: none; -} + ::-webkit-scrollbar { + width: 10px; + height: 10px; + transition: 1s; + } -.forward { - border-radius: 1rem; -} + ::-webkit-scrollbar-track { + background-color: transparent; + } -.preamble { - border-top-left-radius: 1rem; - border-top-right-radius: 1rem; -} + ::-webkit-scrollbar-thumb { + border-radius: 10rem !important; + } -html, p, div, span { - color: white !important; - background-color: #232323; -} -body { - background-color: #232323; -} -blockquote.forward > .preamble { - color: rgba(255, 255, 255, 0.7) !important; -} + ::-webkit-scrollbar-corner { + background: none; + } -blockquote.forward > .preamble > .date > .value, -blockquote.forward > .preamble > .sender > .value { - color: rgba(255, 255, 255, 0.7) !important; -} -blockquote.forward > .preamble > .date > .label, -blockquote.forward > .preamble > .sender > .label { - color: rgba(255, 255, 255, 0.7) !important; -} + .forward { + border-radius: 1rem; + } -#backgroundTable > * { - background-color: #161616; - border: none; -} + .preamble { + border-top-left-radius: 1rem; + border-top-right-radius: 1rem; + } -.userHTML>div>a:not(.resource) { - color: #06b4fc; - text-decoration: underline; - transition: text-shadow 0.5s; + blockquote.forward > .preamble { + color: rgba(255, 255, 255, 0.7) !important; + } + + blockquote.forward > .preamble > .date > .value, + blockquote.forward > .preamble > .sender > .value { + color: rgba(255, 255, 255, 0.7) !important; + } + blockquote.forward > .preamble > .date > .label, + blockquote.forward > .preamble > .sender > .label { + color: rgba(255, 255, 255, 0.7) !important; + } + + #backgroundTable > * { + background-color: #161616; + border: none; + } + + .userHTML > div > a:not(.resource) { + color: #06b4fc; + text-decoration: underline; + transition: text-shadow 0.5s; + } } \ No newline at end of file diff --git a/src/css/injected.scss b/src/css/injected.scss index 98dc28a1..7b641bc9 100644 --- a/src/css/injected.scss +++ b/src/css/injected.scss @@ -1,16 +1,19 @@ @charset "UTF-8"; -@import url("https://fonts.googleapis.com/css?family=Rubik:300,400,500,600"); +@import url('https://fonts.googleapis.com/css?family=Rubik:300,400,500,600'); -@import "./injected/popup.scss"; -@import "./injected/sidebar-animation.scss"; -@import "./injected/theme.scss"; -@import "./injected/transparency.scss"; +@import './injected/popup.scss'; +@import './injected/sidebar-animation.scss'; +@import './injected/theme.scss'; +@import './injected/transparency.scss'; :root { background: var(--better-main) !important; --navy: #1a1a1a !important; --auto-background: var(--better-pale, var(--background-secondary)) !important; } +.hidden { + display: none; +} body, html { font-family: Rubik, sans-serif !important; @@ -167,9 +170,6 @@ ul.magicDelete > li.deleting { background: transparent !important; color: var(--text-color) !important; } -.tooltip { - z-index: 5 !important; -} #menu li, #menu section { @@ -200,6 +200,7 @@ ul.magicDelete > li.deleting { } #menu { width: 270px; + z-index: 19; background: var(--better-main) !important; color: var(--text-color); border-right: none; @@ -321,7 +322,7 @@ ol:has(.MessageList__avatar___2wxyb svg) { box-shadow: 0px 10px 15px -3px rgba(0, 0, 0, 0.2) !important; } -[style="--better-sub: #161616; --better-alert-highlight: #c61851; --background-primary: #ffffff; --background-secondary: #e5e7eb; --text-primary: black; --text-color: white; --betterseqta-logo: url(chrome-extension://boikofabjaholheekefimfojfncpjfib/icons/betterseqta-light-full.png); --better-main: #1a1a1a; --better-light: #333333;"] .menuShown > :last-child +[style="--better-sub: #161616; --better-alert-highlight: #c61851; --background-primary: #ffffff; --background-secondary: #e5e7eb; --text-primary: black; --text-color: white; --better-main: #1a1a1a; --better-light: #333333;"] .menuShown > :last-child { top: 18% !important; } @@ -534,6 +535,7 @@ div > ol:has(.uiFileHandlerWrapper) { height: 69.5px; box-shadow: 0px 0px 4px 2px rgba(0, 0, 0, 0.2); } + .assessmentsWrapper .message { display: none; } @@ -681,6 +683,7 @@ div > ol:has(.uiFileHandlerWrapper) { left: 0; width: 100%; } + #title::before { background-image: var(--betterseqta-logo); background-position: left; @@ -1674,7 +1677,7 @@ li.MessageList__unread___3imtO { content: ""; width: 14px; height: 12px; - background-image: url("../../public/icons/betterseqta-light-outline.png"); + background-image: url("../resources/icons/betterseqta-light-outline.png"); display: inline-block; background-size: 18px 18px; color: #fff; @@ -2528,6 +2531,8 @@ li.MessageList__unread___3imtO { } .tooltip { display: inline-block; + background: transparent; + z-index: 5 !important; width: 28px; background: none; box-shadow: none; diff --git a/src/css/injected.js b/src/css/injected.ts similarity index 100% rename from src/css/injected.js rename to src/css/injected.ts diff --git a/src/declarations.d.ts b/src/declarations.d.ts new file mode 100644 index 00000000..7a800f22 --- /dev/null +++ b/src/declarations.d.ts @@ -0,0 +1,5 @@ +declare module '*.mp4'; +declare module '*.woff'; +declare module '*.scss'; +declare module '*.png'; +declare module '*.html'; diff --git a/interface/src/SettingsContext.tsx b/src/interface/SettingsContext.tsx similarity index 100% rename from interface/src/SettingsContext.tsx rename to src/interface/SettingsContext.tsx diff --git a/interface/src/SettingsPage.tsx b/src/interface/SettingsPage.tsx similarity index 100% rename from interface/src/SettingsPage.tsx rename to src/interface/SettingsPage.tsx diff --git a/interface/src/assets/betterseqta-dark-full.png b/src/interface/assets/betterseqta-dark-full.png similarity index 100% rename from interface/src/assets/betterseqta-dark-full.png rename to src/interface/assets/betterseqta-dark-full.png diff --git a/interface/src/assets/betterseqta-light-full.png b/src/interface/assets/betterseqta-light-full.png similarity index 100% rename from interface/src/assets/betterseqta-light-full.png rename to src/interface/assets/betterseqta-light-full.png diff --git a/interface/src/assets/presetBackgrounds.tsx b/src/interface/assets/presetBackgrounds.tsx similarity index 100% rename from interface/src/assets/presetBackgrounds.tsx rename to src/interface/assets/presetBackgrounds.tsx diff --git a/interface/src/assets/react.svg b/src/interface/assets/react.svg similarity index 100% rename from interface/src/assets/react.svg rename to src/interface/assets/react.svg diff --git a/interface/src/assets/themeCovers/hacker.jpeg b/src/interface/assets/themeCovers/hacker.jpeg similarity index 100% rename from interface/src/assets/themeCovers/hacker.jpeg rename to src/interface/assets/themeCovers/hacker.jpeg diff --git a/interface/src/assets/themes.tsx b/src/interface/assets/themes.tsx similarity index 100% rename from interface/src/assets/themes.tsx rename to src/interface/assets/themes.tsx diff --git a/interface/src/components/BackgroundSelector.css b/src/interface/components/BackgroundSelector.css similarity index 100% rename from interface/src/components/BackgroundSelector.css rename to src/interface/components/BackgroundSelector.css diff --git a/interface/src/components/BackgroundSelector.tsx b/src/interface/components/BackgroundSelector.tsx similarity index 100% rename from interface/src/components/BackgroundSelector.tsx rename to src/interface/components/BackgroundSelector.tsx diff --git a/interface/src/components/Picker.css b/src/interface/components/Picker.css similarity index 100% rename from interface/src/components/Picker.css rename to src/interface/components/Picker.css diff --git a/interface/src/components/Picker.tsx b/src/interface/components/Picker.tsx similarity index 100% rename from interface/src/components/Picker.tsx rename to src/interface/components/Picker.tsx diff --git a/interface/src/components/PickerSwatch.tsx b/src/interface/components/PickerSwatch.tsx similarity index 100% rename from interface/src/components/PickerSwatch.tsx rename to src/interface/components/PickerSwatch.tsx diff --git a/interface/src/components/Slider.css b/src/interface/components/Slider.css similarity index 100% rename from interface/src/components/Slider.css rename to src/interface/components/Slider.css diff --git a/interface/src/components/Slider.tsx b/src/interface/components/Slider.tsx similarity index 100% rename from interface/src/components/Slider.tsx rename to src/interface/components/Slider.tsx diff --git a/interface/src/components/Switch.css b/src/interface/components/Switch.css similarity index 100% rename from interface/src/components/Switch.css rename to src/interface/components/Switch.css diff --git a/interface/src/components/Switch.tsx b/src/interface/components/Switch.tsx similarity index 96% rename from interface/src/components/Switch.tsx rename to src/interface/components/Switch.tsx index c0368cdb..ff3e7b19 100644 --- a/interface/src/components/Switch.tsx +++ b/src/interface/components/Switch.tsx @@ -11,7 +11,7 @@ export default function Switch(props: SwitchProps) { return (
    { // send message to the background script - const response = await browser.runtime.sendMessage({ + await browser.runtime.sendMessage({ type: 'currentTab', info: 'DownloadTheme', body: { @@ -14,13 +14,11 @@ export const downloadTheme = async (themeName: string, themeURL: string) => { themeURL: themeURL } }); - - console.log("Response: ", response); } export const setTheme = async (themeName: string, themeURL: string) => { // send message to the background script - const response = await browser.runtime.sendMessage({ + await browser.runtime.sendMessage({ type: 'currentTab', info: 'SetTheme', body: { @@ -28,8 +26,6 @@ export const setTheme = async (themeName: string, themeURL: string) => { themeURL: themeURL } }); - - console.log("Response: ", response); } export const listThemes = async () => { @@ -39,9 +35,6 @@ export const listThemes = async () => { info: 'ListThemes' }); - // response.themes is an array of strings that are identical to the theme names that we loop over. Use this list to see which ones are downloaded and which ones need to see the download icon. - console.log("Response: ", response); - return response; } diff --git a/interface/src/hooks/settingsState.ts b/src/interface/hooks/settingsState.ts similarity index 100% rename from interface/src/hooks/settingsState.ts rename to src/interface/hooks/settingsState.ts diff --git a/interface/src/index.css b/src/interface/index.css similarity index 100% rename from interface/src/index.css rename to src/interface/index.css diff --git a/interface/index.html b/src/interface/index.html similarity index 69% rename from interface/index.html rename to src/interface/index.html index 2f1b4e8e..5e81ff37 100644 --- a/interface/index.html +++ b/src/interface/index.html @@ -2,13 +2,12 @@ - Vite + React + TS
    - + diff --git a/interface/src/main.d.ts b/src/interface/main.d.ts similarity index 100% rename from interface/src/main.d.ts rename to src/interface/main.d.ts diff --git a/interface/src/main.tsx b/src/interface/main.tsx similarity index 95% rename from interface/src/main.tsx rename to src/interface/main.tsx index 4d069335..51326b7b 100644 --- a/interface/src/main.tsx +++ b/src/interface/main.tsx @@ -5,7 +5,10 @@ import './index.css'; import { SettingsContextProvider } from './SettingsContext.js'; import SettingsPage from './SettingsPage.js'; import browser from 'webextension-polyfill'; +import font from 'url:../resources/fonts/IconFamily.woff' + import * as Sentry from "@sentry/react"; + browser.storage.local.get([ "telemetry" ]).then((telemetry) => { if (telemetry.telemetry === true) Sentry.init({ @@ -24,14 +27,13 @@ browser.storage.local.get([ "telemetry" ]).then((telemetry) => { replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur. }); }) -const fontURL = browser.runtime.getURL("fonts/IconFamily.woff"); const style = document.createElement("style"); style.setAttribute("type", "text/css"); style.innerHTML = ` @font-face { font-family: 'IconFamily'; - src: url('${fontURL}') format('woff'); + src: url('${font}') format('woff'); font-weight: normal; font-style: normal; }`; diff --git a/interface/src/pages/About.tsx b/src/interface/pages/About.tsx similarity index 100% rename from interface/src/pages/About.tsx rename to src/interface/pages/About.tsx diff --git a/interface/src/pages/Settings.tsx b/src/interface/pages/Settings.tsx similarity index 100% rename from interface/src/pages/Settings.tsx rename to src/interface/pages/Settings.tsx diff --git a/interface/src/pages/Shortcuts.tsx b/src/interface/pages/Shortcuts.tsx similarity index 100% rename from interface/src/pages/Shortcuts.tsx rename to src/interface/pages/Shortcuts.tsx diff --git a/interface/src/pages/Themes.tsx b/src/interface/pages/Themes.tsx similarity index 100% rename from interface/src/pages/Themes.tsx rename to src/interface/pages/Themes.tsx diff --git a/interface/src/types/AppProps.ts b/src/interface/types/AppProps.ts similarity index 100% rename from interface/src/types/AppProps.ts rename to src/interface/types/AppProps.ts diff --git a/interface/src/types/ColorPickerProps.ts b/src/interface/types/ColorPickerProps.ts similarity index 100% rename from interface/src/types/ColorPickerProps.ts rename to src/interface/types/ColorPickerProps.ts diff --git a/interface/src/types/SettingsProps.ts b/src/interface/types/SettingsProps.ts similarity index 100% rename from interface/src/types/SettingsProps.ts rename to src/interface/types/SettingsProps.ts diff --git a/interface/src/types/SliderProps.ts b/src/interface/types/SliderProps.ts similarity index 100% rename from interface/src/types/SliderProps.ts rename to src/interface/types/SliderProps.ts diff --git a/interface/src/types/SwitchProps.ts b/src/interface/types/SwitchProps.ts similarity index 100% rename from interface/src/types/SwitchProps.ts rename to src/interface/types/SwitchProps.ts diff --git a/interface/src/types/TabbedContainerProps.ts b/src/interface/types/TabbedContainerProps.ts similarity index 100% rename from interface/src/types/TabbedContainerProps.ts rename to src/interface/types/TabbedContainerProps.ts diff --git a/interface/src/vite-env.d.ts b/src/interface/vite-env.d.ts similarity index 100% rename from interface/src/vite-env.d.ts rename to src/interface/vite-env.d.ts diff --git a/public/fonts/IconFamily.css b/src/resources/fonts/IconFamily.css similarity index 100% rename from public/fonts/IconFamily.css rename to src/resources/fonts/IconFamily.css diff --git a/public/fonts/IconFamily.woff b/src/resources/fonts/IconFamily.woff similarity index 100% rename from public/fonts/IconFamily.woff rename to src/resources/fonts/IconFamily.woff diff --git a/public/icons/betterseqta-dark-full.png b/src/resources/icons/betterseqta-dark-full.png similarity index 100% rename from public/icons/betterseqta-dark-full.png rename to src/resources/icons/betterseqta-dark-full.png diff --git a/public/icons/betterseqta-dark-icon.png b/src/resources/icons/betterseqta-dark-icon.png similarity index 100% rename from public/icons/betterseqta-dark-icon.png rename to src/resources/icons/betterseqta-dark-icon.png diff --git a/public/icons/betterseqta-light-full.png b/src/resources/icons/betterseqta-light-full.png similarity index 100% rename from public/icons/betterseqta-light-full.png rename to src/resources/icons/betterseqta-light-full.png diff --git a/public/icons/betterseqta-light-icon.png b/src/resources/icons/betterseqta-light-icon.png similarity index 100% rename from public/icons/betterseqta-light-icon.png rename to src/resources/icons/betterseqta-light-icon.png diff --git a/public/icons/betterseqta-light-outline.png b/src/resources/icons/betterseqta-light-outline.png similarity index 100% rename from public/icons/betterseqta-light-outline.png rename to src/resources/icons/betterseqta-light-outline.png diff --git a/public/icons/icon-32.png b/src/resources/icons/icon-32.png similarity index 100% rename from public/icons/icon-32.png rename to src/resources/icons/icon-32.png diff --git a/public/icons/icon-48.png b/src/resources/icons/icon-48.png similarity index 100% rename from public/icons/icon-48.png rename to src/resources/icons/icon-48.png diff --git a/public/icons/icon-64.png b/src/resources/icons/icon-64.png similarity index 100% rename from public/icons/icon-64.png rename to src/resources/icons/icon-64.png diff --git a/public/resources/update-video.mp4 b/src/resources/update-video.mp4 similarity index 100% rename from public/resources/update-video.mp4 rename to src/resources/update-video.mp4 diff --git a/src/seqta/ui/ImageBackgrounds.ts b/src/seqta/ui/ImageBackgrounds.ts index 15782c9a..645e44d2 100644 --- a/src/seqta/ui/ImageBackgrounds.ts +++ b/src/seqta/ui/ImageBackgrounds.ts @@ -1,4 +1,4 @@ -import browser from 'webextension-polyfill' +import backgroundPage from 'url:./background/background.html' export async function appendBackgroundToUI() { console.log('Starting appendBackgroundToUI...'); @@ -10,6 +10,6 @@ export async function appendBackgroundToUI() { background.id = 'background'; background.classList.add('imageBackground'); background.setAttribute('excludeDarkCheck', 'true'); - background.src = browser.runtime.getURL('backgrounds/background.html'); + background.src = backgroundPage; parent!.appendChild(background); } diff --git a/src/seqta/ui/Loading.ts b/src/seqta/ui/Loading.ts index a0c93768..528a6b4b 100644 --- a/src/seqta/ui/Loading.ts +++ b/src/seqta/ui/Loading.ts @@ -54,18 +54,21 @@ export default function loading() { } .big-circle { margin: -88px; + will-change: transform; animation-timing-function: ease; animation: spin 3s linear infinite; -moz-animation: spin 3s linear infinite; } .small-circle { margin: -66px; + will-change: transform; animation-timing-function: ease; animation: spin 3s linear infinite; -moz-animation: spin 3s linear infinite; } .outer-circle { margin: -108px; + will-change: transform; animation-direction: alternate-reverse; animation: spinback 1s linear infinite; -moz-animation: spinback 1s linear infinite; diff --git a/public/backgrounds/background.html b/src/seqta/ui/background/background.html similarity index 65% rename from public/backgrounds/background.html rename to src/seqta/ui/background/background.html index e6561a62..eeb2bc55 100644 --- a/public/backgrounds/background.html +++ b/src/seqta/ui/background/background.html @@ -19,14 +19,11 @@ object-fit: cover; } - -
    - -
    +
    - + diff --git a/public/backgrounds/background.js b/src/seqta/ui/background/background.ts similarity index 68% rename from public/backgrounds/background.js rename to src/seqta/ui/background/background.ts index 68490476..71ac3f97 100644 --- a/public/backgrounds/background.js +++ b/src/seqta/ui/background/background.ts @@ -1,23 +1,33 @@ -// Open the database -const openDB = () => { +interface Data { + blob: Blob; + type: 'image' | 'video'; +} + +interface DatabaseEventTarget extends EventTarget { + result: IDBDatabase; +} + +interface DatabaseEvent extends Event { + target: DatabaseEventTarget; +} + +const openDB = (): Promise => { return new Promise((resolve, reject) => { const request = indexedDB.open('MyDatabase', 1); request.onerror = () => reject(request.error); request.onsuccess = () => resolve(request.result); - request.onupgradeneeded = (event) => { - const db = event.target.result; - db.createObjectStore('backgrounds', { keyPath: 'id' }); + request.onupgradeneeded = (event: IDBVersionChangeEvent) => { + // @ts-expect-error + event?.target?.result.createObjectStore('backgrounds', { keyPath: 'id' }); }; }); }; -// Modified Read Data from IndexedDB -const readData = async () => { +const readData = async (): Promise => { const selectedBackground = localStorage.getItem('selectedBackground'); if (!selectedBackground) { - console.log('No selected background in local storage.'); return null; } @@ -26,20 +36,20 @@ const readData = async () => { const store = tx.objectStore('backgrounds'); const request = store.get(selectedBackground); - return await new Promise((resolve, reject) => { - request.onsuccess = () => resolve(request.result); + return new Promise((resolve, reject) => { + request.onsuccess = () => resolve(request.result as Data); request.onerror = () => reject(request.error); }); }; -const updateBackground = async () => { +const updateBackground = async (): Promise => { try { const data = await readData(); if (!data) { console.log('No data found in IndexedDB.'); const container = document.getElementById('media-container'); - const currentMedia = container.querySelector('.current-media'); + const currentMedia = container?.querySelector('.current-media'); if (currentMedia) { currentMedia.remove(); } @@ -64,19 +74,19 @@ const updateBackground = async () => { } // Mark the old element for removal - const oldElement = container.querySelector('.current-media'); + const oldElement = container?.querySelector('.current-media'); if (oldElement) { oldElement.classList.remove('current-media'); oldElement.classList.add('old-media'); } // Add the new element and mark it as current - newElement.classList.add('current-media'); - container.appendChild(newElement); + newElement?.classList.add('current-media'); + container?.appendChild(newElement as Node); // Delay removal of old element setTimeout(() => { - const oldMedia = container.querySelector('.old-media'); + const oldMedia = container?.querySelector('.old-media'); if (oldMedia) { oldMedia.remove(); } @@ -87,13 +97,12 @@ const updateBackground = async () => { }; // Main function to run on page load -const main = async () => { - await updateBackground(); // Initial background update +const main = async (): Promise => { + await updateBackground(); // Listen for changes to local storage window.addEventListener('storage', async (event) => { if (event.key === 'selectedBackground') { - await updateBackground(); // Update background if 'selectedBackground' changes } }); }; diff --git a/src/seqta/ui/colors/Manager.ts b/src/seqta/ui/colors/Manager.ts index 43f49ba6..a8c68782 100644 --- a/src/seqta/ui/colors/Manager.ts +++ b/src/seqta/ui/colors/Manager.ts @@ -1,9 +1,12 @@ import browser from 'webextension-polyfill' -import { GetThresholdOfColor, GetCSSElement } from '../../../SEQTA'; +import { GetThresholdOfColor } from '../../../SEQTA'; import { lightenAndPaleColor } from './lightenAndPaleColor'; import ColorLuminance from './ColorLuminance'; import { SettingsState } from '../../../types/storage'; +import darkLogo from 'url:../../../resources/icons/betterseqta-light-full.png'; +import lightLogo from 'url:../../../resources/icons/betterseqta-dark-full.png'; + // Helper functions const setCSSVar = (varName: any, value: any) => document.documentElement.style.setProperty(varName, value); const getChromeURL = (path: any) => browser.runtime.getURL(path); @@ -36,10 +39,10 @@ export function updateAllColors(storedSetting: any, newColor = null) { let modeProps = {}; if (DarkMode !== null) { modeProps = DarkMode ? { - '--betterseqta-logo': `url(${getChromeURL('icons/betterseqta-light-full.png')})` + '--betterseqta-logo': `url(${darkLogo})` } : { '--better-pale': lightenAndPaleColor(selectedColor), - '--betterseqta-logo': `url(${getChromeURL('icons/betterseqta-dark-full.png')})` + '--betterseqta-logo': `url(${lightLogo})` }; if (DarkMode) { @@ -67,7 +70,6 @@ export function updateAllColors(storedSetting: any, newColor = null) { } let alliframes = document.getElementsByTagName('iframe'); - let fileref = GetCSSElement('css/iframe.css'); for (let i = 0; i < alliframes.length; i++) { const element = alliframes[i]; @@ -76,11 +78,11 @@ export function updateAllColors(storedSetting: any, newColor = null) { continue; } - (element.contentDocument!.documentElement.childNodes[1] as HTMLIFrameElement).style.color = - DarkMode ? 'white' : 'black'; - element.contentDocument!.documentElement.firstChild!.appendChild( - fileref, - ); + if (DarkMode) { + element.contentDocument?.body.classList.add('dark'); + } else { + element.contentDocument?.body.classList.remove('dark'); + } } } diff --git a/src/seqta/utils/GetPrefs.ts b/src/seqta/utils/GetPrefs.ts deleted file mode 100644 index 81bf86ba..00000000 --- a/src/seqta/utils/GetPrefs.ts +++ /dev/null @@ -1,6 +0,0 @@ -const GetPrefs = await fetch(`${location.origin}/seqta/student/load/prefs?`, { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ asArray: true, request: 'userPrefs' }) - }) - export const response = await GetPrefs.json() \ No newline at end of file diff --git a/src/seqta/utils/StorageListener.ts b/src/seqta/utils/StorageListener.ts index 9111fc17..75553bca 100644 --- a/src/seqta/utils/StorageListener.ts +++ b/src/seqta/utils/StorageListener.ts @@ -45,7 +45,6 @@ export default class StorageListener { case 'DarkMode': this.darkMode = changes.DarkMode.newValue; - console.log(this.darkMode); break; case 'customshortcuts': diff --git a/tailwind.config.js b/tailwind.config.js index 82b6b0df..f672d7be 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -1,20 +1,35 @@ /** @type {import('tailwindcss').Config} */ export default { content: [ - './index.html', - './src/**/*.{js,ts,jsx,tsx}', + "./src/**/*.{js,ts,jsx,tsx,html}", ], - darkMode: 'class', + darkMode: "class", theme: { fontSize: { - 'xs': '.65rem', - 'sm': '.775rem', - 'base': '0.65rem', - 'md': '0.65rem', - 'lg': '1rem', - 'xl': '1.25rem', - '2xl': '1.5rem', - '3xl': '1.875rem', + "xs": ".65rem", + "sm": ".775rem", + "base": "0.65rem", + "md": "0.65rem", + "lg": "1rem", + "xl": "1.25rem", + "2xl": "1.5rem", + "3xl": "1.875rem", + "4xl": "2.25rem", + "5xl": "3rem", + "6xl": "4rem", + "7xl": "5rem", + "8xl": "6rem", + "9xl": "8rem", + "10xl": "10rem", + "11xl": "12rem", + "12xl": "14rem", + "13xl": "16rem", + "14xl": "18rem", + }, + extend: { + fontFamily: { + "IconFamily": "IconFamily" + } } }, plugins: [], diff --git a/webpack.config.js b/webpack.config.js deleted file mode 100644 index d1f3eac7..00000000 --- a/webpack.config.js +++ /dev/null @@ -1,87 +0,0 @@ -import path from 'path'; -import MiniCssExtractPlugin from 'mini-css-extract-plugin'; -import CopyWebpackPlugin from 'copy-webpack-plugin'; -import ESLintPlugin from 'eslint-webpack-plugin'; -import { sentryWebpackPlugin } from '@sentry/webpack-plugin'; - - -export default { - target: 'web', - node: { - __dirname: true - }, - performance: { - hints: false, - maxEntrypointSize: 512000, - maxAssetSize: 512000, - }, - devtool: 'source-map', - entry: { - SEQTA: './src/SEQTA.ts', - background: './src/background.ts', - 'css/documentload': './src/css/documentload.scss', - 'css/iframe': './src/css/iframe.scss', - 'css/injected': './src/css/injected.scss', - }, - output: { - filename: (pathData) => { - const name = pathData.chunk.name.replace('css-', ''); - return name.includes('css') ? `css/${name}.js` : `${name}.js`; - }, - // eslint-disable-next-line no-undef - path: path.resolve('build'), - publicPath: '', - }, - module: { - rules: [ - { - test: /\.(css|scss)$/, - use: [ - MiniCssExtractPlugin.loader, - { - loader: 'css-loader', - options: { - importLoaders: 2 - } - }, - 'sass-loader' - ] - }, - { - test: /\.(png|svg|jpg|jpeg|gif)$/i, - type: 'asset/resource', - generator: { - filename: 'src/[path][name][ext]', - }, - }, - { - test: /\.tsx?$/, - use: 'ts-loader', - exclude: /node_modules/, - } - ], - }, - resolve: { - extensions: ['.tsx', '.ts', '.js'], - }, - plugins: [ - new ESLintPlugin(), - new MiniCssExtractPlugin({ - filename: '[name].css' - }), - new CopyWebpackPlugin({ - patterns: [ - { from: 'public', to: '.' }, - { from: 'src/css/preview', to: 'css/preview' }, - { from: 'node_modules/webextension-polyfill/dist/browser-polyfill.js' }, - { from: 'interface/dist/client', to: 'client' }, - { from: 'interface/dist/index.html', to: 'interface/index.html' } - ], - }), - sentryWebpackPlugin({ - authToken: process.env.SENTRY_AUTH_TOKEN, - org: "betterseqta-plus", - project: "betterseqtaplus-main", - }), - ], -};