From 4a80c8552b4c927fd20abcd76b8cb30da5af2b23 Mon Sep 17 00:00:00 2001 From: thislight Date: Sun, 14 Jul 2024 20:28:44 +0800 Subject: [PATCH 001/300] initial commit --- .browserlist | 1 + .editorconfig | 6 + .gitignore | 2 + .prettierrc | 0 index.html | 13 + package.json | 44 + pnpm-lock.yaml | 4882 +++++++++++++++++++++++ src/App.css | 17 + src/App.tsx | 32 + src/accounts/MastodonOAuth2Callback.tsx | 124 + src/accounts/SignIn.tsx | 173 + src/accounts/stores.ts | 174 + src/index.tsx | 5 + src/masto/acct.ts | 12 + src/masto/clients.ts | 41 + src/masto/timelines.ts | 75 + src/masto/toot.ts | 35 + src/material/Button.tsx | 21 + src/material/Img.tsx | 121 + src/material/Scaffold.tsx | 58 + src/material/Tab.tsx | 80 + src/material/Tabs.tsx | 165 + src/material/TextField.tsx | 80 + src/material/cards.module.css | 55 + src/material/form.module.css | 80 + src/material/material.module.css | 65 + src/material/mui.ts | 16 + src/material/theme.css | 135 + src/material/toolbar.module.css | 0 src/material/typography.module.css | 48 + src/material/typography.tsx | 87 + src/platform/anim.ts | 11 + src/platform/timesrc.ts | 42 + src/settings/stores.ts | 7 + src/timelines/CompactToot.tsx | 57 + src/timelines/Home.tsx | 336 ++ src/timelines/MediaAttachmentGrid.tsx | 80 + src/timelines/MediaViewer.tsx | 378 ++ src/timelines/ProfileMenuButton.tsx | 121 + src/timelines/RegularToot.tsx | 259 ++ src/timelines/TootBottomSheet.tsx | 8 + src/timelines/TootThread.tsx | 86 + src/timelines/toot.module.css | 209 + src/utils.tsx | 26 + tsconfig.json | 15 + vite.config.ts | 27 + 46 files changed, 8309 insertions(+) create mode 100644 .browserlist create mode 100644 .editorconfig create mode 100644 .gitignore create mode 100644 .prettierrc create mode 100644 index.html create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 src/App.css create mode 100644 src/App.tsx create mode 100644 src/accounts/MastodonOAuth2Callback.tsx create mode 100644 src/accounts/SignIn.tsx create mode 100644 src/accounts/stores.ts create mode 100644 src/index.tsx create mode 100644 src/masto/acct.ts create mode 100644 src/masto/clients.ts create mode 100644 src/masto/timelines.ts create mode 100644 src/masto/toot.ts create mode 100644 src/material/Button.tsx create mode 100644 src/material/Img.tsx create mode 100644 src/material/Scaffold.tsx create mode 100644 src/material/Tab.tsx create mode 100644 src/material/Tabs.tsx create mode 100644 src/material/TextField.tsx create mode 100644 src/material/cards.module.css create mode 100644 src/material/form.module.css create mode 100644 src/material/material.module.css create mode 100644 src/material/mui.ts create mode 100644 src/material/theme.css create mode 100644 src/material/toolbar.module.css create mode 100644 src/material/typography.module.css create mode 100644 src/material/typography.tsx create mode 100644 src/platform/anim.ts create mode 100644 src/platform/timesrc.ts create mode 100644 src/settings/stores.ts create mode 100644 src/timelines/CompactToot.tsx create mode 100644 src/timelines/Home.tsx create mode 100644 src/timelines/MediaAttachmentGrid.tsx create mode 100644 src/timelines/MediaViewer.tsx create mode 100644 src/timelines/ProfileMenuButton.tsx create mode 100644 src/timelines/RegularToot.tsx create mode 100644 src/timelines/TootBottomSheet.tsx create mode 100644 src/timelines/TootThread.tsx create mode 100644 src/timelines/toot.module.css create mode 100644 src/utils.tsx create mode 100644 tsconfig.json create mode 100644 vite.config.ts diff --git a/.browserlist b/.browserlist new file mode 100644 index 0000000..b547231 --- /dev/null +++ b/.browserlist @@ -0,0 +1 @@ +>0.3% and not dead, firefox>=98, safari>=15.4, chrome>=84 \ No newline at end of file diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..cf71e4c --- /dev/null +++ b/.editorconfig @@ -0,0 +1,6 @@ +root = true + +[*] +trim_trailing_whitespace = true +indent_size = 2 +indent_style = space diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d26c746 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +node_modules +dist/ \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..e69de29 diff --git a/index.html b/index.html new file mode 100644 index 0000000..6d30de8 --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + Tutu + + + + +
+ + \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..466596f --- /dev/null +++ b/package.json @@ -0,0 +1,44 @@ +{ + "$schema": "https://json.schemastore.org/package", + "name": "tutu", + "version": "0.1.0", + "description": "", + "private": true, + "type": "module", + "scripts": { + "dev": "vite --host 0.0.0.0", + "preview": "vite preview", + "prepare": "vite build" + }, + "keywords": [], + "author": "Rubicon", + "license": "Apache-2.0", + "devDependencies": { + "@suid/vite-plugin": "^0.2.0", + "@types/hammerjs": "^2.0.45", + "postcss": "^8.4.39", + "prettier": "^3.3.2", + "typescript": "^5.5.2", + "vite": "^5.3.2", + "vite-plugin-pwa": "^0.20.0", + "vite-plugin-solid": "^2.10.2", + "vite-plugin-solid-styled": "^0.11.1" + }, + "dependencies": { + "@nanostores/persistent": "^0.9.1", + "@nanostores/solid": "^0.4.2", + "@solid-primitives/event-listener": "^2.3.3", + "@solid-primitives/resize-observer": "^2.0.25", + "@solidjs/router": "^0.11.5", + "@suid/icons-material": "^0.7.0", + "@suid/material": "^0.16.0", + "blurhash": "^2.0.5", + "date-fns": "^3.6.0", + "hammerjs": "^2.0.8", + "masto": "^6.8.0", + "nanostores": "^0.9.5", + "solid-js": "^1.8.18", + "solid-styled": "^0.11.1" + }, + "packageManager": "pnpm@9.5.0+sha512.140036830124618d624a2187b50d04289d5a087f326c9edfc0ccd733d76c4f52c3a313d4fc148794a2a9d81553016004e6742e8cf850670268a7387fc220c903" +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..31b4c61 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,4882 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@nanostores/persistent': + specifier: ^0.9.1 + version: 0.9.1(nanostores@0.9.5) + '@nanostores/solid': + specifier: ^0.4.2 + version: 0.4.2(nanostores@0.9.5)(solid-js@1.8.18) + '@solid-primitives/event-listener': + specifier: ^2.3.3 + version: 2.3.3(solid-js@1.8.18) + '@solid-primitives/resize-observer': + specifier: ^2.0.25 + version: 2.0.25(solid-js@1.8.18) + '@solidjs/router': + specifier: ^0.11.5 + version: 0.11.5(solid-js@1.8.18) + '@suid/icons-material': + specifier: ^0.7.0 + version: 0.7.0(solid-js@1.8.18) + '@suid/material': + specifier: ^0.16.0 + version: 0.16.0(solid-js@1.8.18) + blurhash: + specifier: ^2.0.5 + version: 2.0.5 + date-fns: + specifier: ^3.6.0 + version: 3.6.0 + hammerjs: + specifier: ^2.0.8 + version: 2.0.8 + masto: + specifier: ^6.8.0 + version: 6.8.0 + nanostores: + specifier: ^0.9.5 + version: 0.9.5 + solid-js: + specifier: ^1.8.18 + version: 1.8.18 + solid-styled: + specifier: ^0.11.1 + version: 0.11.1(solid-js@1.8.18) + devDependencies: + '@suid/vite-plugin': + specifier: ^0.2.0 + version: 0.2.0(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2)) + '@types/hammerjs': + specifier: ^2.0.45 + version: 2.0.45 + postcss: + specifier: ^8.4.39 + version: 8.4.39 + prettier: + specifier: ^3.3.2 + version: 3.3.2 + typescript: + specifier: ^5.5.2 + version: 5.5.2 + vite: + specifier: ^5.3.2 + version: 5.3.2(lightningcss@1.25.1)(terser@5.31.2) + vite-plugin-pwa: + specifier: ^0.20.0 + version: 0.20.0(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.1.0) + vite-plugin-solid: + specifier: ^2.10.2 + version: 2.10.2(solid-js@1.8.18)(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2)) + vite-plugin-solid-styled: + specifier: ^0.11.1 + version: 0.11.1(rollup@2.79.1)(solid-styled@0.11.1(solid-js@1.8.18))(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2)) + +packages: + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@apideck/better-ajv-errors@0.3.6': + resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} + engines: {node: '>=10'} + peerDependencies: + ajv: '>=8' + + '@babel/code-frame@7.24.7': + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.24.7': + resolution: {integrity: sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.24.8': + resolution: {integrity: sha512-c4IM7OTg6k1Q+AJ153e2mc2QVTezTwnb4VzquwcyiEzGnW0Kedv4do/TrkU98qPeC5LNiMt/QXwIjzYXLBpyZg==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.24.7': + resolution: {integrity: sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.24.7': + resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.24.8': + resolution: {integrity: sha512-47DG+6F5SzOi0uEvK4wMShmn5yY0mVjVJoWTphdY2B4Rx9wHgjK7Yhtr0ru6nE+sn0v38mzrWOlah0p/YlHHOQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-annotate-as-pure@7.24.7': + resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7': + resolution: {integrity: sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.24.7': + resolution: {integrity: sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.24.8': + resolution: {integrity: sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-create-class-features-plugin@7.24.8': + resolution: {integrity: sha512-4f6Oqnmyp2PP3olgUMmOwC3akxSm5aBYraQ6YDdKy7NcAMkDECHWG0DEnV6M2UAkERgIBhYt8S27rURPg7SxWA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-create-regexp-features-plugin@7.24.7': + resolution: {integrity: sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-define-polyfill-provider@0.6.2': + resolution: {integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + '@babel/helper-environment-visitor@7.24.7': + resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-function-name@7.24.7': + resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-hoist-variables@7.24.7': + resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-member-expression-to-functions@7.24.8': + resolution: {integrity: sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.18.6': + resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.24.7': + resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.24.7': + resolution: {integrity: sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-module-transforms@7.24.8': + resolution: {integrity: sha512-m4vWKVqvkVAWLXfHCCfff2luJj86U+J0/x+0N3ArG/tP0Fq7zky2dYwMbtPmkc/oulkkbjdL3uWzuoBwQ8R00Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-optimise-call-expression@7.24.7': + resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.24.7': + resolution: {integrity: sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.24.8': + resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-remap-async-to-generator@7.24.7': + resolution: {integrity: sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-replace-supers@7.24.7': + resolution: {integrity: sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-simple-access@7.24.7': + resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-skip-transparent-expression-wrappers@7.24.7': + resolution: {integrity: sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-split-export-declaration@7.24.7': + resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.24.7': + resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.24.8': + resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.24.7': + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.24.7': + resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.24.8': + resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} + engines: {node: '>=6.9.0'} + + '@babel/helper-wrap-function@7.24.7': + resolution: {integrity: sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.24.7': + resolution: {integrity: sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==} + engines: {node: '>=6.9.0'} + + '@babel/highlight@7.24.7': + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.24.7': + resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/parser@7.24.8': + resolution: {integrity: sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.7': + resolution: {integrity: sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.7': + resolution: {integrity: sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7': + resolution: {integrity: sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.7': + resolution: {integrity: sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-async-generators@7.8.4': + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-properties@7.12.13': + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-static-block@7.14.5': + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-dynamic-import@7.8.3': + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-export-namespace-from@7.8.3': + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-assertions@7.24.7': + resolution: {integrity: sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.24.7': + resolution: {integrity: sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-json-strings@7.8.3': + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.24.7': + resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-numeric-separator@7.10.4': + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-object-rest-spread@7.8.3': + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3': + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-chaining@7.8.3': + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-private-property-in-object@7.14.5': + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-top-level-await@7.14.5': + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6': + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-arrow-functions@7.24.7': + resolution: {integrity: sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-generator-functions@7.24.7': + resolution: {integrity: sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-to-generator@7.24.7': + resolution: {integrity: sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoped-functions@7.24.7': + resolution: {integrity: sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoping@7.24.7': + resolution: {integrity: sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-properties@7.24.7': + resolution: {integrity: sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-static-block@7.24.7': + resolution: {integrity: sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + + '@babel/plugin-transform-classes@7.24.8': + resolution: {integrity: sha512-VXy91c47uujj758ud9wx+OMgheXm4qJfyhj1P18YvlrQkNOSrwsteHk+EFS3OMGfhMhpZa0A+81eE7G4QC+3CA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-computed-properties@7.24.7': + resolution: {integrity: sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-destructuring@7.24.8': + resolution: {integrity: sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-dotall-regex@7.24.7': + resolution: {integrity: sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-duplicate-keys@7.24.7': + resolution: {integrity: sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-dynamic-import@7.24.7': + resolution: {integrity: sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-exponentiation-operator@7.24.7': + resolution: {integrity: sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-export-namespace-from@7.24.7': + resolution: {integrity: sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-for-of@7.24.7': + resolution: {integrity: sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-function-name@7.24.7': + resolution: {integrity: sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-json-strings@7.24.7': + resolution: {integrity: sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-literals@7.24.7': + resolution: {integrity: sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-logical-assignment-operators@7.24.7': + resolution: {integrity: sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-member-expression-literals@7.24.7': + resolution: {integrity: sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-amd@7.24.7': + resolution: {integrity: sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-commonjs@7.24.8': + resolution: {integrity: sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-systemjs@7.24.7': + resolution: {integrity: sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-umd@7.24.7': + resolution: {integrity: sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-named-capturing-groups-regex@7.24.7': + resolution: {integrity: sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-new-target@7.24.7': + resolution: {integrity: sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-nullish-coalescing-operator@7.24.7': + resolution: {integrity: sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-numeric-separator@7.24.7': + resolution: {integrity: sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-rest-spread@7.24.7': + resolution: {integrity: sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-super@7.24.7': + resolution: {integrity: sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-catch-binding@7.24.7': + resolution: {integrity: sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-chaining@7.24.8': + resolution: {integrity: sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-parameters@7.24.7': + resolution: {integrity: sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-methods@7.24.7': + resolution: {integrity: sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-property-in-object@7.24.7': + resolution: {integrity: sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-property-literals@7.24.7': + resolution: {integrity: sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-regenerator@7.24.7': + resolution: {integrity: sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-reserved-words@7.24.7': + resolution: {integrity: sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-shorthand-properties@7.24.7': + resolution: {integrity: sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-spread@7.24.7': + resolution: {integrity: sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-sticky-regex@7.24.7': + resolution: {integrity: sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-template-literals@7.24.7': + resolution: {integrity: sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typeof-symbol@7.24.8': + resolution: {integrity: sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-escapes@7.24.7': + resolution: {integrity: sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-property-regex@7.24.7': + resolution: {integrity: sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-regex@7.24.7': + resolution: {integrity: sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-sets-regex@7.24.7': + resolution: {integrity: sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/preset-env@7.24.8': + resolution: {integrity: sha512-vObvMZB6hNWuDxhSaEPTKCwcqkAIuDtE+bQGn4XMXne1DSLzFVY8Vmj1bm+mUQXYNN8NmaQEO+r8MMbzPr1jBQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-modules@0.1.6-no-external-plugins': + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + + '@babel/regjsgen@0.8.0': + resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} + + '@babel/runtime@7.24.8': + resolution: {integrity: sha512-5F7SDGs1T72ZczbRwbGO9lQi0NLjQxzl6i4lJxLxfW9U5UluCSyEJeniWvnhl3/euNiqQVbo8zruhsDfid0esA==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.24.7': + resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.24.7': + resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.24.8': + resolution: {integrity: sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.24.7': + resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.24.8': + resolution: {integrity: sha512-SkSBEHwwJRU52QEVZBmMBnE5Ux2/6WU1grdYyOhpbCNxbmJrDuDCphBzKZSO3taf0zztp+qkWlymE5tVL5l0TA==} + engines: {node: '>=6.9.0'} + + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@jridgewell/gen-mapping@0.3.5': + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/source-map@0.3.6': + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + + '@jridgewell/sourcemap-codec@1.4.15': + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@nanostores/persistent@0.9.1': + resolution: {integrity: sha512-ow57Hxm5VMaI5GHET/cVk8hX/iKMmbhcGrB9owfN8p8OHiiJgUlYxe1giacwlAALJXAh2t8bxXh42hHb64BCEA==} + engines: {node: ^16.0.0 || ^18.0.0 || >=20.0.0} + peerDependencies: + nanostores: ^0.9.0 + + '@nanostores/solid@0.4.2': + resolution: {integrity: sha512-8v32+C9KdRbnvP4x4Oiw/CtL1tZwbRxYfmFsPIY9PXevCgxSFnicG6VnLLtNAR7F0kl8Ec7OROHO34Ffv0KDzg==} + peerDependencies: + nanostores: '>=0.8.0' + solid-js: ^1.6.0 + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@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'} + + '@popperjs/core@2.11.8': + resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} + + '@rollup/plugin-babel@5.3.1': + resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} + engines: {node: '>= 10.0.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@types/babel__core': ^7.1.9 + rollup: ^1.20.0||^2.0.0 + peerDependenciesMeta: + '@types/babel__core': + optional: true + + '@rollup/plugin-node-resolve@15.2.3': + resolution: {integrity: sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^2.78.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/plugin-replace@2.4.2': + resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + + '@rollup/plugin-terser@0.4.4': + resolution: {integrity: sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/pluginutils@3.1.0': + resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + + '@rollup/pluginutils@5.1.0': + resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.18.0': + resolution: {integrity: sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.18.0': + resolution: {integrity: sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.18.0': + resolution: {integrity: sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.18.0': + resolution: {integrity: sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-linux-arm-gnueabihf@4.18.0': + resolution: {integrity: sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.18.0': + resolution: {integrity: sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.18.0': + resolution: {integrity: sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.18.0': + resolution: {integrity: sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.18.0': + resolution: {integrity: sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.18.0': + resolution: {integrity: sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.18.0': + resolution: {integrity: sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.18.0': + resolution: {integrity: sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.18.0': + resolution: {integrity: sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.18.0': + resolution: {integrity: sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.18.0': + resolution: {integrity: sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.18.0': + resolution: {integrity: sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==} + cpu: [x64] + os: [win32] + + '@solid-primitives/event-listener@2.3.3': + resolution: {integrity: sha512-DAJbl+F0wrFW2xmcV8dKMBhk9QLVLuBSW+TR4JmIfTaObxd13PuL7nqaXnaYKDWOYa6otB00qcCUIGbuIhSUgQ==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/resize-observer@2.0.25': + resolution: {integrity: sha512-jVDXkt2MiriYRaz4DYs62185d+6jQ+1DCsR+v7f6XMsIJJuf963qdBRFjtZtKXBaxdPNMyuPeDgf5XQe3EoDJg==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/rootless@1.4.5': + resolution: {integrity: sha512-GFJE9GC3ojx0aUKqAUZmQPyU8fOVMtnVNrkdk2yS4kd17WqVSpXpoTmo9CnOwA+PG7FTzdIkogvfLQSLs4lrww==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/static-store@0.0.8': + resolution: {integrity: sha512-ZecE4BqY0oBk0YG00nzaAWO5Mjcny8Fc06CdbXadH9T9lzq/9GefqcSe/5AtdXqjvY/DtJ5C6CkcjPZO0o/eqg==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/utils@6.2.3': + resolution: {integrity: sha512-CqAwKb2T5Vi72+rhebSsqNZ9o67buYRdEJrIFzRXz3U59QqezuuxPsyzTSVCacwS5Pf109VRsgCJQoxKRoECZQ==} + peerDependencies: + solid-js: ^1.6.12 + + '@solidjs/router@0.11.5': + resolution: {integrity: sha512-nclebUUufZT37rB5l0LbJn92vZwJOhYVltfjfLFI3yAcMlwiil5JOy6X2FEgekWsoX29No/GCBTkYfrSZCRfaw==} + peerDependencies: + solid-js: ^1.8.6 + + '@suid/base@0.9.0': + resolution: {integrity: sha512-uj6kYkPB2/79iKJQSIKrSqxA0H0/1vcxxsyclHRMdU/RL3FVGUfasmAMJR7E6YVLi78A+fsabBKeu/yQSrr/Hg==} + peerDependencies: + solid-js: ^1.8.16 + + '@suid/css@0.4.0': + resolution: {integrity: sha512-yzHAlf1CVi7n0SvUrMgs8Z49UiS9669+td1w1frekhRQuRbkXhHoyJkvovaDVJlWRmCPA8Q0f1OTr0uDCUg9mQ==} + + '@suid/icons-material@0.7.0': + resolution: {integrity: sha512-d40gG5GBE/UrUYvVkf53zzhmNIV9eb4z52DUON2fGidprf/LkD4WdamwHKS1QfElvHnuaOci1VjV6cHdblzPBQ==} + peerDependencies: + solid-js: ^1.8.16 + + '@suid/material@0.16.0': + resolution: {integrity: sha512-qr/xdkl8Ekp+GO4m5VhXLi/CBrmUXALc8MP75p8y+0ZMXB+RLwSsZK1z1i9EjmEsmR5RC6G9VFJPWrpMI7j32A==} + peerDependencies: + solid-js: ^1.8.16 + + '@suid/styled-engine@0.7.0': + resolution: {integrity: sha512-yaanC2KI5yl8QrKL2e9Y89XJvqd3wrjZUCNctWWUF+1uypmoXcoP6N6MQvzr3+78fT0iLeEfn3b/lXl8x0+jAw==} + peerDependencies: + solid-js: ^1.8.16 + + '@suid/system@0.11.0': + resolution: {integrity: sha512-DVywaHMG97I7j0KjgOXTQlf6SG72sA5QSsNJ3RkED+dsjvHjkVgBbOkKNR04RHlwlItbR2Wdhu7ZlREvSsneeQ==} + peerDependencies: + solid-js: ^1.8.16 + + '@suid/types@0.6.0': + resolution: {integrity: sha512-W9RtmxQe0ZLvAwtoQtKb96SGNGNIWTskhxkXu5FeH5IPyvU5PpEWFLsyg3rmzLVAUHF1WsQwXBv/EZwwAjFkGQ==} + peerDependencies: + solid-js: ^1.8.16 + + '@suid/utils@0.9.0': + resolution: {integrity: sha512-YDudkXz0PXGlzl6s9OFCsRkdCTn6RBSx6Nb8o+np/SfOQ+Tnx3abgjNGkt10xZMRbobBr0lr6asmkYUQQRhHYA==} + peerDependencies: + solid-js: ^1.8.16 + + '@suid/vite-plugin@0.2.0': + resolution: {integrity: sha512-DDTbtBGS27EzMkIAdn0cLmlyYriBzY7+O8inMgYaSUIxWAPX0qKk5ZNB3qJaUGZXxwcxV7BSj3lOPcSISGvZxA==} + peerDependencies: + vite: ^5.0.0 + + '@surma/rollup-plugin-off-main-thread@2.2.3': + resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + + '@types/css-tree@2.3.8': + resolution: {integrity: sha512-zABG3nI2UENsx7AQv63tI5/ptoAG/7kQR1H0OvG+WTWYHOR5pfAT3cGgC8SdyCrgX/TTxJBZNmx82IjCXs1juQ==} + + '@types/estree@0.0.39': + resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} + + '@types/estree@1.0.5': + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + + '@types/hammerjs@2.0.45': + resolution: {integrity: sha512-qkcUlZmX6c4J8q45taBKTL3p+LbITgyx7qhlPYOdOHZB7B31K0mXbP5YA7i7SgDeEGuI9MnumiKPEMrxg8j3KQ==} + + '@types/resolve@1.20.2': + resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} + + '@types/trusted-types@2.0.7': + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + + acorn@8.12.0: + resolution: {integrity: sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + engines: {node: '>= 0.4'} + + async@3.2.5: + resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} + + at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + babel-plugin-jsx-dom-expressions@0.37.23: + resolution: {integrity: sha512-Y/r8LyLi/njnwPTaDuPEReWk30FJ1KplloYvcFUhHmiH1F7yVVj5mWojD7mbO/IruKyvOs9OIPUoeMi3Z++J4w==} + peerDependencies: + '@babel/core': ^7.20.12 + + babel-plugin-polyfill-corejs2@0.4.11: + resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-corejs3@0.10.4: + resolution: {integrity: sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-regenerator@0.6.2: + resolution: {integrity: sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-preset-solid@1.8.18: + resolution: {integrity: sha512-ky0FA4cCS9dk+xYBBItHoxtbRnaDIOGpmHLFqKPaR81hpMbJBOiLOZia2hT0JBwx4zn/D2OjMRvRr6kqtRMoUw==} + peerDependencies: + '@babel/core': ^7.0.0 + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + blurhash@2.0.5: + resolution: {integrity: sha512-cRygWd7kGBQO3VEhPiTgq4Wc43ctsM+o46urrmPOiuAe+07fzlSB9OJVdpgDL0jPqXUVQ9ht7aq7kxOeJHRK+w==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.23.1: + resolution: {integrity: sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + camel-case@4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + + caniuse-lite@1.0.30001639: + resolution: {integrity: sha512-eFHflNTBIlFwP2AIKaYuBQN/apnUoKNhBdza8ZnW/h2di4LCZ4xFqYlxUxo+LQ76KFI1PGcC1QDxMbxTZpSCAg==} + + capital-case@1.0.4: + resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + change-case@4.1.2: + resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + common-tags@1.8.2: + resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} + engines: {node: '>=4.0.0'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + constant-case@3.0.4: + resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + core-js-compat@3.37.1: + resolution: {integrity: sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==} + + crypto-random-string@2.0.0: + resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} + engines: {node: '>=8'} + + css-tree@2.3.1: + resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + + date-fns@3.6.0: + resolution: {integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==} + + debug@4.3.5: + resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + + dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + + ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + + electron-to-chromium@1.4.815: + resolution: {integrity: sha512-OvpTT2ItpOXJL7IGcYakRjHCt8L5GrrN/wHCQsRB4PQa1X9fe+X9oen245mIId7s14xvArCGSTIq644yPUKKLg==} + + es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} + + es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + + escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + estree-walker@1.0.1: + resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + events-to-async@2.0.1: + resolution: {integrity: sha512-RtnLYrMbXp4JkZIoZu+3VTqV21bNVBlJBZ4NmtwvMNqSE3qouhxv2gvLE4JJDaQc54ioPkrX74V6x+hp/hqjkQ==} + + 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'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-uri@3.0.1: + resolution: {integrity: sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==} + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + + 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] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + get-own-enumerable-property-symbols@3.0.2: + resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} + + get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + hammerjs@2.0.8: + resolution: {integrity: sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==} + engines: {node: '>=0.8.0'} + + has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + header-case@2.0.4: + resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} + + html-entities@2.3.3: + resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} + + idb@7.1.1: + resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} + + is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} + + is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + + is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.14.0: + resolution: {integrity: sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + + is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + + 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'} + + is-module@1.0.0: + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-obj@1.0.1: + resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} + engines: {node: '>=0.10.0'} + + is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + + is-regexp@1.0.0: + resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} + engines: {node: '>=0.10.0'} + + is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + + is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + + is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + + is-what@4.1.16: + resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} + engines: {node: '>=12.13'} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isomorphic-ws@5.0.0: + resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} + peerDependencies: + ws: '*' + + jake@10.9.1: + resolution: {integrity: sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==} + engines: {node: '>=10'} + hasBin: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + + jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-schema@0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + jsonpointer@5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} + + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + + lightningcss-darwin-arm64@1.25.1: + resolution: {integrity: sha512-G4Dcvv85bs5NLENcu/s1f7ehzE3D5ThnlWSDwE190tWXRQCQaqwcuHe+MGSVI/slm0XrxnaayXY+cNl3cSricw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.25.1: + resolution: {integrity: sha512-dYWuCzzfqRueDSmto6YU5SoGHvZTMU1Em9xvhcdROpmtOQLorurUZz8+xFxZ51lCO2LnYbfdjZ/gCqWEkwixNg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.25.1: + resolution: {integrity: sha512-hXoy2s9A3KVNAIoKz+Fp6bNeY+h9c3tkcx1J3+pS48CqAt+5bI/R/YY4hxGL57fWAIquRjGKW50arltD6iRt/w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.25.1: + resolution: {integrity: sha512-tWyMgHFlHlp1e5iW3EpqvH5MvsgoN7ZkylBbG2R2LWxnvH3FuWCJOhtGcYx9Ks0Kv0eZOBud789odkYLhyf1ng==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.25.1: + resolution: {integrity: sha512-Xjxsx286OT9/XSnVLIsFEDyDipqe4BcLeB4pXQ/FEA5+2uWCCuAEarUNQumRucnj7k6ftkAHUEph5r821KBccQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.25.1: + resolution: {integrity: sha512-IhxVFJoTW8wq6yLvxdPvyHv4NjzcpN1B7gjxrY3uaykQNXPHNIpChLB52+wfH+yS58zm1PL4LemUp8u9Cfp6Bw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-x64-gnu@1.25.1: + resolution: {integrity: sha512-RXIaru79KrREPEd6WLXfKfIp4QzoppZvD3x7vuTKkDA64PwTzKJ2jaC43RZHRt8BmyIkRRlmywNhTRMbmkPYpA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.25.1: + resolution: {integrity: sha512-TdcNqFsAENEEFr8fJWg0Y4fZ/nwuqTRsIr7W7t2wmDUlA8eSXVepeeONYcb+gtTj1RaXn/WgNLB45SFkz+XBZA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-win32-x64-msvc@1.25.1: + resolution: {integrity: sha512-9KZZkmmy9oGDSrnyHuxP6iMhbsgChUiu/NSgOx+U1I/wTngBStDf2i2aGRCHvFqj19HqqBEI4WuGVQBa2V6e0A==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.25.1: + resolution: {integrity: sha512-V0RMVZzK1+rCHpymRv4URK2lNhIRyO8g7U7zOFwVAhJuat74HtkjIQpQRKNCwFEYkRGpafOpmXXLoaoBcyVtBg==} + engines: {node: '>= 12.0.0'} + + lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + + lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + magic-string@0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + + masto@6.8.0: + resolution: {integrity: sha512-amooNsp4mebu/dtBZfUHP6I0mcHSDB0JoTyrCWdw2YcCOIuPX6bM0gA60nEaLZqoHSF7xG63TpdDbAYI37Fnlg==} + + mdn-data@2.0.30: + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + + merge-anything@5.1.7: + resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==} + engines: {node: '>=12.13'} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.7: + resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + engines: {node: '>=8.6'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + nanostores@0.9.5: + resolution: {integrity: sha512-Z+p+g8E7yzaWwOe5gEUB2Ox0rCEeXWYIZWmYvw/ajNYX8DlXdMvMDj8DWfM/subqPAcsf8l8Td4iAwO1DeIIRQ==} + engines: {node: ^16.0.0 || ^18.0.0 || >=20.0.0} + + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + + 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'} + + object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + param-case@3.0.4: + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + + pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + + path-case@3.0.4: + resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + postcss@8.4.39: + resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==} + engines: {node: ^10 || ^12 || >=14} + + prettier@3.3.2: + resolution: {integrity: sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==} + engines: {node: '>=14'} + hasBin: true + + pretty-bytes@5.6.0: + resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} + engines: {node: '>=6'} + + pretty-bytes@6.1.1: + resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} + engines: {node: ^14.13.1 || >=16.0.0} + + 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==} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + regenerate-unicode-properties@10.1.1: + resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} + engines: {node: '>=4'} + + regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + regenerator-transform@0.15.2: + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} + + regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + engines: {node: '>= 0.4'} + + regexpu-core@5.3.2: + resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} + engines: {node: '>=4'} + + regjsparser@0.9.1: + resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} + hasBin: true + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rollup@2.79.1: + resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} + engines: {node: '>=10.0.0'} + hasBin: true + + rollup@4.18.0: + resolution: {integrity: sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + engines: {node: '>=0.4'} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + sentence-case@3.0.4: + resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} + + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + + seroval-plugins@1.0.7: + resolution: {integrity: sha512-GO7TkWvodGp6buMEX9p7tNyIkbwlyuAWbI6G9Ec5bhcm7mQdu3JOK1IXbEUwb3FVzSc363GraG/wLW23NSavIw==} + engines: {node: '>=10'} + peerDependencies: + seroval: ^1.0 + + seroval@1.0.7: + resolution: {integrity: sha512-n6ZMQX5q0Vn19Zq7CIKNIo7E75gPkGCFUEqDpa8jgwpYr/vScjqnQ6H09t1uIiZ0ZSK0ypEGvrYK2bhBGWsGdw==} + engines: {node: '>=10'} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + + smob@1.5.0: + resolution: {integrity: sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==} + + snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + + solid-js@1.8.18: + resolution: {integrity: sha512-cpkxDPvO/AuKBugVv6xKFd1C9VC0XZMu4VtF56IlHoux8HgyW44uqNSWbozMnVcpIzHIhS3vVXPAVZYM26jpWw==} + + solid-refresh@0.6.3: + resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==} + peerDependencies: + solid-js: ^1.3 + + solid-styled@0.11.1: + resolution: {integrity: sha512-QZN9hj+lt3gai0HPqzN5kFTn3zHIlyKWXVcYJfiuPGgprRuEB3UvUNqNcOncknJrjHLdZAn/ItA01rs9sqh8hg==} + engines: {node: '>=12'} + peerDependencies: + solid-js: ^1 + + source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + source-map@0.8.0-beta.0: + resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} + engines: {node: '>= 8'} + + sourcemap-codec@1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead + + string.prototype.matchall@4.0.11: + resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} + engines: {node: '>= 0.4'} + + string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + stringify-object@3.3.0: + resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} + engines: {node: '>=4'} + + strip-comments@2.0.1: + resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==} + engines: {node: '>=10'} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + temp-dir@2.0.0: + resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} + engines: {node: '>=8'} + + tempy@0.6.0: + resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==} + engines: {node: '>=10'} + + terser@5.31.2: + resolution: {integrity: sha512-LGyRZVFm/QElZHy/CPr/O4eNZOZIzsrQ92y4v9UJe/pFJjypje2yI3C2FmPtvUEnhadlSbmG2nXtdcjHOjCfxw==} + engines: {node: '>=10'} + hasBin: true + + to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + tr46@1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + + ts-custom-error@3.3.1: + resolution: {integrity: sha512-5OX1tzOjxWEgsr/YEUWSuPrQ00deKLh6D7OTWcvNHm12/7QPyRh8SYpyWvA4IZv8H/+GQWQEh/kwo95Q9OVW1A==} + engines: {node: '>=14.0.0'} + + tslib@2.6.3: + resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + + type-fest@0.16.0: + resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} + engines: {node: '>=10'} + + typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} + + typescript@5.5.2: + resolution: {integrity: sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==} + engines: {node: '>=14.17'} + hasBin: true + + unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + + unicode-canonical-property-names-ecmascript@2.0.0: + resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} + engines: {node: '>=4'} + + unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + + unicode-match-property-value-ecmascript@2.1.0: + resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} + engines: {node: '>=4'} + + unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + + unique-string@2.0.0: + resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} + engines: {node: '>=8'} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unplugin-solid-styled@0.11.1: + resolution: {integrity: sha512-UrDGYSoo9WM1ITo2sz3ktX9RURRNVN5ewy+P7snIGECZE0n6ebrmdPwCFI3imXzZrCMlp/yZgFCrFOvsz8ms/Q==} + engines: {node: '>=10'} + peerDependencies: + solid-styled: '>=0.9' + vite: ^3 || ^4 || ^5 + peerDependenciesMeta: + vite: + optional: true + + unplugin@1.11.0: + resolution: {integrity: sha512-3r7VWZ/webh0SGgJScpWl2/MRCZK5d3ZYFcNaeci/GQ7Teop7zf0Nl2pUuz7G21BwPd9pcUPOC5KmJ2L3WgC5g==} + engines: {node: '>=14.0.0'} + + upath@1.2.0: + resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} + engines: {node: '>=4'} + + update-browserslist-db@1.0.16: + resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + upper-case-first@2.0.2: + resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} + + upper-case@2.0.2: + resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==} + + validate-html-nesting@1.2.2: + resolution: {integrity: sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg==} + + vite-plugin-pwa@0.20.0: + resolution: {integrity: sha512-/kDZyqF8KqoXRpMUQtR5Atri/7BWayW8Gp7Kz/4bfstsV6zSFTxjREbXZYL7zSuRL40HGA+o2hvUAFRmC+bL7g==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@vite-pwa/assets-generator': ^0.2.4 + vite: ^3.1.0 || ^4.0.0 || ^5.0.0 + workbox-build: ^7.1.0 + workbox-window: ^7.1.0 + peerDependenciesMeta: + '@vite-pwa/assets-generator': + optional: true + + vite-plugin-solid-styled@0.11.1: + resolution: {integrity: sha512-aqCCcaGo0EOVVt8JTmSgxBtYDMSDY/bti1WmNBZ6zDRkiN4oqfCQyqq9v+1XtYMhulldsufS3H9h3RXWmkvG4A==} + engines: {node: '>=10'} + peerDependencies: + solid-styled: '>=0.9' + vite: ^3 || ^4 || ^5 + + vite-plugin-solid@2.10.2: + resolution: {integrity: sha512-AOEtwMe2baBSXMXdo+BUwECC8IFHcKS6WQV/1NEd+Q7vHPap5fmIhLcAzr+DUJ04/KHx/1UBU0l1/GWP+rMAPQ==} + peerDependencies: + '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.* + solid-js: ^1.7.2 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + '@testing-library/jest-dom': + optional: true + + vite@5.3.2: + resolution: {integrity: sha512-6lA7OBHBlXUxiJxbO5aAY2fsHHzDr1q7DvXYnyZycRs2Dz+dXBWuhpWHvmljTRTpQC2uvGmUFFkSHF2vGo90MA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + 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 + + vitefu@0.2.5: + resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + vite: + optional: true + + webidl-conversions@4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + + webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + + whatwg-url@7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + + which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + + workbox-background-sync@7.1.0: + resolution: {integrity: sha512-rMbgrzueVWDFcEq1610YyDW71z0oAXLfdRHRQcKw4SGihkfOK0JUEvqWHFwA6rJ+6TClnMIn7KQI5PNN1XQXwQ==} + + workbox-broadcast-update@7.1.0: + resolution: {integrity: sha512-O36hIfhjej/c5ar95pO67k1GQw0/bw5tKP7CERNgK+JdxBANQhDmIuOXZTNvwb2IHBx9hj2kxvcDyRIh5nzOgQ==} + + workbox-build@7.1.1: + resolution: {integrity: sha512-WdkVdC70VMpf5NBCtNbiwdSZeKVuhTEd5PV3mAwpTQCGAB5XbOny1P9egEgNdetv4srAMmMKjvBk4RD58LpooA==} + engines: {node: '>=16.0.0'} + + workbox-cacheable-response@7.1.0: + resolution: {integrity: sha512-iwsLBll8Hvua3xCuBB9h92+/e0wdsmSVgR2ZlvcfjepZWwhd3osumQB3x9o7flj+FehtWM2VHbZn8UJeBXXo6Q==} + + workbox-core@7.1.0: + resolution: {integrity: sha512-5KB4KOY8rtL31nEF7BfvU7FMzKT4B5TkbYa2tzkS+Peqj0gayMT9SytSFtNzlrvMaWgv6y/yvP9C0IbpFjV30Q==} + + workbox-expiration@7.1.0: + resolution: {integrity: sha512-m5DcMY+A63rJlPTbbBNtpJ20i3enkyOtSgYfv/l8h+D6YbbNiA0zKEkCUaMsdDlxggla1oOfRkyqTvl5Ni5KQQ==} + + workbox-google-analytics@7.1.0: + resolution: {integrity: sha512-FvE53kBQHfVTcZyczeBVRexhh7JTkyQ8HAvbVY6mXd2n2A7Oyz/9fIwnY406ZcDhvE4NFfKGjW56N4gBiqkrew==} + + workbox-navigation-preload@7.1.0: + resolution: {integrity: sha512-4wyAbo0vNI/X0uWNJhCMKxnPanNyhybsReMGN9QUpaePLTiDpKxPqFxl4oUmBNddPwIXug01eTSLVIFXimRG/A==} + + workbox-precaching@7.1.0: + resolution: {integrity: sha512-LyxzQts+UEpgtmfnolo0hHdNjoB7EoRWcF7EDslt+lQGd0lW4iTvvSe3v5JiIckQSB5KTW5xiCqjFviRKPj1zA==} + + workbox-range-requests@7.1.0: + resolution: {integrity: sha512-m7+O4EHolNs5yb/79CrnwPR/g/PRzMFYEdo01LqwixVnc/sbzNSvKz0d04OE3aMRel1CwAAZQheRsqGDwATgPQ==} + + workbox-recipes@7.1.0: + resolution: {integrity: sha512-NRrk4ycFN9BHXJB6WrKiRX3W3w75YNrNrzSX9cEZgFB5ubeGoO8s/SDmOYVrFYp9HMw6sh1Pm3eAY/1gVS8YLg==} + + workbox-routing@7.1.0: + resolution: {integrity: sha512-oOYk+kLriUY2QyHkIilxUlVcFqwduLJB7oRZIENbqPGeBP/3TWHYNNdmGNhz1dvKuw7aqvJ7CQxn27/jprlTdg==} + + workbox-strategies@7.1.0: + resolution: {integrity: sha512-/UracPiGhUNehGjRm/tLUQ+9PtWmCbRufWtV0tNrALuf+HZ4F7cmObSEK+E4/Bx1p8Syx2tM+pkIrvtyetdlew==} + + workbox-streams@7.1.0: + resolution: {integrity: sha512-WyHAVxRXBMfysM8ORwiZnI98wvGWTVAq/lOyBjf00pXFvG0mNaVz4Ji+u+fKa/mf1i2SnTfikoYKto4ihHeS6w==} + + workbox-sw@7.1.0: + resolution: {integrity: sha512-Hml/9+/njUXBglv3dtZ9WBKHI235AQJyLBV1G7EFmh4/mUdSQuXui80RtjDeVRrXnm/6QWgRUEHG3/YBVbxtsA==} + + workbox-window@7.1.0: + resolution: {integrity: sha512-ZHeROyqR+AS5UPzholQRDttLFqGMwP0Np8MKWAdyxsDETxq3qOAyXvqessc3GniohG6e0mAqSQyKOHmT8zPF7g==} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@8.17.1: + resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + +snapshots: + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@apideck/better-ajv-errors@0.3.6(ajv@8.17.1)': + dependencies: + ajv: 8.17.1 + json-schema: 0.4.0 + jsonpointer: 5.0.1 + leven: 3.1.0 + + '@babel/code-frame@7.24.7': + dependencies: + '@babel/highlight': 7.24.7 + picocolors: 1.0.1 + + '@babel/compat-data@7.24.7': {} + + '@babel/compat-data@7.24.8': {} + + '@babel/core@7.24.7': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.24.7 + '@babel/helper-compilation-targets': 7.24.7 + '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) + '@babel/helpers': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/template': 7.24.7 + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + convert-source-map: 2.0.0 + debug: 4.3.5 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.24.7': + dependencies: + '@babel/types': 7.24.7 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + + '@babel/generator@7.24.8': + dependencies: + '@babel/types': 7.24.8 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + + '@babel/helper-annotate-as-pure@7.24.7': + dependencies: + '@babel/types': 7.24.7 + + '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7': + dependencies: + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-compilation-targets@7.24.7': + dependencies: + '@babel/compat-data': 7.24.7 + '@babel/helper-validator-option': 7.24.7 + browserslist: 4.23.1 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-compilation-targets@7.24.8': + dependencies: + '@babel/compat-data': 7.24.8 + '@babel/helper-validator-option': 7.24.8 + browserslist: 4.23.1 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.24.8(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-function-name': 7.24.7 + '@babel/helper-member-expression-to-functions': 7.24.8 + '@babel/helper-optimise-call-expression': 7.24.7 + '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7) + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/helper-split-export-declaration': 7.24.7 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-create-regexp-features-plugin@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-annotate-as-pure': 7.24.7 + regexpu-core: 5.3.2 + semver: 6.3.1 + + '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-compilation-targets': 7.24.8 + '@babel/helper-plugin-utils': 7.24.8 + debug: 4.3.5 + lodash.debounce: 4.0.8 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + + '@babel/helper-environment-visitor@7.24.7': + dependencies: + '@babel/types': 7.24.7 + + '@babel/helper-function-name@7.24.7': + dependencies: + '@babel/template': 7.24.7 + '@babel/types': 7.24.7 + + '@babel/helper-hoist-variables@7.24.7': + dependencies: + '@babel/types': 7.24.7 + + '@babel/helper-member-expression-to-functions@7.24.8': + dependencies: + '@babel/traverse': 7.24.8 + '@babel/types': 7.24.8 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.18.6': + dependencies: + '@babel/types': 7.24.7 + + '@babel/helper-module-imports@7.24.7': + dependencies: + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-simple-access': 7.24.7 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.24.8(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-simple-access': 7.24.7 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-optimise-call-expression@7.24.7': + dependencies: + '@babel/types': 7.24.7 + + '@babel/helper-plugin-utils@7.24.7': {} + + '@babel/helper-plugin-utils@7.24.8': {} + + '@babel/helper-remap-async-to-generator@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-wrap-function': 7.24.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-replace-supers@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-member-expression-to-functions': 7.24.8 + '@babel/helper-optimise-call-expression': 7.24.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-simple-access@7.24.7': + dependencies: + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.24.7': + dependencies: + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-split-export-declaration@7.24.7': + dependencies: + '@babel/types': 7.24.7 + + '@babel/helper-string-parser@7.24.7': {} + + '@babel/helper-string-parser@7.24.8': {} + + '@babel/helper-validator-identifier@7.24.7': {} + + '@babel/helper-validator-option@7.24.7': {} + + '@babel/helper-validator-option@7.24.8': {} + + '@babel/helper-wrap-function@7.24.7': + dependencies: + '@babel/helper-function-name': 7.24.7 + '@babel/template': 7.24.7 + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + transitivePeerDependencies: + - supports-color + + '@babel/helpers@7.24.7': + dependencies: + '@babel/template': 7.24.7 + '@babel/types': 7.24.7 + + '@babel/highlight@7.24.7': + dependencies: + '@babel/helper-validator-identifier': 7.24.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.0.1 + + '@babel/parser@7.24.7': + dependencies: + '@babel/types': 7.24.7 + + '@babel/parser@7.24.8': + dependencies: + '@babel/types': 7.24.8 + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.24.7) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-import-assertions@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-import-attributes@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-arrow-functions@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-async-generator-functions@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-remap-async-to-generator': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.7) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-async-to-generator@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-remap-async-to-generator': 7.24.7(@babel/core@7.24.7) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-block-scoped-functions@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-block-scoping@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-class-properties@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-class-static-block@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.7) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-classes@7.24.8(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-compilation-targets': 7.24.8 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-function-name': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7) + '@babel/helper-split-export-declaration': 7.24.7 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-computed-properties@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/template': 7.24.7 + + '@babel/plugin-transform-destructuring@7.24.8(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-dotall-regex@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-duplicate-keys@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-dynamic-import@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.7) + + '@babel/plugin-transform-exponentiation-operator@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-export-namespace-from@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.7) + + '@babel/plugin-transform-for-of@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-function-name@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-compilation-targets': 7.24.8 + '@babel/helper-function-name': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-json-strings@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.7) + + '@babel/plugin-transform-literals@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-logical-assignment-operators@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.7) + + '@babel/plugin-transform-member-expression-literals@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-modules-amd@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-commonjs@7.24.8(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-module-transforms': 7.24.8(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-simple-access': 7.24.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-systemjs@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-hoist-variables': 7.24.7 + '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-umd@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-named-capturing-groups-regex@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-new-target@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-nullish-coalescing-operator@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7) + + '@babel/plugin-transform-numeric-separator@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.7) + + '@babel/plugin-transform-object-rest-spread@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-compilation-targets': 7.24.8 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.24.7) + + '@babel/plugin-transform-object-super@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-optional-catch-binding@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.7) + + '@babel/plugin-transform-optional-chaining@7.24.8(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-parameters@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-private-methods@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-private-property-in-object@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.7) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-property-literals@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-regenerator@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + regenerator-transform: 0.15.2 + + '@babel/plugin-transform-reserved-words@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-shorthand-properties@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-spread@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-sticky-regex@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-template-literals@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-typeof-symbol@7.24.8(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-unicode-escapes@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-unicode-property-regex@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-unicode-regex@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-unicode-sets-regex@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/preset-env@7.24.8(@babel/core@7.24.7)': + dependencies: + '@babel/compat-data': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-compilation-targets': 7.24.8 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-validator-option': 7.24.8 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.7) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.7) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.7) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.7) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-syntax-import-assertions': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-syntax-import-attributes': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.7) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.7) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.7) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.7) + '@babel/plugin-transform-arrow-functions': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-async-generator-functions': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-async-to-generator': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-block-scoped-functions': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-block-scoping': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-class-properties': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-class-static-block': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-classes': 7.24.8(@babel/core@7.24.7) + '@babel/plugin-transform-computed-properties': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-destructuring': 7.24.8(@babel/core@7.24.7) + '@babel/plugin-transform-dotall-regex': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-duplicate-keys': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-dynamic-import': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-exponentiation-operator': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-export-namespace-from': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-for-of': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-function-name': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-json-strings': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-literals': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-logical-assignment-operators': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-member-expression-literals': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-modules-amd': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.24.7) + '@babel/plugin-transform-modules-systemjs': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-modules-umd': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-named-capturing-groups-regex': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-new-target': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-nullish-coalescing-operator': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-numeric-separator': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-object-rest-spread': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-object-super': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-optional-catch-binding': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.24.7) + '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-private-methods': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-private-property-in-object': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-property-literals': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-regenerator': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-reserved-words': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-shorthand-properties': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-spread': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-sticky-regex': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-template-literals': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-typeof-symbol': 7.24.8(@babel/core@7.24.7) + '@babel/plugin-transform-unicode-escapes': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-unicode-property-regex': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-unicode-regex': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-unicode-sets-regex': 7.24.7(@babel/core@7.24.7) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.7) + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.7) + babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.7) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.7) + core-js-compat: 3.37.1 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/types': 7.24.7 + esutils: 2.0.3 + + '@babel/regjsgen@0.8.0': {} + + '@babel/runtime@7.24.8': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/template@7.24.7': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/types': 7.24.7 + + '@babel/traverse@7.24.7': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-function-name': 7.24.7 + '@babel/helper-hoist-variables': 7.24.7 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/types': 7.24.7 + debug: 4.3.5 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/traverse@7.24.8': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.24.8 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-function-name': 7.24.7 + '@babel/helper-hoist-variables': 7.24.7 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/parser': 7.24.8 + '@babel/types': 7.24.8 + debug: 4.3.5 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.24.7': + dependencies: + '@babel/helper-string-parser': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 + to-fast-properties: 2.0.0 + + '@babel/types@7.24.8': + dependencies: + '@babel/helper-string-parser': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 + to-fast-properties: 2.0.0 + + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-s390x@0.21.5': + optional: true + + '@esbuild/linux-x64@0.21.5': + optional: true + + '@esbuild/netbsd-x64@0.21.5': + optional: true + + '@esbuild/openbsd-x64@0.21.5': + optional: true + + '@esbuild/sunos-x64@0.21.5': + optional: true + + '@esbuild/win32-arm64@0.21.5': + optional: true + + '@esbuild/win32-ia32@0.21.5': + optional: true + + '@esbuild/win32-x64@0.21.5': + optional: true + + '@jridgewell/gen-mapping@0.3.5': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/source-map@0.3.6': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/sourcemap-codec@1.4.15': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + + '@nanostores/persistent@0.9.1(nanostores@0.9.5)': + dependencies: + nanostores: 0.9.5 + + '@nanostores/solid@0.4.2(nanostores@0.9.5)(solid-js@1.8.18)': + dependencies: + nanostores: 0.9.5 + solid-js: 1.8.18 + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + '@popperjs/core@2.11.8': {} + + '@rollup/plugin-babel@5.3.1(@babel/core@7.24.7)(@types/babel__core@7.20.5)(rollup@2.79.1)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-module-imports': 7.24.7 + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + rollup: 2.79.1 + optionalDependencies: + '@types/babel__core': 7.20.5 + transitivePeerDependencies: + - supports-color + + '@rollup/plugin-node-resolve@15.2.3(rollup@2.79.1)': + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@2.79.1) + '@types/resolve': 1.20.2 + deepmerge: 4.3.1 + is-builtin-module: 3.2.1 + is-module: 1.0.0 + resolve: 1.22.8 + optionalDependencies: + rollup: 2.79.1 + + '@rollup/plugin-replace@2.4.2(rollup@2.79.1)': + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + magic-string: 0.25.9 + rollup: 2.79.1 + + '@rollup/plugin-terser@0.4.4(rollup@2.79.1)': + dependencies: + serialize-javascript: 6.0.2 + smob: 1.5.0 + terser: 5.31.2 + optionalDependencies: + rollup: 2.79.1 + + '@rollup/pluginutils@3.1.0(rollup@2.79.1)': + dependencies: + '@types/estree': 0.0.39 + estree-walker: 1.0.1 + picomatch: 2.3.1 + rollup: 2.79.1 + + '@rollup/pluginutils@5.1.0(rollup@2.79.1)': + dependencies: + '@types/estree': 1.0.5 + estree-walker: 2.0.2 + picomatch: 2.3.1 + optionalDependencies: + rollup: 2.79.1 + + '@rollup/rollup-android-arm-eabi@4.18.0': + optional: true + + '@rollup/rollup-android-arm64@4.18.0': + optional: true + + '@rollup/rollup-darwin-arm64@4.18.0': + optional: true + + '@rollup/rollup-darwin-x64@4.18.0': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.18.0': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.18.0': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.18.0': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.18.0': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.18.0': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.18.0': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.18.0': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.18.0': + optional: true + + '@rollup/rollup-linux-x64-musl@4.18.0': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.18.0': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.18.0': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.18.0': + optional: true + + '@solid-primitives/event-listener@2.3.3(solid-js@1.8.18)': + dependencies: + '@solid-primitives/utils': 6.2.3(solid-js@1.8.18) + solid-js: 1.8.18 + + '@solid-primitives/resize-observer@2.0.25(solid-js@1.8.18)': + dependencies: + '@solid-primitives/event-listener': 2.3.3(solid-js@1.8.18) + '@solid-primitives/rootless': 1.4.5(solid-js@1.8.18) + '@solid-primitives/static-store': 0.0.8(solid-js@1.8.18) + '@solid-primitives/utils': 6.2.3(solid-js@1.8.18) + solid-js: 1.8.18 + + '@solid-primitives/rootless@1.4.5(solid-js@1.8.18)': + dependencies: + '@solid-primitives/utils': 6.2.3(solid-js@1.8.18) + solid-js: 1.8.18 + + '@solid-primitives/static-store@0.0.8(solid-js@1.8.18)': + dependencies: + '@solid-primitives/utils': 6.2.3(solid-js@1.8.18) + solid-js: 1.8.18 + + '@solid-primitives/utils@6.2.3(solid-js@1.8.18)': + dependencies: + solid-js: 1.8.18 + + '@solidjs/router@0.11.5(solid-js@1.8.18)': + dependencies: + solid-js: 1.8.18 + + '@suid/base@0.9.0(solid-js@1.8.18)': + dependencies: + '@popperjs/core': 2.11.8 + '@suid/css': 0.4.0 + '@suid/system': 0.11.0(solid-js@1.8.18) + '@suid/types': 0.6.0(solid-js@1.8.18) + '@suid/utils': 0.9.0(solid-js@1.8.18) + clsx: 2.1.1 + solid-js: 1.8.18 + + '@suid/css@0.4.0': {} + + '@suid/icons-material@0.7.0(solid-js@1.8.18)': + dependencies: + '@suid/material': 0.16.0(solid-js@1.8.18) + solid-js: 1.8.18 + + '@suid/material@0.16.0(solid-js@1.8.18)': + dependencies: + '@suid/base': 0.9.0(solid-js@1.8.18) + '@suid/css': 0.4.0 + '@suid/system': 0.11.0(solid-js@1.8.18) + '@suid/types': 0.6.0(solid-js@1.8.18) + '@suid/utils': 0.9.0(solid-js@1.8.18) + clsx: 2.1.1 + solid-js: 1.8.18 + + '@suid/styled-engine@0.7.0(solid-js@1.8.18)': + dependencies: + '@suid/css': 0.4.0 + '@suid/utils': 0.9.0(solid-js@1.8.18) + solid-js: 1.8.18 + + '@suid/system@0.11.0(solid-js@1.8.18)': + dependencies: + '@suid/css': 0.4.0 + '@suid/styled-engine': 0.7.0(solid-js@1.8.18) + '@suid/types': 0.6.0(solid-js@1.8.18) + '@suid/utils': 0.9.0(solid-js@1.8.18) + clsx: 2.1.1 + csstype: 3.1.3 + solid-js: 1.8.18 + + '@suid/types@0.6.0(solid-js@1.8.18)': + dependencies: + solid-js: 1.8.18 + + '@suid/utils@0.9.0(solid-js@1.8.18)': + dependencies: + '@suid/types': 0.6.0(solid-js@1.8.18) + solid-js: 1.8.18 + + '@suid/vite-plugin@0.2.0(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2))': + dependencies: + '@babel/generator': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + '@types/babel__generator': 7.6.8 + '@types/babel__traverse': 7.20.6 + vite: 5.3.2(lightningcss@1.25.1)(terser@5.31.2) + transitivePeerDependencies: + - supports-color + + '@surma/rollup-plugin-off-main-thread@2.2.3': + dependencies: + ejs: 3.1.10 + json5: 2.2.3 + magic-string: 0.25.9 + string.prototype.matchall: 4.0.11 + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.24.7 + '@babel/types': 7.24.7 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 + + '@types/babel__generator@7.6.8': + dependencies: + '@babel/types': 7.24.7 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.24.7 + '@babel/types': 7.24.7 + + '@types/babel__traverse@7.20.6': + dependencies: + '@babel/types': 7.24.7 + + '@types/css-tree@2.3.8': {} + + '@types/estree@0.0.39': {} + + '@types/estree@1.0.5': {} + + '@types/hammerjs@2.0.45': {} + + '@types/resolve@1.20.2': {} + + '@types/trusted-types@2.0.7': {} + + acorn@8.12.0: {} + + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.1 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + array-buffer-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + is-array-buffer: 3.0.4 + + arraybuffer.prototype.slice@1.0.3: + dependencies: + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 + + async@3.2.5: {} + + at-least-node@1.0.0: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.0.0 + + babel-plugin-jsx-dom-expressions@0.37.23(@babel/core@7.24.7): + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-module-imports': 7.18.6 + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.7) + '@babel/types': 7.24.7 + html-entities: 2.3.3 + validate-html-nesting: 1.2.2 + + babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.24.7): + dependencies: + '@babel/compat-data': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.7) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.7): + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.7) + core-js-compat: 3.37.1 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.24.7): + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.7) + transitivePeerDependencies: + - supports-color + + babel-preset-solid@1.8.18(@babel/core@7.24.7): + dependencies: + '@babel/core': 7.24.7 + babel-plugin-jsx-dom-expressions: 0.37.23(@babel/core@7.24.7) + + balanced-match@1.0.2: {} + + binary-extensions@2.3.0: {} + + blurhash@2.0.5: {} + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.23.1: + dependencies: + caniuse-lite: 1.0.30001639 + electron-to-chromium: 1.4.815 + node-releases: 2.0.14 + update-browserslist-db: 1.0.16(browserslist@4.23.1) + + buffer-from@1.1.2: {} + + builtin-modules@3.3.0: {} + + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + + camel-case@4.1.2: + dependencies: + pascal-case: 3.1.2 + tslib: 2.6.3 + + caniuse-lite@1.0.30001639: {} + + capital-case@1.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.6.3 + upper-case-first: 2.0.2 + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + change-case@4.1.2: + dependencies: + camel-case: 4.1.2 + capital-case: 1.0.4 + constant-case: 3.0.4 + dot-case: 3.0.4 + header-case: 2.0.4 + no-case: 3.0.4 + param-case: 3.0.4 + pascal-case: 3.1.2 + path-case: 3.0.4 + sentence-case: 3.0.4 + snake-case: 3.0.4 + tslib: 2.6.3 + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + 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 + + clsx@2.1.1: {} + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + commander@2.20.3: {} + + common-tags@1.8.2: {} + + concat-map@0.0.1: {} + + constant-case@3.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.6.3 + upper-case: 2.0.2 + + convert-source-map@2.0.0: {} + + core-js-compat@3.37.1: + dependencies: + browserslist: 4.23.1 + + crypto-random-string@2.0.0: {} + + css-tree@2.3.1: + dependencies: + mdn-data: 2.0.30 + source-map-js: 1.2.0 + + csstype@3.1.3: {} + + data-view-buffer@1.0.1: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-offset@1.0.0: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + date-fns@3.6.0: {} + + debug@4.3.5: + dependencies: + ms: 2.1.2 + + deepmerge@4.3.1: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + detect-libc@1.0.3: {} + + dot-case@3.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.6.3 + + ejs@3.1.10: + dependencies: + jake: 10.9.1 + + electron-to-chromium@1.4.815: {} + + es-abstract@1.23.3: + dependencies: + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 + is-callable: 1.2.7 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.3 + is-string: 1.0.7 + is-typed-array: 1.1.13 + is-weakref: 1.0.2 + object-inspect: 1.13.2 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.15 + + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 + + es-errors@1.3.0: {} + + es-object-atoms@1.0.0: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.0.3: + dependencies: + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-to-primitive@1.2.1: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + + escalade@3.1.2: {} + + escape-string-regexp@1.0.5: {} + + estree-walker@1.0.1: {} + + estree-walker@2.0.2: {} + + esutils@2.0.3: {} + + events-to-async@2.0.1: {} + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.2: + 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.7 + + fast-json-stable-stringify@2.1.0: {} + + fast-uri@3.0.1: {} + + fastq@1.17.1: + dependencies: + reusify: 1.0.4 + + filelist@1.0.4: + dependencies: + minimatch: 5.1.6 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + for-each@0.3.3: + dependencies: + is-callable: 1.2.7 + + fs-extra@9.1.0: + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + function.prototype.name@1.1.6: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + functions-have-names: 1.2.3 + + functions-have-names@1.2.3: {} + + gensync@1.0.0-beta.2: {} + + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + + get-own-enumerable-property-symbols@3.0.2: {} + + get-symbol-description@1.0.2: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob@7.2.3: + 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 + + globals@11.12.0: {} + + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.0.1 + + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.4 + + graceful-fs@4.2.11: {} + + hammerjs@2.0.8: {} + + has-bigints@1.0.2: {} + + has-flag@3.0.0: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 + + has-proto@1.0.3: {} + + has-symbols@1.0.3: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.0.3 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + header-case@2.0.4: + dependencies: + capital-case: 1.0.4 + tslib: 2.6.3 + + html-entities@2.3.3: {} + + idb@7.1.1: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + internal-slot@1.0.7: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.0.6 + + is-array-buffer@3.0.4: + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + + is-bigint@1.0.4: + dependencies: + has-bigints: 1.0.2 + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-boolean-object@1.1.2: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-builtin-module@3.2.1: + dependencies: + builtin-modules: 3.3.0 + + is-callable@1.2.7: {} + + is-core-module@2.14.0: + dependencies: + hasown: 2.0.2 + + is-data-view@1.0.1: + dependencies: + is-typed-array: 1.1.13 + + is-date-object@1.0.5: + dependencies: + has-tostringtag: 1.0.2 + + is-extglob@2.1.1: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-module@1.0.0: {} + + is-negative-zero@2.0.3: {} + + is-number-object@1.0.7: + dependencies: + has-tostringtag: 1.0.2 + + is-number@7.0.0: {} + + is-obj@1.0.1: {} + + is-regex@1.1.4: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-regexp@1.0.0: {} + + is-shared-array-buffer@1.0.3: + dependencies: + call-bind: 1.0.7 + + is-stream@2.0.1: {} + + is-string@1.0.7: + dependencies: + has-tostringtag: 1.0.2 + + is-symbol@1.0.4: + dependencies: + has-symbols: 1.0.3 + + is-typed-array@1.1.13: + dependencies: + which-typed-array: 1.1.15 + + is-weakref@1.0.2: + dependencies: + call-bind: 1.0.7 + + is-what@4.1.16: {} + + isarray@2.0.5: {} + + isomorphic-ws@5.0.0(ws@8.17.1): + dependencies: + ws: 8.17.1 + + jake@10.9.1: + dependencies: + async: 3.2.5 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + + js-tokens@4.0.0: {} + + jsesc@0.5.0: {} + + jsesc@2.5.2: {} + + json-schema-traverse@1.0.0: {} + + json-schema@0.4.0: {} + + json5@2.2.3: {} + + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + jsonpointer@5.0.1: {} + + leven@3.1.0: {} + + lightningcss-darwin-arm64@1.25.1: + optional: true + + lightningcss-darwin-x64@1.25.1: + optional: true + + lightningcss-freebsd-x64@1.25.1: + optional: true + + lightningcss-linux-arm-gnueabihf@1.25.1: + optional: true + + lightningcss-linux-arm64-gnu@1.25.1: + optional: true + + lightningcss-linux-arm64-musl@1.25.1: + optional: true + + lightningcss-linux-x64-gnu@1.25.1: + optional: true + + lightningcss-linux-x64-musl@1.25.1: + optional: true + + lightningcss-win32-x64-msvc@1.25.1: + optional: true + + lightningcss@1.25.1: + dependencies: + detect-libc: 1.0.3 + optionalDependencies: + lightningcss-darwin-arm64: 1.25.1 + lightningcss-darwin-x64: 1.25.1 + lightningcss-freebsd-x64: 1.25.1 + lightningcss-linux-arm-gnueabihf: 1.25.1 + lightningcss-linux-arm64-gnu: 1.25.1 + lightningcss-linux-arm64-musl: 1.25.1 + lightningcss-linux-x64-gnu: 1.25.1 + lightningcss-linux-x64-musl: 1.25.1 + lightningcss-win32-x64-msvc: 1.25.1 + + lodash.debounce@4.0.8: {} + + lodash.sortby@4.7.0: {} + + lodash@4.17.21: {} + + lower-case@2.0.2: + dependencies: + tslib: 2.6.3 + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + magic-string@0.25.9: + dependencies: + sourcemap-codec: 1.4.8 + + masto@6.8.0: + dependencies: + change-case: 4.1.2 + events-to-async: 2.0.1 + isomorphic-ws: 5.0.0(ws@8.17.1) + ts-custom-error: 3.3.1 + ws: 8.17.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + mdn-data@2.0.30: {} + + merge-anything@5.1.7: + dependencies: + is-what: 4.1.16 + + merge2@1.4.1: {} + + micromatch@4.0.7: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.1 + + ms@2.1.2: {} + + nanoid@3.3.7: {} + + nanostores@0.9.5: {} + + no-case@3.0.4: + dependencies: + lower-case: 2.0.2 + tslib: 2.6.3 + + node-releases@2.0.14: {} + + normalize-path@3.0.0: {} + + object-inspect@1.13.2: {} + + object-keys@1.1.1: {} + + object.assign@4.1.5: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + param-case@3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.6.3 + + pascal-case@3.1.2: + dependencies: + no-case: 3.0.4 + tslib: 2.6.3 + + path-case@3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.6.3 + + path-is-absolute@1.0.1: {} + + path-parse@1.0.7: {} + + picocolors@1.0.1: {} + + picomatch@2.3.1: {} + + possible-typed-array-names@1.0.0: {} + + postcss@8.4.39: + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.1 + source-map-js: 1.2.0 + + prettier@3.3.2: {} + + pretty-bytes@5.6.0: {} + + pretty-bytes@6.1.1: {} + + punycode@2.3.1: {} + + queue-microtask@1.2.3: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + regenerate-unicode-properties@10.1.1: + dependencies: + regenerate: 1.4.2 + + regenerate@1.4.2: {} + + regenerator-runtime@0.14.1: {} + + regenerator-transform@0.15.2: + dependencies: + '@babel/runtime': 7.24.8 + + regexp.prototype.flags@1.5.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 + + regexpu-core@5.3.2: + dependencies: + '@babel/regjsgen': 0.8.0 + regenerate: 1.4.2 + regenerate-unicode-properties: 10.1.1 + regjsparser: 0.9.1 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.1.0 + + regjsparser@0.9.1: + dependencies: + jsesc: 0.5.0 + + require-from-string@2.0.2: {} + + resolve@1.22.8: + dependencies: + is-core-module: 2.14.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + reusify@1.0.4: {} + + rollup@2.79.1: + optionalDependencies: + fsevents: 2.3.3 + + rollup@4.18.0: + dependencies: + '@types/estree': 1.0.5 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.18.0 + '@rollup/rollup-android-arm64': 4.18.0 + '@rollup/rollup-darwin-arm64': 4.18.0 + '@rollup/rollup-darwin-x64': 4.18.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.18.0 + '@rollup/rollup-linux-arm-musleabihf': 4.18.0 + '@rollup/rollup-linux-arm64-gnu': 4.18.0 + '@rollup/rollup-linux-arm64-musl': 4.18.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.18.0 + '@rollup/rollup-linux-riscv64-gnu': 4.18.0 + '@rollup/rollup-linux-s390x-gnu': 4.18.0 + '@rollup/rollup-linux-x64-gnu': 4.18.0 + '@rollup/rollup-linux-x64-musl': 4.18.0 + '@rollup/rollup-win32-arm64-msvc': 4.18.0 + '@rollup/rollup-win32-ia32-msvc': 4.18.0 + '@rollup/rollup-win32-x64-msvc': 4.18.0 + fsevents: 2.3.3 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safe-array-concat@1.1.2: + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + isarray: 2.0.5 + + safe-buffer@5.2.1: {} + + safe-regex-test@1.0.3: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-regex: 1.1.4 + + semver@6.3.1: {} + + sentence-case@3.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.6.3 + upper-case-first: 2.0.2 + + serialize-javascript@6.0.2: + dependencies: + randombytes: 2.1.0 + + seroval-plugins@1.0.7(seroval@1.0.7): + dependencies: + seroval: 1.0.7 + + seroval@1.0.7: {} + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + side-channel@1.0.6: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.2 + + smob@1.5.0: {} + + snake-case@3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.6.3 + + solid-js@1.8.18: + dependencies: + csstype: 3.1.3 + seroval: 1.0.7 + seroval-plugins: 1.0.7(seroval@1.0.7) + + solid-refresh@0.6.3(solid-js@1.8.18): + dependencies: + '@babel/generator': 7.24.7 + '@babel/helper-module-imports': 7.24.7 + '@babel/types': 7.24.7 + solid-js: 1.8.18 + transitivePeerDependencies: + - supports-color + + solid-styled@0.11.1(solid-js@1.8.18): + dependencies: + '@babel/core': 7.24.7 + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + '@types/css-tree': 2.3.8 + browserslist: 4.23.1 + css-tree: 2.3.1 + lightningcss: 1.25.1 + solid-js: 1.8.18 + transitivePeerDependencies: + - supports-color + + source-map-js@1.2.0: {} + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + source-map@0.8.0-beta.0: + dependencies: + whatwg-url: 7.1.0 + + sourcemap-codec@1.4.8: {} + + string.prototype.matchall@4.0.11: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.7 + regexp.prototype.flags: 1.5.2 + set-function-name: 2.0.2 + side-channel: 1.0.6 + + string.prototype.trim@1.2.9: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + + string.prototype.trimend@1.0.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + stringify-object@3.3.0: + dependencies: + get-own-enumerable-property-symbols: 3.0.2 + is-obj: 1.0.1 + is-regexp: 1.0.0 + + strip-comments@2.0.1: {} + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + temp-dir@2.0.0: {} + + tempy@0.6.0: + dependencies: + is-stream: 2.0.1 + temp-dir: 2.0.0 + type-fest: 0.16.0 + unique-string: 2.0.0 + + terser@5.31.2: + dependencies: + '@jridgewell/source-map': 0.3.6 + acorn: 8.12.0 + commander: 2.20.3 + source-map-support: 0.5.21 + + to-fast-properties@2.0.0: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + tr46@1.0.1: + dependencies: + punycode: 2.3.1 + + ts-custom-error@3.3.1: {} + + tslib@2.6.3: {} + + type-fest@0.16.0: {} + + typed-array-buffer@1.0.2: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 + + typed-array-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + + typed-array-byte-offset@1.0.2: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + + typed-array-length@1.0.6: + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 + + typescript@5.5.2: {} + + unbox-primitive@1.0.2: + dependencies: + call-bind: 1.0.7 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + + unicode-canonical-property-names-ecmascript@2.0.0: {} + + unicode-match-property-ecmascript@2.0.0: + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.0 + unicode-property-aliases-ecmascript: 2.1.0 + + unicode-match-property-value-ecmascript@2.1.0: {} + + unicode-property-aliases-ecmascript@2.1.0: {} + + unique-string@2.0.0: + dependencies: + crypto-random-string: 2.0.0 + + universalify@2.0.1: {} + + unplugin-solid-styled@0.11.1(rollup@2.79.1)(solid-styled@0.11.1(solid-js@1.8.18))(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2)): + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@2.79.1) + solid-styled: 0.11.1(solid-js@1.8.18) + unplugin: 1.11.0 + optionalDependencies: + vite: 5.3.2(lightningcss@1.25.1)(terser@5.31.2) + transitivePeerDependencies: + - rollup + + unplugin@1.11.0: + dependencies: + acorn: 8.12.0 + chokidar: 3.6.0 + webpack-sources: 3.2.3 + webpack-virtual-modules: 0.6.2 + + upath@1.2.0: {} + + update-browserslist-db@1.0.16(browserslist@4.23.1): + dependencies: + browserslist: 4.23.1 + escalade: 3.1.2 + picocolors: 1.0.1 + + upper-case-first@2.0.2: + dependencies: + tslib: 2.6.3 + + upper-case@2.0.2: + dependencies: + tslib: 2.6.3 + + validate-html-nesting@1.2.2: {} + + vite-plugin-pwa@0.20.0(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.1.0): + dependencies: + debug: 4.3.5 + fast-glob: 3.3.2 + pretty-bytes: 6.1.1 + vite: 5.3.2(lightningcss@1.25.1)(terser@5.31.2) + workbox-build: 7.1.1(@types/babel__core@7.20.5) + workbox-window: 7.1.0 + transitivePeerDependencies: + - supports-color + + vite-plugin-solid-styled@0.11.1(rollup@2.79.1)(solid-styled@0.11.1(solid-js@1.8.18))(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2)): + dependencies: + solid-styled: 0.11.1(solid-js@1.8.18) + unplugin-solid-styled: 0.11.1(rollup@2.79.1)(solid-styled@0.11.1(solid-js@1.8.18))(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2)) + vite: 5.3.2(lightningcss@1.25.1)(terser@5.31.2) + transitivePeerDependencies: + - rollup + + vite-plugin-solid@2.10.2(solid-js@1.8.18)(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2)): + dependencies: + '@babel/core': 7.24.7 + '@types/babel__core': 7.20.5 + babel-preset-solid: 1.8.18(@babel/core@7.24.7) + merge-anything: 5.1.7 + solid-js: 1.8.18 + solid-refresh: 0.6.3(solid-js@1.8.18) + vite: 5.3.2(lightningcss@1.25.1)(terser@5.31.2) + vitefu: 0.2.5(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2)) + transitivePeerDependencies: + - supports-color + + vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2): + dependencies: + esbuild: 0.21.5 + postcss: 8.4.39 + rollup: 4.18.0 + optionalDependencies: + fsevents: 2.3.3 + lightningcss: 1.25.1 + terser: 5.31.2 + + vitefu@0.2.5(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2)): + optionalDependencies: + vite: 5.3.2(lightningcss@1.25.1)(terser@5.31.2) + + webidl-conversions@4.0.2: {} + + webpack-sources@3.2.3: {} + + webpack-virtual-modules@0.6.2: {} + + whatwg-url@7.1.0: + dependencies: + lodash.sortby: 4.7.0 + tr46: 1.0.1 + webidl-conversions: 4.0.2 + + which-boxed-primitive@1.0.2: + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + + which-typed-array@1.1.15: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + + workbox-background-sync@7.1.0: + dependencies: + idb: 7.1.1 + workbox-core: 7.1.0 + + workbox-broadcast-update@7.1.0: + dependencies: + workbox-core: 7.1.0 + + workbox-build@7.1.1(@types/babel__core@7.20.5): + dependencies: + '@apideck/better-ajv-errors': 0.3.6(ajv@8.17.1) + '@babel/core': 7.24.7 + '@babel/preset-env': 7.24.8(@babel/core@7.24.7) + '@babel/runtime': 7.24.8 + '@rollup/plugin-babel': 5.3.1(@babel/core@7.24.7)(@types/babel__core@7.20.5)(rollup@2.79.1) + '@rollup/plugin-node-resolve': 15.2.3(rollup@2.79.1) + '@rollup/plugin-replace': 2.4.2(rollup@2.79.1) + '@rollup/plugin-terser': 0.4.4(rollup@2.79.1) + '@surma/rollup-plugin-off-main-thread': 2.2.3 + ajv: 8.17.1 + common-tags: 1.8.2 + fast-json-stable-stringify: 2.1.0 + fs-extra: 9.1.0 + glob: 7.2.3 + lodash: 4.17.21 + pretty-bytes: 5.6.0 + rollup: 2.79.1 + source-map: 0.8.0-beta.0 + stringify-object: 3.3.0 + strip-comments: 2.0.1 + tempy: 0.6.0 + upath: 1.2.0 + workbox-background-sync: 7.1.0 + workbox-broadcast-update: 7.1.0 + workbox-cacheable-response: 7.1.0 + workbox-core: 7.1.0 + workbox-expiration: 7.1.0 + workbox-google-analytics: 7.1.0 + workbox-navigation-preload: 7.1.0 + workbox-precaching: 7.1.0 + workbox-range-requests: 7.1.0 + workbox-recipes: 7.1.0 + workbox-routing: 7.1.0 + workbox-strategies: 7.1.0 + workbox-streams: 7.1.0 + workbox-sw: 7.1.0 + workbox-window: 7.1.0 + transitivePeerDependencies: + - '@types/babel__core' + - supports-color + + workbox-cacheable-response@7.1.0: + dependencies: + workbox-core: 7.1.0 + + workbox-core@7.1.0: {} + + workbox-expiration@7.1.0: + dependencies: + idb: 7.1.1 + workbox-core: 7.1.0 + + workbox-google-analytics@7.1.0: + dependencies: + workbox-background-sync: 7.1.0 + workbox-core: 7.1.0 + workbox-routing: 7.1.0 + workbox-strategies: 7.1.0 + + workbox-navigation-preload@7.1.0: + dependencies: + workbox-core: 7.1.0 + + workbox-precaching@7.1.0: + dependencies: + workbox-core: 7.1.0 + workbox-routing: 7.1.0 + workbox-strategies: 7.1.0 + + workbox-range-requests@7.1.0: + dependencies: + workbox-core: 7.1.0 + + workbox-recipes@7.1.0: + dependencies: + workbox-cacheable-response: 7.1.0 + workbox-core: 7.1.0 + workbox-expiration: 7.1.0 + workbox-precaching: 7.1.0 + workbox-routing: 7.1.0 + workbox-strategies: 7.1.0 + + workbox-routing@7.1.0: + dependencies: + workbox-core: 7.1.0 + + workbox-strategies@7.1.0: + dependencies: + workbox-core: 7.1.0 + + workbox-streams@7.1.0: + dependencies: + workbox-core: 7.1.0 + workbox-routing: 7.1.0 + + workbox-sw@7.1.0: {} + + workbox-window@7.1.0: + dependencies: + '@types/trusted-types': 2.0.7 + workbox-core: 7.1.0 + + wrappy@1.0.2: {} + + ws@8.17.1: {} + + yallist@3.1.1: {} diff --git a/src/App.css b/src/App.css new file mode 100644 index 0000000..c04a937 --- /dev/null +++ b/src/App.css @@ -0,0 +1,17 @@ +html, +body { + overflow: hidden; + height: 100vh; + height: 100dvh; +} + +#root { + overflow: hidden hidden; + height: 100vh; + height: 100dvh; + background-color: var(--tutu-color-surface, transparent); +} + +.custom-emoji { + width: 1.25em; +} \ No newline at end of file diff --git a/src/App.tsx b/src/App.tsx new file mode 100644 index 0000000..c5fa9fd --- /dev/null +++ b/src/App.tsx @@ -0,0 +1,32 @@ +import { Route, Router } from "@solidjs/router"; +import { ThemeProvider } from "@suid/material"; +import { Component, lazy } from "solid-js"; +import { useRootTheme } from "./material/mui.js"; +import "./App.css" + +const AccountSignIn = lazy(() => import("./accounts/SignIn.js")); +const AccountMastodonOAuth2Callback = lazy(() => import("./accounts/MastodonOAuth2Callback.js")) +const TimelineHome = lazy(() => import("./timelines/Home.js")) + +const Routing: Component = () => { + return ( + + + + + + + + ); +}; + +const App: Component = () => { + const theme = useRootTheme(); + return ( + + + + ); +}; + +export default App; diff --git a/src/accounts/MastodonOAuth2Callback.tsx b/src/accounts/MastodonOAuth2Callback.tsx new file mode 100644 index 0000000..2b34af9 --- /dev/null +++ b/src/accounts/MastodonOAuth2Callback.tsx @@ -0,0 +1,124 @@ +import { useNavigate, useSearchParams } from "@solidjs/router"; +import { + Component, + Show, + createSignal, + createUniqueId, + onMount, +} from "solid-js"; +import { acceptAccountViaAuthCode } from "./stores"; +import { $settings } from "../settings/stores"; +import { useDocumentTitle } from "../utils"; +import cards from "../material/cards.module.css"; +import { LinearProgress } from "@suid/material"; +import Img from "../material/Img"; +import { createRestAPIClient } from "masto"; +import { Title } from "../material/typography"; + +type OAuth2CallbackParams = { + code?: string; + error?: string; + error_description?: string; +}; + +const MastodonOAuth2Callback: Component = () => { + const progressId = createUniqueId(); + const titleId = createUniqueId(); + const [params] = useSearchParams(); + const navigate = useNavigate(); + const setDocumentTitle = useDocumentTitle("Back from Mastodon..."); + const [siteImg, setSiteImg] = createSignal<{ + src: string; + srcset?: string; + blurhash: string; + }>(); + const [siteTitle, setSiteTitle] = createSignal("the Mastodon server"); + + onMount(async () => { + const onGoingOAuth2Process = $settings.get().onGoingOAuth2Process; + if (!onGoingOAuth2Process) return; + const client = createRestAPIClient({ + url: onGoingOAuth2Process, + }); + const ins = await client.v2.instance.fetch(); + setDocumentTitle(`Back from ${ins.title}...`); + setSiteTitle(ins.title); + + const srcset = [] + if (ins.thumbnail.versions["@1x"]) { + srcset.push(`${ins.thumbnail.versions["@1x"]} 1x`) + } + if (ins.thumbnail.versions["@2x"]) { + srcset.push(`${ins.thumbnail.versions["@2x"]} 2x`) + } + + setSiteImg({ + src: ins.thumbnail.url, + blurhash: ins.thumbnail.blurhash, + srcset: srcset ? srcset.join(",") : undefined, + }); + }); + + onMount(async () => { + const onGoingOAuth2Process = $settings.get().onGoingOAuth2Process; + if (onGoingOAuth2Process && params.code) { + const acct = await acceptAccountViaAuthCode( + onGoingOAuth2Process, + params.code, + ); + $settings.setKey('onGoingOAuth2Process', undefined) + navigate('/', {replace: true}) + return; + } + + const error = + params.error || + (onGoingOAuth2Process ? "unknown" : "oauth2_unknown_target"); + const errorDescription = + params.error_description || + (error === "unknown" + ? "Remote server sends nothing" + : error === "oauth2_unknown_target" + ? "Unknown OAuth2 target. This is an internal error. Please contract the application maintainer." + : undefined); + const urlParams = new URLSearchParams({ + error, + }); + if (errorDescription) { + urlParams.set("errorDescription", errorDescription); + } + navigate("/accounts/sign-in?" + urlParams.toString(), { + replace: true, + }); + }); + return ( +
+
+ + }> + {`Banner + + + + Contracting {siteTitle}... + +

+ If this page stays too long, you can close this page and sign in again. +

+
+
+ ); +}; + +export default MastodonOAuth2Callback; diff --git a/src/accounts/SignIn.tsx b/src/accounts/SignIn.tsx new file mode 100644 index 0000000..0d0cf94 --- /dev/null +++ b/src/accounts/SignIn.tsx @@ -0,0 +1,173 @@ +import { + Component, + Show, + createEffect, + createSelector, + createSignal, + createUniqueId, + onMount, +} from "solid-js"; +import cards from "../material/cards.module.css"; +import TextField from "../material/TextField.js"; +import Button from "../material/Button.js"; +import { useDocumentTitle } from "../utils"; +import { Title } from "../material/typography"; +import { css } from "solid-styled"; +import { LinearProgress } from "@suid/material"; +import { createRestAPIClient } from "masto"; +import { getOrRegisterApp } from "./stores"; +import { useSearchParams } from "@solidjs/router"; +import { $settings } from "../settings/stores"; + +type ErrorParams = { + error: string; + errorDescription: string; +}; + +const SignIn: Component = () => { + const progressId = createUniqueId(); + const [params] = useSearchParams(); + const [rawServerUrl, setRawServerUrl] = createSignal(""); + const [currentState, setCurrentState] = createSignal< + "inactive" | "contracting" | "navigating" + >("inactive"); + const [serverUrlHelperText, setServerUrlHelperText] = createSignal(""); + const [serverUrlError, setServerUrlError] = createSignal(false); + const [targetSiteTitle, setTargetSiteTitle] = createSignal(""); + + useDocumentTitle("Sign In"); + css` + form { + display: flex; + flex-flow: column; + gap: 16px; + } + `; + + const serverUrl = () => { + const url = rawServerUrl(); + if (url.length === 0 || /^%w:/.test(url)) { + return url; + } else { + return `https://${url}`; + } + }; + + createEffect(() => { + const url = serverUrl(); + setServerUrlError(false); + if (url.length === 0) { + return; + } + try { + new URL(url); + } catch { + setServerUrlHelperText("Domain is required."); + return; + } + setServerUrlHelperText(""); + }); + + onMount(() => { + $settings.setKey('onGoingOAuth2Process', undefined) + }) + + const onStartOAuth2 = async (e: Event) => { + e.preventDefault(); + setCurrentState("contracting"); + const url = serverUrl(); + try { + setServerUrlError(!!serverUrlHelperText()); + + const client = createRestAPIClient({ + url, + }); + const ins = await client.v2.instance.fetch(); + setTargetSiteTitle(ins.title); + + const redirectURL = new URL( + "./oauth2/mastodon", + window.location.href, + ).toString(); + + const app = await getOrRegisterApp(url, redirectURL); + if (app === null) { + alert("The mastodon server could not be used with tutu."); + return; + } + + const authStart = new URL("./oauth/authorize", url); + const searches = authStart.searchParams; + const args = { + response_type: "code", + client_id: app.clientId, + redirect_uri: redirectURL, + scope: "read write push", + }; + for (const [k, v] of Object.entries(args)) { + searches.set(k, v); + } + $settings.setKey("onGoingOAuth2Process", url) + window.location.href = authStart.toString(); + } catch (e) { + setServerUrlHelperText( + `Could not contract with the server: "${String(e)}". Please check and try again.`, + ); + setServerUrlError(true); + console.error(`Failed to contract ${url}.`, e); + } finally { + setCurrentState("inactive"); + } + }; + + return ( +
+ +
+

Authorization is failed.

+

{params.errorDescription}

+

+ Please try again later. If the problem persist, you can seek for + help from the server administrator. +

+
+
+
+ +
+ Sign in with Your Mastodon Account + + +
+ +
+ +
+
+ ); +}; + +export default SignIn; diff --git a/src/accounts/stores.ts b/src/accounts/stores.ts new file mode 100644 index 0000000..a990fc7 --- /dev/null +++ b/src/accounts/stores.ts @@ -0,0 +1,174 @@ +import { persistentAtom } from "@nanostores/persistent"; +import { createOAuthAPIClient, createRestAPIClient } from "masto"; +import { action } from "nanostores"; + +export type Account = { + site: string; + accessToken: string; + + tokenType: string; + scope: string; + createdAt: number; +}; + +export const $accounts = persistentAtom("accounts", [], { + encode: JSON.stringify, + decode: JSON.parse, +}); + +interface OAuth2AccessToken { + access_token: string; + token_type: string; + scope: string; + created_at: number; +} + +async function oauth2TokenViaAuthCode(app: RegisteredApp, authCode: string) { + const resp = await fetch(new URL("./oauth/token", app.site), { + method: 'post', + body: JSON.stringify({ + grant_type: "authorization_code", + code: authCode, + client_id: app.clientId, + client_secret: app.clientSecret, + redirect_uri: app.redirectUrl, + scope: "read write push", + }), + headers: { + "Content-Type": "application/json", + }, + }); + + switch (resp.status) { + case 200: + return (await resp.json()) as OAuth2AccessToken; + default: { + const dict = await resp.json(); + const explain = dict.error_desciption ?? "Unknown OAuth2 Error"; + throw new TypeError(explain); + } + } +} + +export const acceptAccountViaAuthCode = action( + $accounts, + "acceptAccount", + async ($store, site: string, authCode: string) => { + const app = $registeredApps.get()[site]; + if (!app) { + throw TypeError("application not found"); + } + const token = await oauth2TokenViaAuthCode(app, authCode); + + const acct = { + site: app.site, + accessToken: token.access_token, + tokenType: token.token_type, + scope: token.scope, + createdAt: token.created_at * 1000, + }; + + const all = [...$store.get(), acct]; + $store.set(all); + + return acct; + }, +); + +export type RegisteredApp = { + site: string; + clientId: string; + clientSecret: string; + vapidKey?: string; + redirectUrl: string; + scope: string; +}; + +export const $registeredApps = persistentAtom<{ + [site: string]: RegisteredApp; +}>( + "registeredApps", + {}, + { + encode: JSON.stringify, + decode: JSON.parse, + }, +); + +async function getAppAccessToken(app: RegisteredApp) { + const resp = await fetch(new URL("./oauth/token", app.site), { + method: 'post', + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + client_id: app.clientId, + client_secret: app.clientSecret, + redirect_uri: app.redirectUrl, + grant_type: "client_credentials", + }), + }); + const dict = await resp.json(); + return dict.access_token; +} + +export const getOrRegisterApp = action( + $registeredApps, + "getOrRegisterApp", + async ($store, site: string, redirectUrl: string) => { + const all = $store.get(); + const savedApp = all[site]; + if (savedApp && savedApp.redirectUrl === redirectUrl) { + const appAccessToken = await getAppAccessToken(savedApp); + if (appAccessToken) { + const client = createRestAPIClient({ + url: site, + accessToken: appAccessToken, + }); + try { + const verify = await client.v1.apps.verifyCredentials(); + Object.assign(savedApp, { + vapidKey: verify.vapidKey, + }); + const oauthClient = createOAuthAPIClient({ + url: site, + accessToken: appAccessToken, + }); + try { + await oauthClient.revoke({ + clientId: savedApp.clientId, + clientSecret: savedApp.clientSecret, + token: appAccessToken, + }); + } catch {} + return savedApp; + } finally { + $store.set(all); + } + } + } + + const client = createRestAPIClient({ + url: site, + }); + const app = await client.v1.apps.create({ + clientName: "TuTu", + website: "https://github.com/thislight/tutu", + redirectUris: redirectUrl, + scopes: "read write push", + }); + if (!app.clientId || !app.clientSecret) { + return null; + } + all[site] = { + site, + clientId: app.clientId, + clientSecret: app.clientSecret, + vapidKey: app.vapidKey ?? undefined, + redirectUrl: redirectUrl, + scope: "read write push", + }; + $store.set(all); + return all[site]; + }, +); diff --git a/src/index.tsx b/src/index.tsx new file mode 100644 index 0000000..9430fe8 --- /dev/null +++ b/src/index.tsx @@ -0,0 +1,5 @@ +import {render} from 'solid-js/web' +import App from './App.js' +import "./material/theme.css" + +render(() => , document.getElementById("root")!) diff --git a/src/masto/acct.ts b/src/masto/acct.ts new file mode 100644 index 0000000..51c8ea2 --- /dev/null +++ b/src/masto/acct.ts @@ -0,0 +1,12 @@ +import { Accessor, createResource } from "solid-js"; +import { Account } from "../accounts/stores"; +import { useMastoClientFor } from "./clients"; + +export function useAcctProfile(account: Accessor) { + const client = useMastoClientFor(account) + return createResource(client, (client) => { + return client.v1.accounts.verifyCredentials() + }, { + name: "MastodonAccountProfile" + }) +} diff --git a/src/masto/clients.ts b/src/masto/clients.ts new file mode 100644 index 0000000..3ff1be6 --- /dev/null +++ b/src/masto/clients.ts @@ -0,0 +1,41 @@ +import { Accessor, createMemo, createResource } from "solid-js"; +import { Account } from "../accounts/stores"; +import { createRestAPIClient, mastodon } from "masto"; + +const restfulCache: Record = {} + +export function createMastoClientFor(account: Account) { + const cacheKey = [account.site, account.accessToken].join('') + const cache = restfulCache[cacheKey] + if (cache) return cache; + + const client = createRestAPIClient({ + url: account.site, + accessToken: account.accessToken, + }) + restfulCache[cacheKey] = client + + return client +} + +export function useMastoClientFor(account: Accessor) { + return createMemo(() => createMastoClientFor(account())) +} + +export function createUnauthorizedClient(site: string) { + const cache = restfulCache[site] + if (cache) return cache; + + const client = createRestAPIClient({ + url: site + }) + restfulCache[site] = client + + return client +} + +export function useInstance(client: Accessor) { + return createResource(client, async (client) => { + return await client.v2.instance.fetch() + }) +} diff --git a/src/masto/timelines.ts b/src/masto/timelines.ts new file mode 100644 index 0000000..a2e7b21 --- /dev/null +++ b/src/masto/timelines.ts @@ -0,0 +1,75 @@ +import { type mastodon } from "masto"; +import { Accessor, createResource, createSignal } from "solid-js"; + +type TimelineFetchTips = { + direction?: "new" | "old"; +}; + +type Timeline = { + list(params: { + maxId?: string; + minId?: string; + }): mastodon.Paginator; +}; + +export function useTimeline( + timeline: Accessor, +) { + let minId: string | undefined; + let maxId: string | undefined; + let otl: Timeline | undefined; + const idSet = new Set(); + return createResource< + mastodon.v1.Status[], + [Timeline], + TimelineFetchTips | undefined + >( + () => [timeline()] as const, + async ([tl], info) => { + if (otl !== tl) { + minId = undefined; + maxId = undefined; + idSet.clear(); + info.value = []; + otl = tl; + } + const direction = + typeof info.refetching !== "boolean" + ? info.refetching?.direction + : "old"; + const pager = await tl.list( + direction === "old" + ? { + maxId: minId, + } + : { + minId: maxId, + }, + ); + const old = info.value || []; + const diff = pager.filter((x) => !idSet.has(x.id)); + for (const v of diff.map((x) => x.id)) { + idSet.add(v); + } + if (direction === "old") { + minId = pager[pager.length - 1]?.id; + if (!maxId && pager.length > 0) { + maxId = pager[0].id; + } + return [...old, ...diff]; + } else { + maxId = pager.length > 0 ? pager[0].id : undefined; + if (!minId && pager.length > 0) { + minId = pager[pager.length - 1]?.id; + } + return [...diff, ...old]; + } + }, + { + initialValue: [], + storage(init) { + return createSignal(init, { equals: false }); + }, + }, + ); +} diff --git a/src/masto/toot.ts b/src/masto/toot.ts new file mode 100644 index 0000000..85fd817 --- /dev/null +++ b/src/masto/toot.ts @@ -0,0 +1,35 @@ +import type { mastodon } from "masto"; +import { createRenderEffect, createResource, type Accessor } from "solid-js"; + +const CUSTOM_EMOJI_REGEX = /:(\S+):/g; + +/** + * Resolve the custom emojis in string to HTML. + */ +export function resolveCustomEmoji( + content: string, + emojis: mastodon.v1.CustomEmoji[], +) { + return content.replace(CUSTOM_EMOJI_REGEX, (original, shortcode: string) => { + const emoji = emojis.find((x) => x.shortcode === shortcode); + if (!emoji) { + return original; + } + return `${shortcode}`; + }); +} + +export function appliedCustomEmoji( + target: { innerHTML: string }, + content: string, + emojis?: mastodon.v1.CustomEmoji[], +) { + createRenderEffect(() => { + const result = emojis ? resolveCustomEmoji(content, emojis) : content; + target.innerHTML = result; + }); +} + +export function hasCustomEmoji(s: string) { + return CUSTOM_EMOJI_REGEX.test(s); +} diff --git a/src/material/Button.tsx b/src/material/Button.tsx new file mode 100644 index 0000000..7b0051d --- /dev/null +++ b/src/material/Button.tsx @@ -0,0 +1,21 @@ +import { Component, JSX, splitProps } from "solid-js"; +import materialStyles from "./material.module.css"; + +/** + * Material-styled button. + * + * @param type Same as `; +}; + +export default Button; diff --git a/src/material/Img.tsx b/src/material/Img.tsx new file mode 100644 index 0000000..f85b6d3 --- /dev/null +++ b/src/material/Img.tsx @@ -0,0 +1,121 @@ +import { + JSX, + splitProps, + Component, + createSignal, + createEffect, + onMount, + createRenderEffect, + Show, +} from "solid-js"; +import { css } from "solid-styled"; +import { decode } from "blurhash"; +import { mergeClass } from "../utils"; + +type ImgProps = { + blurhash?: string; + keepBlur?: boolean; +} & JSX.HTMLElementTags["img"]; + +const Img: Component = (props) => { + let canvas: HTMLCanvasElement; + let imgE: HTMLImageElement; + const [managed, passthough] = splitProps(props, [ + "blurhash", + "keepBlur", + "class", + "style", + ]); + const [isImgLoaded, setIsImgLoaded] = createSignal(false); + const [imgSize, setImgSize] = createSignal<{ + width: number; + height: number; + }>(); + + const isBlurEnabled = () => managed.keepBlur || !isImgLoaded(); + + css` + :where(.img-root) { + display: inline-block; + position: relative; + + > img:first-of-type { + object-fit: contain; + object-position: center; + width: 100%; + height: 100%; + visibility: ${isBlurEnabled() ? "hidden" : "visible"}; + } + } + + :where(.cover) { + display: ${isBlurEnabled() ? "block" : "none"}; + position: absolute; + left: 0; + top: 0; + height: ${`${imgSize()?.height ?? 0}px`}; + width: ${`${imgSize()?.width ?? 0}px`}; + } + `; + + const onImgLoaded = () => { + setIsImgLoaded(true); + setImgSize({ + width: imgE.width, + height: imgE.height, + }); + }; + + const onMetadataLoaded = () => { + setImgSize({ + width: imgE.width, + height: imgE.height, + }); + }; + + onMount(() => { + setImgSize((x) => { + const parent = imgE.parentElement; + if (!parent) return x; + return x + ? x + : { + width: parent.clientWidth, + height: parent.clientHeight, + }; + }); + }); + + return ( +
+ + { + createRenderEffect(() => { + if (!managed.blurhash) return; + const ctx = canvas.getContext("2d"); + if (!ctx) return; + const size = imgSize(); + if (!size) return; + const imgd = ctx?.createImageData(size.width, size.height); + const pixels = decode(managed.blurhash, size.width, size.height); + imgd.data.set(pixels); + ctx.putImageData(imgd, 0, 0); + }); + }} + class="cover" + role="presentation" + /> + + + +
+ ); +}; + +export default Img; diff --git a/src/material/Scaffold.tsx b/src/material/Scaffold.tsx new file mode 100644 index 0000000..d7a1344 --- /dev/null +++ b/src/material/Scaffold.tsx @@ -0,0 +1,58 @@ +import { createElementSize } from "@solid-primitives/resize-observer"; +import { + Show, + createRenderEffect, + createSignal, + onCleanup, + type JSX, + type ParentComponent, +} from "solid-js"; +import { css } from "solid-styled"; + +interface ScaffoldProps { + topbar?: JSX.Element; + fab?: JSX.Element; +} + +const Scaffold: ParentComponent = (props) => { + const [topbarElement, setTopbarElement] = createSignal(); + + const topbarSize = createElementSize(topbarElement); + + css` + .scaffold-content { + --scaffold-topbar-height: ${(topbarSize.height?.toString() ?? 0) + "px"}; + + height: 100%; + width: 100%; + } + + .topbar { + position: sticky; + top: 0px; + z-index: var(--tutu-zidx-nav, auto); + } + + .fab-dock { + position: fixed; + bottom: 40px; + right: 40px; + z-index: var(--tutu-zidx-nav, auto); + } + `; + return ( + <> + +
+ {props.topbar} +
+
+ +
{props.fab}
+
+
{props.children}
+ + ); +}; + +export default Scaffold; diff --git a/src/material/Tab.tsx b/src/material/Tab.tsx new file mode 100644 index 0000000..2145b89 --- /dev/null +++ b/src/material/Tab.tsx @@ -0,0 +1,80 @@ +import { + Component, + createEffect, + splitProps, + type JSX, + type ParentComponent, +} from "solid-js"; +import { css } from "solid-styled"; +import { useTabListContext } from "./Tabs"; + +const Tab: ParentComponent< + { + focus?: boolean; + large?: boolean; + } & JSX.ButtonHTMLAttributes +> = (props) => { + const [managed, rest] = splitProps(props, [ + "focus", + "large", + "type", + "role", + "ref", + ]); + let self: HTMLButtonElement; + const { + focusOn: [, setFocusOn], + } = useTabListContext(); + + createEffect((lastStatus) => { + if (managed.focus && !lastStatus) { + setFocusOn((x) => [...x, self]); + } + if (!managed.focus && lastStatus) { + setFocusOn((x) => x.filter((e) => e !== self)); + } + return managed.focus; + }); + css` + .tab { + cursor: pointer; + background: none; + border: none; + min-width: ${managed.large ? "160px" : "72px"}; + height: 48px; + max-width: min(calc(100% - 56px), 264px); + padding: 10px 24px; + font-size: 0.8135rem; + font-weight: 600; + text-transform: uppercase; + transition: color 120ms var(--tutu-anim-curve-std); + } + + :global(.MuiToolbar-root) .tab { + color: rgba(255, 255, 255, 0.7); + + &:hover, + &:focus, + &.focus, + &:global(.tablist-focus) { + color: white; + } + } + `; + return ( + + ); +}; + +export default Tab; diff --git a/src/material/Tabs.tsx b/src/material/Tabs.tsx new file mode 100644 index 0000000..3630062 --- /dev/null +++ b/src/material/Tabs.tsx @@ -0,0 +1,165 @@ +import { + ParentComponent, + createContext, + createEffect, + createMemo, + createRenderEffect, + createSignal, + useContext, + type Signal, +} from "solid-js"; +import { css } from "solid-styled"; + +const TabListContext = /* @__PURE__ */ createContext<{ + focusOn: Signal; +}>(); + +export function useTabListContext() { + const result = useContext(TabListContext); + if (!result) { + throw new TypeError("tab list context is not found"); + } + return result; +} + +const ANIM_SPEED = 160 / 110; // 160px/110ms + +const TABLIST_FOCUS_CLASS = "tablist-focus"; + +const Tabs: ParentComponent<{ + offset?: number; + onFocusChanged?: (element: HTMLElement[]) => void; +}> = (props) => { + let self: HTMLDivElement; + const [focusOn, setFocusOn] = createSignal([]); + + createRenderEffect((lastFocusElement) => { + const current = focusOn(); + if (lastFocusElement) { + for (const e of lastFocusElement) { + e.classList.remove(TABLIST_FOCUS_CLASS); + } + } + for (const e of current) { + e.classList.add("tablist-focus"); + } + return current; + }); + + createRenderEffect(() => { + const callback = props.onFocusChanged; + if (!callback) return; + callback(focusOn()); + }); + + let lastLeft = 0; + let lastWidth = 0; + + const getNearestDistance = ( + srcRect: { x: number; width: number }, + prevEl: Element | null, + nextEl: Element | null, + offset?: number, + ) => { + if (!offset || offset === 0) return [0, 0] as const; + if (offset > 0) { + if (!nextEl) return [0, 0] as const; + const rect = nextEl.getBoundingClientRect(); + return [ + (rect.x - srcRect.x) * offset, + (rect.width - srcRect.width) * offset, + ] as const; + } else { + if (!prevEl) return [0, 0] as const; + const rect = prevEl.getBoundingClientRect(); + return [ + (rect.x - srcRect.x) * offset, + (srcRect.width - rect.width) * offset, + ] as const; + } + }; + + const focusBoundingClientRect = () => { + return focusOn() + .map((x) => x.getBoundingClientRect()) + .reduce( + (p, c) => { + return { + x: Math.min(p.x, c.x), + width: p.width + c.width, + }; + }, + { x: +Infinity, width: 0 }, + ); + }; + + const focusSiblings = () => { + const rects = focusOn().map((x) => [x, x.getBoundingClientRect()] as const); + if (rects.length === 0) return [null, null] as const; + rects.sort(([, rect1], [, rect2]) => rect1.x - rect2.x); + return [ + rects[0][0].previousElementSibling, + rects[rects.length - 1][0].nextElementSibling, + ] as const; + }; + + const indicator = () => { + const el = focusOn(); + if (!el) { + return ["0px", "0px", "110ms", "110ms"] as const; + } + const rect = focusBoundingClientRect(); + const rootRect = self.getBoundingClientRect(); + const left = rect.x - rootRect.x; + const width = rect.width; + const [prevEl, nextEl] = focusSiblings(); + const [offset, widthChange] = getNearestDistance( + rect, + prevEl, + nextEl, + props.offset, + ); + const result = [ + `${left + offset}px`, + `${width + widthChange}px`, + `${Math.max(Math.floor(Math.abs(left + offset - lastLeft)), 160) * ANIM_SPEED}ms`, + `${Math.max(Math.floor(Math.abs(width - lastWidth)), 160) * ANIM_SPEED}ms`, + ] as const; + lastLeft = left; + lastWidth = width; + return result; + }; + + css` + .tablist { + width: 100%; + position: relative; + white-space: nowrap; + overflow-x: auto; + + &::after { + transition: + left ${indicator()[2]} var(--tutu-anim-curve-std), + width ${indicator()[3]} var(--tutu-anim-curve-std); + position: absolute; + content: ""; + display: block; + background-color: white; + height: 2px; + width: ${indicator()[1]}; + left: ${indicator()[0]}; + bottom: 0; + } + } + `; + + return ( + +
+ {props.children} +
+
+ ); +}; + +export default Tabs; diff --git a/src/material/TextField.tsx b/src/material/TextField.tsx new file mode 100644 index 0000000..df0f7fc --- /dev/null +++ b/src/material/TextField.tsx @@ -0,0 +1,80 @@ +import { + Component, + createEffect, + createSignal, + createUniqueId, + onMount, + Show, +} from "solid-js"; +import formStyles from "./form.module.css"; + +export type TextFieldProps = { + label?: string; + helperText?: string; + type?: "text" | "password"; + onChange?: (value: string) => void; + onInput?: (value: string) => void; + inputId?: string; + error?: boolean; + required?: boolean; + name?: string; +}; + +const TextField: Component = (props) => { + let input: HTMLInputElement; + let field: HTMLDivElement; + const [hasContent, setHasContent] = createSignal(false); + const altInputId = createUniqueId(); + + createEffect(() => { + if (hasContent()) { + field.classList.add("float-label"); + } else { + field.classList.remove("float-label"); + } + }); + + onMount(() => { + setHasContent(input.value.length > 0); + }); + + const onInputChange = (e: { currentTarget: HTMLInputElement }) => { + const value = (e.currentTarget as HTMLInputElement).value; + setHasContent(value.length > 0); + props.onInput?.(value); + }; + + const inputId = () => props.inputId ?? altInputId; + + const fieldClass = () => { + const cls = [formStyles.textfield]; + if (typeof props.helperText !== "undefined") { + cls.push(formStyles.withHelperText); + } + if (props.error) { + cls.push(formStyles.error); + } + return cls.join(" "); + }; + + return ( +
+ + props.onChange?.(e.currentTarget.value)} + placeholder="" + required={props.required} + name={props.name} + /> + + {props.helperText} + +
+ ); +}; + +export default TextField; diff --git a/src/material/cards.module.css b/src/material/cards.module.css new file mode 100644 index 0000000..b5966e3 --- /dev/null +++ b/src/material/cards.module.css @@ -0,0 +1,55 @@ +.card { + composes: surface from 'material.module.css'; + border-radius: 2px; + box-shadow: var(--tutu-shadow-e2); + transition: var(--tutu-transition-shadow); + overflow: hidden; + background-color: var(--tutu-color-surface-l); + + &:focus-within, + &:focus-visible { + box-shadow: var(--tutu-shadow-e8); + } + + &:not(.manualMargin) { + &>:not(.cardNoPad) { + margin-inline: var(--card-pad, 20px); + } + + > :not(.cardGutSkip):first-child { + margin-top: var(--card-gut, 20px); + } + + >.cardGutSkip+*:not(.cardGutSkip) { + margin-top: var(--card-gut, 20px); + } + + > :not(.cardGutSkip):last-child { + margin-bottom: var(--card-gut, 20px); + } + } + +} + +.layoutCentered { + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + width: 448px; + + @media (max-width: 600px) { + & { + position: static; + height: 100%; + width: 100%; + left: 0; + right: 0; + transform: none; + display: grid; + grid-template-rows: 1fr auto; + height: 100vh; + overflow: auto; + } + } +} \ No newline at end of file diff --git a/src/material/form.module.css b/src/material/form.module.css new file mode 100644 index 0000000..5e7dfb7 --- /dev/null +++ b/src/material/form.module.css @@ -0,0 +1,80 @@ +.textfield { + composes: touchTarget from 'material.module.css'; + + --border-color: var(--tutu-color-inactive-on-surface); + --active-border-color: var(--tutu-color-primary); + --label-color: var(--tutu-color-inactive-on-surface); + --active-label-color: var(--tutu-color-primary); + --helper-text-color: var(--tutu-color-inactive-on-surface); + + &>* { + width: 100%; + } + + &.error, &:has(>input[aria-invalid="true"]) { + &:not(:focus-within) { + --border-color: var(--tutu-color-error-on-surface); + --label-color: var(--tutu-color-error-on-surface); + --helper-text-color: var(--tutu-color-error-on-surface); + } + + &:focus-within { + --helper-text-color: var(--tutu-color-error-on-surface); + } + } + + + position: relative; + + &>label { + position: absolute; + left: 0; + bottom: calc(10px + var(--bottom-height, 0px)); + color: var(--label-color); + transition: bottom .2s ease-in-out, font-size .2s ease-in-out, color .2s ease-in-out; + cursor: text; + font-size: 0.8125rem; + } + + &>label:has(+ input:not(:placeholder-shown)) { + bottom: calc(100% - 0.8125rem); + } + + &:focus-within>label, &.float-label>label { + bottom: calc(100% - 0.8125rem); + color: var(--active-label-color); + } + + &>input[type='text'], + &>input[type='password'] { + border: none; + outline: none; + border-bottom: 1px solid var(--border-color); + background-color: transparent; + padding-top: 16px; + padding-bottom: 8px; + margin-bottom: 1px; + transition: border-color .2s ease-in-out; + + &:focus { + border-bottom: 2px solid var(--active-border-color); + margin-bottom: 0; + } + } + + &.withHelperText { + --bottom-height: 0.8125rem; + } + + & .helperText { + color: var(--helper-text-color); + font-size: 0.8125rem; + line-height: 100%; + -webkit-line-clamp: 1; + line-clamp: 1; + display: flex; + justify-content: space-between; + min-height: 0.8125rem; + cursor: auto; + } +} \ No newline at end of file diff --git a/src/material/material.module.css b/src/material/material.module.css new file mode 100644 index 0000000..d51a179 --- /dev/null +++ b/src/material/material.module.css @@ -0,0 +1,65 @@ +.surface { + background-color: var(--tutu-color-surface); + color: var(--tutu-color-on-surface); +} + +.touchTarget { + min-width: 44px; + min-height: 44px; + cursor: pointer; +} + +.button { + composes: buttonText from './typography.module.css'; + composes: touchTarget; + + border: none; + background-color: transparent; + color: var(--tutu-color-primary); + font-family: inherit; + + &:focus,&:hover,&:focus-visible { + background-color: var(--tutu-color-surface-dd); + } + + &.pressed { + background-color: var(--tutu-color-surface-d); + } + + &.raised { + background-color: var(--tutu-color-primary); + color: var(--tutu-color-on-primary); + } + + &:disabled, &[aria-disabled]:not([aria-disabled="false"]) { + color: #9e9e9e; + + &:focus,&:hover,&:focus-visible { + background-color: transparent; + } + } + + .toolbar &, .appbar & { + height: 100%; + margin-block: 0; + padding-block: 0; + border-radius: 0; + } + + .appbar & { + color: var(--tutu-color-on-primary); + + &:focus,&:hover,&:focus-visible { + background-color: var(--tutu-color-primary-ll); + } + + &.pressed { + background-color: var(--tutu-color-primary-l); + } + } + + .toolbar & { + color: var(--tutu-color-on-surface); + } +} + diff --git a/src/material/mui.ts b/src/material/mui.ts new file mode 100644 index 0000000..15511ac --- /dev/null +++ b/src/material/mui.ts @@ -0,0 +1,16 @@ +import { Theme, createTheme } from "@suid/material/styles"; +import { deepPurple, amber } from "@suid/material/colors"; +import { Accessor } from "solid-js"; + +export function useRootTheme() : Accessor { + return () => createTheme({ + palette: { + primary: { + main: deepPurple[500] + }, + secondary: { + main: amber.A200 + } + } + }) +} diff --git a/src/material/theme.css b/src/material/theme.css new file mode 100644 index 0000000..5d26879 --- /dev/null +++ b/src/material/theme.css @@ -0,0 +1,135 @@ +:root, +[lang^="en"], [lang="en"] { + --md-typography-type: "regular"; + --title-size: 1.25rem; + --title-weight: 500; + --subheading-size: 1.125rem; + --body-size: 1rem; + --body2-weight: 500; + --caption-size: 0.875rem; + --button-size: 1rem; + --button-weight: 500; + --button-text-transform: uppercase; + + @media (min-width: 1024px) { + & { + --subheading-size: 1.0625rem; + --body-size: 0.9375rem; + } + } +} + +[lang^="zh"], [lang="zh"], +[lang^="kr"], [lang="kr"], +[lang^="ja"], [lang="ja"] { + --md-typography-type: "dense"; + --title-size: 1.4375rem; + --subheading-size: 1.1875rem; + --body-size: 1.0625rem; + --caption-size: 0.9375rem; + --button-size: 1.0625rem; + --button-text-transform: none; + + @media (min-width: 1024px) { + & { + --subheading-size: 1.125rem; + --body-size: 1rem; + } + } +} + +:root { + --tutu-color-primary: #673ab7; + /* Deep Purple 500 */ + --tutu-color-on-primary: white; + --tutu-color-primary-d: #512da8; + /* 700 */ + --tutu-color-on-primary-d: white; + --tutu-color-primary-dd: #4527a0; + /* 800 */ + --tutu-color-on-primary-dd: white; + --tutu-color-primary-l: #9575cd; + /* 200 */ + --tutu-color-on-primary-l: white; + --tutu-color-primary-ll: #b39ddb; + /* 100 */ + --tutu-color-on-primary-ll: black; + + --tutu-color-secondary: #ffd740; + /* Amber A200 */ + --tutu-color-on-secondary: black; + + --tutu-color-surface-l: white; + --tutu-color-surface: #fafafa; + --tutu-color-surface-d: #99999928; + --tutu-color-surface-dd: #99999920; + --tutu-color-on-surface: black; + --tutu-color-secondary-text-on-surface: rgba(0, 0, 0, 0.5); + --tutu-color-error-on-surface: #d32f2f; + --tutu-color-inactive-on-surface: #757575; + + --tutu-shadow-e1: 0px 1px 2px 0px #9e9e9e; + /* Switch */ + --tutu-shadow-e2: 0px 2px 4px 0px #9e9e9e; + /* (Resting) cards, raised button, quick entry / search bar */ + --tutu-shadow-e3: 0px 3px 6px 0px #9e9e9e; + /* Refresh indicator, quick entry / search bar (scrolled) */ + --tutu-shadow-e4: 0px 4px 8px 0px #9e9e9e; + /* App bar */ + --tutu-shadow-e6: 0px 6px 12px 0px #9e9e9e; + /* Snack bar, FAB (resting) */ + --tutu-shadow-e8: 0px 8px 16px 0px #9e9e9e; + /* Menu, (picked-up) cards, (pressed) raise button */ + --tutu-shadow-e9: 0px 9px 18px 0px #9e9e9e; + /* Submenu (+1dp for each submenu) */ + --tutu-shadow-e12: 0px 12px 24px 0px #9e9e9e; + /* (pressed) FAB */ + --tutu-shadow-e16: 0px 16px 32px 0px #9e9e9e; + /* Nav drawer, right drawer, modal bottom sheet */ + --tutu-shadow-e24: 0px 24px 48px 0px #9e9e9e; + /* Dialog, picker */ + + --tutu-anim-curve-std: cubic-bezier(0.4, 0, 0.2, 1); + --tutu-anim-curve-deceleration: cubic-bezier(0, 0, 0.2, 1); + --tutu-anim-curve-aceleration: cubic-bezier(0.4, 0, 1, 1); + --tutu-anim-curve-sharp: cubic-bezier(0.4, 0, 0.6, 1); + + @media (max-width: 300px) { + + /* XS screen, like wearables */ + & { + --tutu-transition-shadow: box-shadow 157.5ms var(--tutu-anim-curve-std); + } + } + + @media (max-width: 600px) { + + /* Mobile */ + & { + --tutu-transition-shadow: box-shadow 225ms var(--tutu-anim-curve-std); + } + } + + @media (max-width: 1200px) { + + /* Tablet */ + & { + --tutu-transition-shadow: box-shadow 292.5ms var(--tutu-anim-curve-std); + } + } + + /* Desktop */ + --tutu-transition-shadow: box-shadow 175ms var(--tutu-anim-curve-std); + + --tutu-zidx-nav: 1100; +} + +* { + font-family: Roboto, "Noto Sans", system-ui, -apple-system, BlinkMacSystemFont, sans-serif; + box-sizing: border-box; + margin: 0; +} + +body { + font-size: var(--body-size, 1rem); +} \ No newline at end of file diff --git a/src/material/toolbar.module.css b/src/material/toolbar.module.css new file mode 100644 index 0000000..e69de29 diff --git a/src/material/typography.module.css b/src/material/typography.module.css new file mode 100644 index 0000000..2c079da --- /dev/null +++ b/src/material/typography.module.css @@ -0,0 +1,48 @@ +.display4 { + font-size: 7rem; + font-weight: 300; +} + +.display3 { + font-size: 3.5rem; +} + +.display2 { + font-size: 2.8125rem; +} + +.display1 { + font-size: 2.125rem; +} + +.headline { + font-size: 1.5rem; +} + +.title { + font-size: var(--title-size); + font-weight: var(--title-weight); +} + +.subheading { + font-size: var(--subheading-size); +} + +.body1 { + font-size: var(--body-size); +} + +.body2 { + composes: body1; + font-weight: var(--body2-weight); +} + +.caption { + font-size: var(--caption-size); +} + +.buttonText { + font-weight: var(--button-weight); + font-size: var(--button-size); + text-transform: var(--button-text-transform); +} diff --git a/src/material/typography.tsx b/src/material/typography.tsx new file mode 100644 index 0000000..2121266 --- /dev/null +++ b/src/material/typography.tsx @@ -0,0 +1,87 @@ +import { JSX, ParentComponent, splitProps, type Ref } from "solid-js"; +import { Dynamic } from "solid-js/web"; +import typography from "./typography.module.css"; +import { mergeClass } from "../utils"; + +type AnyElement = keyof JSX.IntrinsicElements | ParentComponent + +type PropsOf = + E extends ParentComponent + ? Props + : E extends keyof JSX.IntrinsicElements + ? JSX.IntrinsicElements[E] + : JSX.HTMLAttributes; + +export type TypographyProps< + E extends AnyElement, +> = { + ref?: Ref; + component?: E; + class?: string; +} & PropsOf; + +type TypographyKind = + | "display4" + | "display3" + | "display2" + | "display1" + | "headline" + | "title" + | "subheading" + | "body1" + | "body2" + | "caption" + | "buttonText"; + +export function Typography(props: {typography: TypographyKind } & TypographyProps) { + const [managed, passthough] = splitProps(props, [ + "ref", + "component", + "class", + "typography", + ]); + const classes = () => + mergeClass(managed.class, typography[managed.typography]); + return ( + + ); +}; + +export function Display4(props: TypographyProps) { + return +} +export function Display3(props: TypographyProps) { + return +} +export function Display2(props: TypographyProps) { + return +} +export function Display1(props: TypographyProps) { + return +} +export function Headline(props: TypographyProps) { + return +} +export function Title(props: TypographyProps) { + return +} +export function Subheading(props: TypographyProps) { + return +} +export function Body1(props: TypographyProps) { + return +} +export function Body2(props: TypographyProps) { + return +} +export function Caption(props: TypographyProps) { + return +} +export function ButtonText(props: TypographyProps) { + return +} diff --git a/src/platform/anim.ts b/src/platform/anim.ts new file mode 100644 index 0000000..eead57a --- /dev/null +++ b/src/platform/anim.ts @@ -0,0 +1,11 @@ +import { createContext, useContext, type Accessor } from "solid-js"; + +export type HeroSource = {[key: string | symbol | number]: HTMLElement | undefined} + +const HeroSourceContext = createContext>(() => ({})) + +export const HeroSourceProvider = HeroSourceContext.Provider + +export function useHeroSource() { + return useContext(HeroSourceContext) +} diff --git a/src/platform/timesrc.ts b/src/platform/timesrc.ts new file mode 100644 index 0000000..dbf51fb --- /dev/null +++ b/src/platform/timesrc.ts @@ -0,0 +1,42 @@ +import { + Accessor, + createContext, + createRenderEffect, + createSignal, + onCleanup, + untrack, + useContext, +} from "solid-js"; + +const TimeSourceContext = createContext>(); + +export const TimeSourceProvider = TimeSourceContext.Provider; + +export function createTimeSource() { + let id: number | undefined; + const [get, set] = createSignal(new Date()); + + createRenderEffect(() => + untrack(() => { + id = setTimeout(() => { + set(new Date()); + }, 30 * 1000); + }), + ); + + onCleanup(() => { + if (typeof id !== "undefined") { + clearInterval(id); + } + }); + + return get; +} + +export function useTimeSource() { + return ( + useContext(TimeSourceContext) ?? + (console.warn("useTimeSource() is used but no source is provided"), + createTimeSource()) + ); +} diff --git a/src/settings/stores.ts b/src/settings/stores.ts new file mode 100644 index 0000000..7d71ac0 --- /dev/null +++ b/src/settings/stores.ts @@ -0,0 +1,7 @@ +import { persistentMap } from "@nanostores/persistent"; + +type Settings = { + onGoingOAuth2Process?: string +} + +export const $settings = persistentMap("settings::", {}) diff --git a/src/timelines/CompactToot.tsx b/src/timelines/CompactToot.tsx new file mode 100644 index 0000000..b8db733 --- /dev/null +++ b/src/timelines/CompactToot.tsx @@ -0,0 +1,57 @@ +import type { mastodon } from "masto"; +import { type Component } from "solid-js"; +import tootStyle from "./toot.module.css"; +import { formatRelative } from "date-fns"; +import Img from "../material/Img"; +import { Body2 } from "../material/typography"; +import { css } from "solid-styled"; +import { appliedCustomEmoji } from "../masto/toot"; +import cardStyle from "../material/cards.module.css"; + +type CompactTootProps = { + status: mastodon.v1.Status; + now: Date; + class?: string; +}; + +const CompactToot: Component = (props) => { + const toot = () => props.status; + return ( +
+ +
+ { + appliedCustomEmoji( + e, + toot().account.displayName, + toot().account.emojis, + ); + }} + > + + @{toot().account.username}@{new URL(toot().account.url).hostname} + + +
+
{ + appliedCustomEmoji(e, toot().content, toot().emojis); + }} + class={[tootStyle.compactTootContent].join(' ')} + >
+
+ ); +}; + +export default CompactToot; diff --git a/src/timelines/Home.tsx b/src/timelines/Home.tsx new file mode 100644 index 0000000..743b5af --- /dev/null +++ b/src/timelines/Home.tsx @@ -0,0 +1,336 @@ +import { + Component, + For, + onCleanup, + createSignal, + createEffect, + Show, + untrack, + onMount, +} from "solid-js"; +import { $accounts } from "../accounts/stores"; +import { useDocumentTitle } from "../utils"; +import { useStore } from "@nanostores/solid"; +import { useMastoClientFor } from "../masto/clients"; +import { type mastodon } from "masto"; +import Scaffold from "../material/Scaffold"; +import { + AppBar, + Button, + Fab, + LinearProgress, + ListItemSecondaryAction, + ListItemText, + MenuItem, + Switch, + Toolbar, + Typography, +} from "@suid/material"; +import { css } from "solid-styled"; +import { TimeSourceProvider, createTimeSource } from "../platform/timesrc"; +import TootThread from "./TootThread.js"; +import { useAcctProfile } from "../masto/acct"; +import ProfileMenuButton from "./ProfileMenuButton"; +import Tabs from "../material/Tabs"; +import Tab from "../material/Tab"; +import { Create as CreateTootIcon } from "@suid/icons-material"; +import { useTimeline } from "../masto/timelines"; +import { makeEventListener } from "@solid-primitives/event-listener"; + +const TimelinePanel: Component<{ + client: mastodon.rest.Client; + name: "home" | "public" | "trends"; + prefetch?: boolean; +}> = (props) => { + const [timeline, { refetch: refetchTimeline, mutate: mutateTimeline }] = + useTimeline(() => + props.name !== "trends" + ? props.client.v1.timelines[props.name] + : props.client.v1.trends.statuses, + ); + + const tlEndObserver = new IntersectionObserver(() => { + if (untrack(() => props.prefetch) && !timeline.loading) + refetchTimeline({ direction: "old" }); + }); + + onCleanup(() => tlEndObserver.disconnect()); + + const onBookmark = async ( + index: number, + client: mastodon.rest.Client, + status: mastodon.v1.Status, + ) => { + const result = await (status.bookmarked + ? client.v1.statuses.$select(status.id).unbookmark() + : client.v1.statuses.$select(status.id).bookmark()); + mutateTimeline((o) => { + o[index] = result; + return o; + }); + }; + + const onBoost = async ( + index: number, + client: mastodon.rest.Client, + status: mastodon.v1.Status, + ) => { + const reblogged = false; + mutateTimeline((o) => { + Object.assign(o[index].reblog ?? o[index], { + reblogged: !reblogged, + }); + return o; + }); + const result = reblogged + ? await client.v1.statuses.$select(status.id).unreblog() + : (await client.v1.statuses.$select(status.id).reblog()).reblog!; + mutateTimeline((o) => { + Object.assign(o[index].reblog ?? o[index], { + reblogged: result.reblogged, + reblogsCount: result.reblogsCount, + }); + return o; + }); + }; + + return ( + <> +
+ + {(item, index) => { + return ( + onBoost(index(), ...args)} + onBookmark={(...args) => onBookmark(index(), ...args)} + client={props.client} + /> + ); + }} + +
+ +
tlEndObserver.observe(e)}>
+ +
+ +
+
+ +
+ +
+
+ +
+ +
+
+ + ); +}; + +const Home: Component = () => { + let panelList: HTMLDivElement; + useDocumentTitle("Timelines"); + const accounts = useStore($accounts); + const now = createTimeSource(); + + const client = useMastoClientFor(() => accounts()[0]); + const [profile] = useAcctProfile(() => accounts()[0]); + + const [panelOffset, setPanelOffset] = createSignal(0); + const [prefetching, setPrefetching] = createSignal(true); + const [currentFocusOn, setCurrentFocusOn] = createSignal([]); + const [focusRange, setFocusRange] = createSignal([0, 0] as readonly [ + number, + number, + ]); + + let scrollEventLockReleased = true; + + const recalculateTabIndicator = () => { + scrollEventLockReleased = false; + try { + const { x: panelX, width: panelWidth } = + panelList.getBoundingClientRect(); + let minIdx = +Infinity, + maxIdx = -Infinity; + const items = panelList.querySelectorAll(".tab-panel"); + const ranges = Array.from(items).map((x) => { + const rect = x.getBoundingClientRect(); + const inlineStart = rect.x - panelX; + const inlineEnd = rect.width + inlineStart; + return [inlineStart, inlineEnd] as const; + }); + for (let i = 0; i < items.length; i++) { + const e = items.item(i); + const [inlineStart, inlineEnd] = ranges[i]; + if (inlineStart >= 0 && inlineEnd <= panelWidth) { + minIdx = Math.min(minIdx, i); + maxIdx = Math.max(maxIdx, i); + e.classList.add("active"); + } else { + e.classList.remove("active"); + } + } + + if (isFinite(minIdx) && isFinite(maxIdx)) { + setFocusRange([minIdx, maxIdx]); + } + } finally { + scrollEventLockReleased = true; + } + }; + + onMount(() => { + makeEventListener(panelList, "scroll", () => { + if (scrollEventLockReleased) { + requestAnimationFrame(recalculateTabIndicator); + } + }); + makeEventListener(window, "resize", () => { + if (scrollEventLockReleased) { + requestAnimationFrame(recalculateTabIndicator); + } + }); + requestAnimationFrame(recalculateTabIndicator); + }); + + const isTabFocus = (idx: number) => { + const [start, end] = focusRange(); + if (!isFinite(start) || !isFinite(end)) return false; + return idx >= start && idx <= end; + }; + + const onTabClick = (idx: number) => { + const items = panelList.querySelectorAll(".tab-panel"); + if (items.length > idx) { + items.item(idx).scrollIntoView({ behavior: "smooth" }); + } + }; + + css` + .tab-panel { + overflow: visible auto; + max-width: 560px; + height: 100%; + padding: 40px 16px; + max-height: calc(100vh - var(--scaffold-topbar-height, 0px)); + max-height: calc(100dvh - var(--scaffold-topbar-height, 0px)); + scroll-snap-align: center; + + &:not(.active) { + overflow: hidden; + } + + @media (max-width: 600px) { + padding: 0; + } + } + + .panel-list { + display: grid; + grid-auto-columns: 560px; + grid-auto-flow: column; + overflow-x: auto; + scroll-snap-type: x mandatory; + scroll-snap-stop: always; + height: calc(100vh - var(--scaffold-topbar-height, 0px)); + height: calc(100dvh - var(--scaffold-topbar-height, 0px)); + + @media (max-width: 600px) { + grid-auto-columns: 100%; + } + } + `; + + return ( + + + + + Home + + + Trending + + + Public + + + + setPrefetching((x) => !x)}> + Prefetch Toots + + + + + + + + } + fab={ + + + + } + > + +
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+
+
+ ); +}; + +export default Home; diff --git a/src/timelines/MediaAttachmentGrid.tsx b/src/timelines/MediaAttachmentGrid.tsx new file mode 100644 index 0000000..f98df53 --- /dev/null +++ b/src/timelines/MediaAttachmentGrid.tsx @@ -0,0 +1,80 @@ +import type { mastodon } from "masto"; +import { type Component, For, createSignal } from "solid-js"; +import { css } from "solid-styled"; +import tootStyle from "./toot.module.css"; +import { Portal } from "solid-js/web"; +import MediaViewer, { MEDIA_VIEWER_HEROSRC } from "./MediaViewer"; +import { HeroSourceProvider } from "../platform/anim"; + +const MediaAttachmentGrid: Component<{ + attachments: mastodon.v1.MediaAttachment[]; +}> = (props) => { + let rootRef: HTMLElement; + const [viewerIndex, setViewerIndex] = createSignal(); + const viewerOpened = () => typeof viewerIndex() !== "undefined" + const gridTemplateColumns = () => { + const l = props.attachments.length; + if (l < 2) { + return "1fr"; + } + if (l < 4) { + return "repeat(2, 1fr)"; + } + return "repeat(3, 1fr)"; + }; + + const openViewerFor = (index: number) => { + setViewerIndex(index); + }; + + css` + .attachments { + grid-template-columns: ${gridTemplateColumns()}; + } + `; + return ( +
e.stopImmediatePropagation()} + > + + {(item, index) => { + switch (item.type) { + case "image": + return ( + {item.description + ); + case "video": + case "gifv": + case "audio": + case "unknown": + return
; + } + }} +
+ ({ + [MEDIA_VIEWER_HEROSRC]: rootRef.children.item( + viewerIndex() || 0, + ) as HTMLElement, + })} + > + setViewerIndex(undefined)} + /> + +
+ ); +}; + +export default MediaAttachmentGrid; diff --git a/src/timelines/MediaViewer.tsx b/src/timelines/MediaViewer.tsx new file mode 100644 index 0000000..5e73f4c --- /dev/null +++ b/src/timelines/MediaViewer.tsx @@ -0,0 +1,378 @@ +import type { mastodon } from "masto"; +import { + For, + type Component, + type ParentComponent, + Switch, + Match, + createEffect, + createSignal, + type JSX, + onMount, + Index, + mergeProps, + requestCallback, + untrack, +} from "solid-js"; +import { css } from "solid-styled"; +import { useHeroSource } from "../platform/anim"; +import { Portal } from "solid-js/web"; +import { createStore } from "solid-js/store"; +import { IconButton, Toolbar } from "@suid/material"; +import { ArrowLeft, ArrowRight, Close } from "@suid/icons-material"; + +type MediaViewerProps = { + show: boolean; + index: number; + media: mastodon.v1.MediaAttachment[]; + onIndexUpdated?: (newIndex: number) => void; + onClose?: () => void; +}; + +export const MEDIA_VIEWER_HEROSRC = Symbol("mediaViewerHeroSrc"); + +function within(n: number, target: number, range: number) { + return n >= target - range || n <= target + range; +} + +function clamp(input: number, min: number, max: number) { + return Math.min(Math.max(input, min), max) +} + +const MediaViewer: ParentComponent = (props) => { + let rootRef: HTMLDialogElement; + + const heroSource = useHeroSource(); + const heroSourceEl = () => heroSource()[MEDIA_VIEWER_HEROSRC]; + type State = { + ref?: HTMLElement; + media: mastodon.v1.MediaAttachment; + top: number; + left: number; + scale: number; + osize: [number, number]; // width, height + }; + const [state, setState] = createStore( + props.media.map( + (media) => + ({ + top: 0, + left: 0, + ref: undefined, + media, + scale: 1, + osize: [0, 9], + }) as State, + ), + ); + const [showControls, setShowControls] = createSignal(true); + const [dragging, setDragging] = createSignal(false); + + const hasPrev = () => state.length > 1 && props.index !== 0; + const hasNext = () => state.length > 1 && props.index < state.length - 1; + + css` + .media-viewer--root { + background: none; + border: none; + overflow: hidden; + margin: 0; + padding: 0; + outline: none; + max-width: 100%; + max-height: 100%; + height: 100%; + width: 100%; + + &[open] { + display: block; + } + } + + .media-viewer { + display: grid; + grid-auto-flow: column; + grid-auto-columns: 100%; + width: 100%; + height: 100%; + overflow: auto; + background-color: ${showControls() + ? "var(--tutu-color-surface)" + : "var(--tutu-color-on-surface)"}; + transition: background-color 0.2s var(--tutu-anim-curve-std); + scroll-behavior: smooth; + + > .media { + height: 100%; + } + } + + .media { + overflow: hidden; + position: relative; + + > img { + position: absolute; + object-fit: contain; + top: 0; + left: 0; + transform-origin: center; + } + } + + .media-ctrls { + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + z-index: 1; + cursor: ${dragging() ? "grabbing" : "grab"}; + } + + .left-dock { + position: absolute; + left: 24px; + top: 50%; + transform: translateY(-50%) + ${showControls() && hasPrev() + ? "" + : "translateX(-100%) translateX(-24px)"}; + display: inline-block; + transition: transform 0.2s var(--tutu-anim-curve-std); + } + + .right-dock { + position: absolute; + right: 24px; + top: 50%; + transform: translateY(-50%) + ${showControls() && hasNext() + ? "" + : "translateX(100%) translateX(24px)"}; + display: inline-block; + transition: transform 0.2s var(--tutu-anim-curve-std); + } + `; + + createEffect(() => { + if (props.show) { + rootRef.showModal(); + untrack(() => { + for (let i = 0; i < state.length; i++) { + centre(state[i], i); + } + }); + } else { + rootRef.close(); + } + }); + + createEffect(() => { + const viewer = rootRef.children.item(0)!; + const targetPageE = viewer.children.item(props.index + 1); + if (!targetPageE) return; + targetPageE.scrollIntoView(); + }); + + const minScaleOf = (state: State) => { + const { + ref, + osize: [width, height], + } = state; + const { width: parentWidth, height: parentHeight } = + ref!.parentElement!.getBoundingClientRect(); + if (height <= parentHeight && width <= parentWidth) { + return 1; + } + return Math.min(parentHeight / height, parentWidth / width); + }; + + // Position medias to the centre. + // This function is only available when the elements are layout. + const centre = ({ ref, osize: [width, height] }: State, idx: number) => { + const { width: parentWidth, height: parentHeight } = + ref!.parentElement!.getBoundingClientRect(); + const scale = + height <= parentHeight && width <= parentWidth + ? 1 + : Math.min(parentHeight / height, parentWidth / width); + const top = parentHeight / 2 - height / 2; + const left = parentWidth / 2 - width / 2; + setState(idx, { top, left, scale }); + }; + + const scale = ( + center: readonly [number, number], // left, top + move: number, + idx: number, + ) => { + const { ref, top: otop, left: oleft, scale: oscale, osize: [owidth, oheight] } = state[idx]; + const [cx, cy] = center; + const iy = clamp(cy - otop, 0, oheight), + ix = clamp(cx - oleft, 0, owidth); // in image coordinate system + const scale = move + oscale; + const oix = ix / oscale, + oiy = iy / oscale; + const nix = oix * scale, + niy = oiy * scale; + // Now we can calculate the center's move + + const { width: vw, height: vh } = + ref!.parentElement!.getBoundingClientRect(); + const top = vh / 2 - niy; + const left = vw / 2 - nix; + setState(idx, { top, left, scale }); + }; + + const movePrev = () => { + props.onIndexUpdated?.(Math.max(props.index - 1, 0)); + }; + + const moveNext = () => { + props.onIndexUpdated?.(Math.min(props.index + 1, state.length - 1)); + }; + + const ctrlWheel = (event: WheelEvent) => { + if (event.ctrlKey && event.deltaY !== 0) { + event.preventDefault(); + const center = [event.clientX, event.clientY] as const; + scale(center, -event.deltaY / event.clientY, props.index); + } else { + if (event.deltaX !== 0) { + event.preventDefault(); + if (event.deltaX > 0) { + moveNext(); + } else { + movePrev(); + } + } + } + }; + + let lastMousedown: [number, number, number] | null = null; // time, left, top + + const ctrlMouseDown = (event: MouseEvent) => { + if (event.buttons !== 1) return; + event.preventDefault(); + lastMousedown = [Date.now(), event.clientX, event.clientY]; + setDragging(true); + }; + + const ctrlMouseMove = (event: MouseEvent) => { + if (!lastMousedown) return; + event.preventDefault(); + const { movementX: mleft, movementY: mtop } = event; + setState(props.index, (o) => ({ left: o.left + mleft, top: o.top + mtop })); + }; + + const ctrlMouseUp = (event: MouseEvent) => { + if (lastMousedown !== null) { + event.preventDefault(); + const [time, left, top] = lastMousedown; + const { clientX: nleft, clientY: ntop } = event; + const now = Date.now(); + const target = event.target; + checkControls: { + if ( + target instanceof Element && + !target.classList.contains("media-ctrls") + ) { + // It's dispatched from sub controls, exits + break checkControls; + } + if ( + now - time < 250 && + within(left, nleft, 4) && + within(top, ntop, 4) + ) { + setShowControls((x) => !x); + } + } + lastMousedown = null; + setDragging(false); + } + }; + + return ( + +
+
+ + + + + +
+ (movePrev(), e.stopPropagation())} + > + + +
+
+ (moveNext(), e.stopPropagation())} + > + + +
+
+ + {(item, index) => { + return ( +
+ {JSON.stringify(item().media, undefined, 2)} + } + > + + { + setState(index, { ref: r }); + }} + onLoad={(e) => { + const { naturalWidth: width, naturalHeight: height } = + e.currentTarget; + setState(index, { + osize: [width, height], + }); + }} + src={item().media.url || undefined} + style={{ + left: `${item().left}px`, + top: `${item().top}px`, + transform: `scale(${item().scale})`, + }} + alt={item().media.description || undefined} + > + + +
+ ); + }} +
+
+
+ ); +}; + +export default MediaViewer; diff --git a/src/timelines/ProfileMenuButton.tsx b/src/timelines/ProfileMenuButton.tsx new file mode 100644 index 0000000..1d61553 --- /dev/null +++ b/src/timelines/ProfileMenuButton.tsx @@ -0,0 +1,121 @@ +import { + Avatar, + ButtonBase, + Divider, + ListItemAvatar, + ListItemIcon, + ListItemText, + Menu, + MenuItem, +} from "@suid/material"; +import { Show, createSignal, createUniqueId, type ParentComponent } from "solid-js"; +import { + Settings as SettingsIcon, + Bookmark as BookmarkIcon, + Star as LikeIcon, + FeaturedPlayList as ListIcon, +} from "@suid/icons-material"; + +const ProfileMenuButton: ParentComponent<{ + profile?: { displayName: string; avatar: string; username: string }; + onClick?: () => void; + onClose?: () => void; +}> = (props) => { + const menuId = createUniqueId(); + const buttonId = createUniqueId(); + + let [anchor, setAnchor] = createSignal(null); + const open = () => !!anchor(); + + const onClick = ( + event: MouseEvent & { currentTarget: HTMLButtonElement }, + ) => { + setAnchor(event.currentTarget); + props.onClick?.(); + }; + + const onClose = () => { + props.onClick?.(); + setAnchor(null); + }; + + return ( + <> + + + + + + + + + + + + + + + + Bookmarks + + + + + + Likes + + + + + + Lists + + + + {props.children} + + + + + + + Settings + + + + ); +}; + +export default ProfileMenuButton; diff --git a/src/timelines/RegularToot.tsx b/src/timelines/RegularToot.tsx new file mode 100644 index 0000000..7d9b694 --- /dev/null +++ b/src/timelines/RegularToot.tsx @@ -0,0 +1,259 @@ +import type { mastodon } from "masto"; +import { + splitProps, + type Component, + type JSX, + Show, + createRenderEffect, +} from "solid-js"; +import tootStyle from "./toot.module.css"; +import { formatRelative } from "date-fns"; +import Img from "../material/Img.js"; +import { Body2 } from "../material/typography.js"; +import { css } from "solid-styled"; +import { + BookmarkAddOutlined, + Repeat, + ReplyAll, + Star, + StarOutline, + Bookmark, + Reply, +} from "@suid/icons-material"; +import { useTimeSource } from "../platform/timesrc.js"; +import { resolveCustomEmoji } from "../masto/toot.js"; +import { Divider } from "@suid/material"; +import cardStyle from "../material/cards.module.css"; +import Button from "../material/Button.js"; +import MediaAttachmentGrid from "./MediaAttachmentGrid.js"; + +type TootContentViewProps = { + source?: string; + emojis?: mastodon.v1.CustomEmoji[]; +} & JSX.HTMLAttributes; + +const TootContentView: Component = (props) => { + const [managed, rest] = splitProps(props, ["source", "emojis"]); + return ( +
{ + createRenderEffect(() => { + ref.innerHTML = managed.source + ? managed.emojis + ? resolveCustomEmoji(managed.source, managed.emojis) + : managed.source + : ""; + }); + }} + {...rest} + >
+ ); +}; + +const RetootIcon: Component = (props) => { + const [managed, rest] = splitProps(props, ["class"]); + css` + .retoot-icon { + padding: 0; + display: inline-block; + border-radius: 2px; + + > :global(svg) { + color: green; + font-size: 1rem; + vertical-align: middle; + } + } + `; + return ( + + + + ); +}; + +const ReplyIcon: Component = (props) => { + const [managed, rest] = splitProps(props, ["class"]); + css` + .retoot-icon { + padding: 0; + display: inline-block; + border-radius: 2px; + + > :global(svg) { + color: var(--tutu-color-primary); + font-size: 1rem; + vertical-align: middle; + } + } + `; + return ( + + + + ); +}; + +type TootActionGroupProps = { + onRetoot?: (value: T) => void; + onFavourite?: (value: T) => void; + onBookmark?: (value: T) => void; + onReply?: (value: T) => void; +}; + +type TootCardProps = { + status: mastodon.v1.Status; + actionable?: boolean; + evaluated?: boolean; +} & TootActionGroupProps & + JSX.HTMLElementTags["article"]; + +function isolatedCallback(e: MouseEvent) { + e.stopPropagation(); +} + +function TootActionGroup( + props: TootActionGroupProps & { value: T }, +) { + const toot = () => props.value; + return ( +
+ + + + +
+ ); +} + +function TootAuthorGroup(props: { status: mastodon.v1.Status; now: Date }) { + const toot = () => props.status; + + return ( +
+ +
+ { + createRenderEffect(() => { + e.innerHTML = resolveCustomEmoji( + toot().account.displayName, + toot().account.emojis, + ); + }); + }} + /> + + + @{toot().account.username}@{new URL(toot().account.url).hostname} + +
+
+ ); +} + +const RegularToot: Component = (props) => { + let rootRef: HTMLElement; + const [managed, managedActionGroup, rest] = splitProps( + props, + ["status", "lang", "class", "actionable", "evaluated"], + ["onRetoot", "onFavourite", "onBookmark", "onReply"], + ); + const now = useTimeSource(); + const status = () => managed.status; + const toot = () => status().reblog ?? status(); + + css` + .reply-sep { + margin-left: calc(var(--toot-avatar-size) + var(--card-pad) + 8px); + margin-block: 8px; + } + `; + + return ( + <> +
+ +
+ + + { + createRenderEffect(() => { + e.innerHTML = resolveCustomEmoji( + status().account.displayName, + toot().emojis, + ); + }); + }} + >{" "} + boosted + +
+
+ + + 0}> + + + + + + +
+ + ); +}; + +export default RegularToot; diff --git a/src/timelines/TootBottomSheet.tsx b/src/timelines/TootBottomSheet.tsx new file mode 100644 index 0000000..0b40aa0 --- /dev/null +++ b/src/timelines/TootBottomSheet.tsx @@ -0,0 +1,8 @@ +import type { Component } from "solid-js"; + + +const TootBottomSheet: Component = (props) => { + return <> +} + +export default TootBottomSheet diff --git a/src/timelines/TootThread.tsx b/src/timelines/TootThread.tsx new file mode 100644 index 0000000..cf4c226 --- /dev/null +++ b/src/timelines/TootThread.tsx @@ -0,0 +1,86 @@ +import type { mastodon } from "masto"; +import { Show, createResource, createSignal, type Component } from "solid-js"; +import CompactToot from "./CompactToot"; +import { useTimeSource } from "../platform/timesrc"; +import RegularToot from "./RegularToot"; +import cardStyle from "../material/cards.module.css"; +import { css } from "solid-styled"; + +type TootThreadProps = { + status: mastodon.v1.Status; + client: mastodon.rest.Client; + expanded?: 0 | 1 | 2; + + onBoost?(client: mastodon.rest.Client, status: mastodon.v1.Status): void; + onBookmark?(client: mastodon.rest.Client, status: mastodon.v1.Status): void; +}; + +const TootThread: Component = (props) => { + const status = () => props.status; + const now = useTimeSource(); + const [expanded, setExpanded] = createSignal(false); + + const [inReplyTo] = createResource( + () => [props.client, status().inReplyToId || null] as const, + async ([client, replyToId]) => { + if (!(client && replyToId)) return null; + return await client.v1.statuses.$select(replyToId).fetch(); + }, + ); + + const boost = (status: mastodon.v1.Status) => { + props.onBoost?.(props.client, status); + }; + + const bookmark = (status: mastodon.v1.Status) => { + props.onBookmark?.(props.client, status); + }; + + css` + article { + transition: margin 90ms var(--tutu-anim-curve-sharp), var(--tutu-transition-shadow); + user-select: none; + cursor: pointer; + } + + .thread-line { + position: relative; + &::before { + content: ""; + position: absolute; + left: 36px; + top: 16px; + bottom: 0; + background-color: var(--tutu-color-secondary); + width: 2px; + display: block; + } + } + + .expanded { + margin-block: 20px; + box-shadow: var(--tutu-shadow-e9); + } + `; + + return ( +
setExpanded((x) => !x)}> + + + + bookmark(s)} + onRetoot={(s) => boost(s)} + /> +
+ ); +}; + +export default TootThread; diff --git a/src/timelines/toot.module.css b/src/timelines/toot.module.css new file mode 100644 index 0000000..13ab4e7 --- /dev/null +++ b/src/timelines/toot.module.css @@ -0,0 +1,209 @@ +.toot { + --card-pad: 16px; + --card-gut: 16px; + --toot-avatar-size: 40px; + margin-block: 0; + + &.toot { + /* fix composition ordering: I think the css module processor should aware the overriding and behaves, but no */ + transition: margin-block 125ms var(--tutu-anim-curve-std), + height 225ms var(--tutu-anim-curve-std), + var(--tutu-transition-shadow); + border-radius: 0; + } + + &>.toot { + box-shadow: none; + } + + time { + color: var(--tutu-color-secondary-text-on-surface); + } + + & :global(.custom-emoji) { + height: 1em; + object-fit: contain; + } + + &.expanded { + margin-block: 20px; + box-shadow: var(--tutu-shadow-e9); + } +} + +.tootAuthorGrp { + display: flex; + align-items: flex-start; + gap: 8px; + margin-bottom: 8px; + + > :not(:first-child) { + flex-grow: 1; + } +} + +.tootAuthorNameGrp { + display: grid; + grid-template-columns: 1fr auto; + + >* { + color: var(--tutu-color-secondary-text-on-surface); + } + + >:last-child { + grid-column: 1 /3; + } + + > time { + text-align: end; + } + + &:hover { + .tootAuthorNamePrimary { + text-decoration: underline; + } + } +} + +.tootAuthorNamePrimary { + color: revert; +} + +.tootAvatar { + width: calc(var(--toot-avatar-size, 40px) - 1px); + aspect-ratio: 1/1; + object-fit: contain; + border-radius: 50% 50%; + overflow: hidden; + border: 1px solid var(--tutu-color-surface); + background-color: var(--tutu-color-surface-d); +} + +.tootContent { + composes: cardNoPad from '../material/cards.module.css'; + margin-left: calc(var(--card-pad, 0) + var(--toot-avatar-size, 0) + 8px); + margin-right: var(--card-pad, 0); + line-height: 1.5; + + & a { + color: var(--tutu-color-primary-d); + } + + & :global(a[target="_blank"]) { + > :global(.invisible) { + display: none; + } + + > :global(.ellipsis) { + &::after { + display: inline; + content: "..."; + } + } + } +} + +.compact { + display: grid; + grid-template-columns: auto 1fr; + gap: 8px; + row-gap: 0; + padding-block: var(--card-gut, 16px); + padding-inline: var(--card-pad, 16px); + + > :first-child { + grid-row: 1/3; + } + + > :last-child { + grid-column: 2 /3; + } +} + +.compactAuthorGroup { + display: flex; + gap: 8px; + align-items: center; + margin-bottom: 8px; + + > .compactAuthorUsername { + color: var(--tutu-color-secondary-text-on-surface); + flex-grow: 1; + } + + > time { + color: var(--tutu-color-secondary-text-on-surface); + } +} + +.compactTootContent { + composes: tootContent; + margin-left: 0; + margin-right: 0; +} + +.tootRetootGrp { + display: grid; + grid-template-columns: auto 1fr auto; + gap: 8px; + margin-bottom: 8px; +} + +.tootAttachmentGrp { + composes: cardNoPad from '../material/cards.module.css'; + margin-top: 1em; + margin-left: calc(var(--card-pad, 0) + var(--toot-avatar-size, 0) + 8px); + margin-right: var(--card-pad, 0); + display: grid; + gap: 4px; + + >:where(img) { + max-height: 35vh; + min-height: 40px; + object-fit: none; + width: 100%; + background-color: var(--tutu-color-surface-d); + border-radius: 2px; + } +} + +.tootBottomActionGrp { + composes: cardGutSkip from '../material/cards.module.css'; + padding-block: calc((var(--card-gut) - 10px) / 2); + + animation: 225ms var(--tutu-anim-curve-std) tootBottomExpanding; + display: flex; + flex-flow: row wrap; + justify-content: space-evenly; + + > button{ + color: var(--tutu-color-on-surface); + padding: 10px 8px; + + > svg { + font-size: 20px; + } + } +} + +.tootActionWithCount { + display: flex; + align-items: center; + gap: 8px; +} + +.tootAction { + display: flex; + align-items: center; + justify-content: center; +} + +@keyframes tootBottomExpanding { + 0% { + opacity: 0; + } + + 100% { + opacity: 1; + } +} \ No newline at end of file diff --git a/src/utils.tsx b/src/utils.tsx new file mode 100644 index 0000000..51091ca --- /dev/null +++ b/src/utils.tsx @@ -0,0 +1,26 @@ +import { createRenderEffect, createSignal, onCleanup } from "solid-js"; + +export function useDocumentTitle(newTitle?: string) { + const capturedTitle = document.title + const [title, setTitle] = createSignal(newTitle ?? capturedTitle) + + createRenderEffect(() => { + document.title = title() + }) + + onCleanup(() => { + document.title = capturedTitle + }) + + return setTitle +} + +export function mergeClass(c1: string | undefined, c2: string | undefined) { + if (!c1) { + return c2 + } + if (!c2) { + return c1 + } + return [c1, c2].join(' ') +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..137e232 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "strict": true, + "target": "ESNext", + "module": "esnext", + "moduleResolution": "node", + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "jsx": "preserve", + "jsxImportSource": "solid-js", + "types": ["vite/client"], + "noEmit": true, + "isolatedModules": true, + } +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..7612cee --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,27 @@ +import { defineConfig } from "vite"; +import solid from "vite-plugin-solid"; +import solidStyled from "vite-plugin-solid-styled"; +import suid from "@suid/vite-plugin"; +import { VitePWA } from "vite-plugin-pwa"; + +export default defineConfig(({ mode }) => ({ + plugins: [ + suid(), + solid(), + solidStyled({ + filter: { + include: "src/**/*.{tsx,jsx}", + exclude: "node_modules/**/*.{ts,js,tsx,jsx}", + }, + }), + VitePWA({ + registerType: "autoUpdate", + }), + ], + css: { + devSourcemap: true, + }, + build: { + target: ["firefox98", "safari15.4", "ios15.4", "chrome84", "edge87"], + }, +})); From 5449e361d553d65c5d709a49b49dd6de62856bc2 Mon Sep 17 00:00:00 2001 From: thislight Date: Sun, 14 Jul 2024 20:28:44 +0800 Subject: [PATCH 002/300] initial commit --- .browserlist | 1 + .editorconfig | 6 + .gitignore | 2 + .prettierrc | 0 index.html | 13 + package.json | 44 + pnpm-lock.yaml | 4882 +++++++++++++++++++++++ src/App.css | 17 + src/App.tsx | 32 + src/accounts/MastodonOAuth2Callback.tsx | 124 + src/accounts/SignIn.tsx | 173 + src/accounts/stores.ts | 174 + src/index.tsx | 5 + src/masto/acct.ts | 12 + src/masto/clients.ts | 41 + src/masto/timelines.ts | 75 + src/masto/toot.ts | 35 + src/material/Button.tsx | 21 + src/material/Img.tsx | 121 + src/material/Scaffold.tsx | 58 + src/material/Tab.tsx | 80 + src/material/Tabs.tsx | 165 + src/material/TextField.tsx | 80 + src/material/cards.module.css | 55 + src/material/form.module.css | 80 + src/material/material.module.css | 65 + src/material/mui.ts | 16 + src/material/theme.css | 135 + src/material/toolbar.module.css | 0 src/material/typography.module.css | 48 + src/material/typography.tsx | 87 + src/platform/anim.ts | 11 + src/platform/timesrc.ts | 42 + src/settings/stores.ts | 7 + src/timelines/CompactToot.tsx | 57 + src/timelines/Home.tsx | 336 ++ src/timelines/MediaAttachmentGrid.tsx | 80 + src/timelines/MediaViewer.tsx | 378 ++ src/timelines/ProfileMenuButton.tsx | 121 + src/timelines/RegularToot.tsx | 259 ++ src/timelines/TootBottomSheet.tsx | 8 + src/timelines/TootThread.tsx | 86 + src/timelines/toot.module.css | 209 + src/utils.tsx | 26 + tsconfig.json | 15 + vite.config.ts | 27 + 46 files changed, 8309 insertions(+) create mode 100644 .browserlist create mode 100644 .editorconfig create mode 100644 .gitignore create mode 100644 .prettierrc create mode 100644 index.html create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 src/App.css create mode 100644 src/App.tsx create mode 100644 src/accounts/MastodonOAuth2Callback.tsx create mode 100644 src/accounts/SignIn.tsx create mode 100644 src/accounts/stores.ts create mode 100644 src/index.tsx create mode 100644 src/masto/acct.ts create mode 100644 src/masto/clients.ts create mode 100644 src/masto/timelines.ts create mode 100644 src/masto/toot.ts create mode 100644 src/material/Button.tsx create mode 100644 src/material/Img.tsx create mode 100644 src/material/Scaffold.tsx create mode 100644 src/material/Tab.tsx create mode 100644 src/material/Tabs.tsx create mode 100644 src/material/TextField.tsx create mode 100644 src/material/cards.module.css create mode 100644 src/material/form.module.css create mode 100644 src/material/material.module.css create mode 100644 src/material/mui.ts create mode 100644 src/material/theme.css create mode 100644 src/material/toolbar.module.css create mode 100644 src/material/typography.module.css create mode 100644 src/material/typography.tsx create mode 100644 src/platform/anim.ts create mode 100644 src/platform/timesrc.ts create mode 100644 src/settings/stores.ts create mode 100644 src/timelines/CompactToot.tsx create mode 100644 src/timelines/Home.tsx create mode 100644 src/timelines/MediaAttachmentGrid.tsx create mode 100644 src/timelines/MediaViewer.tsx create mode 100644 src/timelines/ProfileMenuButton.tsx create mode 100644 src/timelines/RegularToot.tsx create mode 100644 src/timelines/TootBottomSheet.tsx create mode 100644 src/timelines/TootThread.tsx create mode 100644 src/timelines/toot.module.css create mode 100644 src/utils.tsx create mode 100644 tsconfig.json create mode 100644 vite.config.ts diff --git a/.browserlist b/.browserlist new file mode 100644 index 0000000..b547231 --- /dev/null +++ b/.browserlist @@ -0,0 +1 @@ +>0.3% and not dead, firefox>=98, safari>=15.4, chrome>=84 \ No newline at end of file diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..cf71e4c --- /dev/null +++ b/.editorconfig @@ -0,0 +1,6 @@ +root = true + +[*] +trim_trailing_whitespace = true +indent_size = 2 +indent_style = space diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d26c746 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +node_modules +dist/ \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..e69de29 diff --git a/index.html b/index.html new file mode 100644 index 0000000..6d30de8 --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + Tutu + + + + +
+ + \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..466596f --- /dev/null +++ b/package.json @@ -0,0 +1,44 @@ +{ + "$schema": "https://json.schemastore.org/package", + "name": "tutu", + "version": "0.1.0", + "description": "", + "private": true, + "type": "module", + "scripts": { + "dev": "vite --host 0.0.0.0", + "preview": "vite preview", + "prepare": "vite build" + }, + "keywords": [], + "author": "Rubicon", + "license": "Apache-2.0", + "devDependencies": { + "@suid/vite-plugin": "^0.2.0", + "@types/hammerjs": "^2.0.45", + "postcss": "^8.4.39", + "prettier": "^3.3.2", + "typescript": "^5.5.2", + "vite": "^5.3.2", + "vite-plugin-pwa": "^0.20.0", + "vite-plugin-solid": "^2.10.2", + "vite-plugin-solid-styled": "^0.11.1" + }, + "dependencies": { + "@nanostores/persistent": "^0.9.1", + "@nanostores/solid": "^0.4.2", + "@solid-primitives/event-listener": "^2.3.3", + "@solid-primitives/resize-observer": "^2.0.25", + "@solidjs/router": "^0.11.5", + "@suid/icons-material": "^0.7.0", + "@suid/material": "^0.16.0", + "blurhash": "^2.0.5", + "date-fns": "^3.6.0", + "hammerjs": "^2.0.8", + "masto": "^6.8.0", + "nanostores": "^0.9.5", + "solid-js": "^1.8.18", + "solid-styled": "^0.11.1" + }, + "packageManager": "pnpm@9.5.0+sha512.140036830124618d624a2187b50d04289d5a087f326c9edfc0ccd733d76c4f52c3a313d4fc148794a2a9d81553016004e6742e8cf850670268a7387fc220c903" +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..31b4c61 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,4882 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@nanostores/persistent': + specifier: ^0.9.1 + version: 0.9.1(nanostores@0.9.5) + '@nanostores/solid': + specifier: ^0.4.2 + version: 0.4.2(nanostores@0.9.5)(solid-js@1.8.18) + '@solid-primitives/event-listener': + specifier: ^2.3.3 + version: 2.3.3(solid-js@1.8.18) + '@solid-primitives/resize-observer': + specifier: ^2.0.25 + version: 2.0.25(solid-js@1.8.18) + '@solidjs/router': + specifier: ^0.11.5 + version: 0.11.5(solid-js@1.8.18) + '@suid/icons-material': + specifier: ^0.7.0 + version: 0.7.0(solid-js@1.8.18) + '@suid/material': + specifier: ^0.16.0 + version: 0.16.0(solid-js@1.8.18) + blurhash: + specifier: ^2.0.5 + version: 2.0.5 + date-fns: + specifier: ^3.6.0 + version: 3.6.0 + hammerjs: + specifier: ^2.0.8 + version: 2.0.8 + masto: + specifier: ^6.8.0 + version: 6.8.0 + nanostores: + specifier: ^0.9.5 + version: 0.9.5 + solid-js: + specifier: ^1.8.18 + version: 1.8.18 + solid-styled: + specifier: ^0.11.1 + version: 0.11.1(solid-js@1.8.18) + devDependencies: + '@suid/vite-plugin': + specifier: ^0.2.0 + version: 0.2.0(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2)) + '@types/hammerjs': + specifier: ^2.0.45 + version: 2.0.45 + postcss: + specifier: ^8.4.39 + version: 8.4.39 + prettier: + specifier: ^3.3.2 + version: 3.3.2 + typescript: + specifier: ^5.5.2 + version: 5.5.2 + vite: + specifier: ^5.3.2 + version: 5.3.2(lightningcss@1.25.1)(terser@5.31.2) + vite-plugin-pwa: + specifier: ^0.20.0 + version: 0.20.0(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.1.0) + vite-plugin-solid: + specifier: ^2.10.2 + version: 2.10.2(solid-js@1.8.18)(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2)) + vite-plugin-solid-styled: + specifier: ^0.11.1 + version: 0.11.1(rollup@2.79.1)(solid-styled@0.11.1(solid-js@1.8.18))(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2)) + +packages: + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@apideck/better-ajv-errors@0.3.6': + resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} + engines: {node: '>=10'} + peerDependencies: + ajv: '>=8' + + '@babel/code-frame@7.24.7': + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.24.7': + resolution: {integrity: sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.24.8': + resolution: {integrity: sha512-c4IM7OTg6k1Q+AJ153e2mc2QVTezTwnb4VzquwcyiEzGnW0Kedv4do/TrkU98qPeC5LNiMt/QXwIjzYXLBpyZg==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.24.7': + resolution: {integrity: sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.24.7': + resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.24.8': + resolution: {integrity: sha512-47DG+6F5SzOi0uEvK4wMShmn5yY0mVjVJoWTphdY2B4Rx9wHgjK7Yhtr0ru6nE+sn0v38mzrWOlah0p/YlHHOQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-annotate-as-pure@7.24.7': + resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7': + resolution: {integrity: sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.24.7': + resolution: {integrity: sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.24.8': + resolution: {integrity: sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-create-class-features-plugin@7.24.8': + resolution: {integrity: sha512-4f6Oqnmyp2PP3olgUMmOwC3akxSm5aBYraQ6YDdKy7NcAMkDECHWG0DEnV6M2UAkERgIBhYt8S27rURPg7SxWA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-create-regexp-features-plugin@7.24.7': + resolution: {integrity: sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-define-polyfill-provider@0.6.2': + resolution: {integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + '@babel/helper-environment-visitor@7.24.7': + resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-function-name@7.24.7': + resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-hoist-variables@7.24.7': + resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-member-expression-to-functions@7.24.8': + resolution: {integrity: sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.18.6': + resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.24.7': + resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.24.7': + resolution: {integrity: sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-module-transforms@7.24.8': + resolution: {integrity: sha512-m4vWKVqvkVAWLXfHCCfff2luJj86U+J0/x+0N3ArG/tP0Fq7zky2dYwMbtPmkc/oulkkbjdL3uWzuoBwQ8R00Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-optimise-call-expression@7.24.7': + resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.24.7': + resolution: {integrity: sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.24.8': + resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-remap-async-to-generator@7.24.7': + resolution: {integrity: sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-replace-supers@7.24.7': + resolution: {integrity: sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-simple-access@7.24.7': + resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-skip-transparent-expression-wrappers@7.24.7': + resolution: {integrity: sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-split-export-declaration@7.24.7': + resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.24.7': + resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.24.8': + resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.24.7': + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.24.7': + resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.24.8': + resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} + engines: {node: '>=6.9.0'} + + '@babel/helper-wrap-function@7.24.7': + resolution: {integrity: sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.24.7': + resolution: {integrity: sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==} + engines: {node: '>=6.9.0'} + + '@babel/highlight@7.24.7': + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.24.7': + resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/parser@7.24.8': + resolution: {integrity: sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.7': + resolution: {integrity: sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.7': + resolution: {integrity: sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7': + resolution: {integrity: sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.7': + resolution: {integrity: sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-async-generators@7.8.4': + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-properties@7.12.13': + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-static-block@7.14.5': + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-dynamic-import@7.8.3': + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-export-namespace-from@7.8.3': + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-assertions@7.24.7': + resolution: {integrity: sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.24.7': + resolution: {integrity: sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-json-strings@7.8.3': + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.24.7': + resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-numeric-separator@7.10.4': + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-object-rest-spread@7.8.3': + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3': + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-chaining@7.8.3': + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-private-property-in-object@7.14.5': + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-top-level-await@7.14.5': + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6': + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-arrow-functions@7.24.7': + resolution: {integrity: sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-generator-functions@7.24.7': + resolution: {integrity: sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-to-generator@7.24.7': + resolution: {integrity: sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoped-functions@7.24.7': + resolution: {integrity: sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoping@7.24.7': + resolution: {integrity: sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-properties@7.24.7': + resolution: {integrity: sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-static-block@7.24.7': + resolution: {integrity: sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + + '@babel/plugin-transform-classes@7.24.8': + resolution: {integrity: sha512-VXy91c47uujj758ud9wx+OMgheXm4qJfyhj1P18YvlrQkNOSrwsteHk+EFS3OMGfhMhpZa0A+81eE7G4QC+3CA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-computed-properties@7.24.7': + resolution: {integrity: sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-destructuring@7.24.8': + resolution: {integrity: sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-dotall-regex@7.24.7': + resolution: {integrity: sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-duplicate-keys@7.24.7': + resolution: {integrity: sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-dynamic-import@7.24.7': + resolution: {integrity: sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-exponentiation-operator@7.24.7': + resolution: {integrity: sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-export-namespace-from@7.24.7': + resolution: {integrity: sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-for-of@7.24.7': + resolution: {integrity: sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-function-name@7.24.7': + resolution: {integrity: sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-json-strings@7.24.7': + resolution: {integrity: sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-literals@7.24.7': + resolution: {integrity: sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-logical-assignment-operators@7.24.7': + resolution: {integrity: sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-member-expression-literals@7.24.7': + resolution: {integrity: sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-amd@7.24.7': + resolution: {integrity: sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-commonjs@7.24.8': + resolution: {integrity: sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-systemjs@7.24.7': + resolution: {integrity: sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-umd@7.24.7': + resolution: {integrity: sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-named-capturing-groups-regex@7.24.7': + resolution: {integrity: sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-new-target@7.24.7': + resolution: {integrity: sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-nullish-coalescing-operator@7.24.7': + resolution: {integrity: sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-numeric-separator@7.24.7': + resolution: {integrity: sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-rest-spread@7.24.7': + resolution: {integrity: sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-super@7.24.7': + resolution: {integrity: sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-catch-binding@7.24.7': + resolution: {integrity: sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-chaining@7.24.8': + resolution: {integrity: sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-parameters@7.24.7': + resolution: {integrity: sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-methods@7.24.7': + resolution: {integrity: sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-property-in-object@7.24.7': + resolution: {integrity: sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-property-literals@7.24.7': + resolution: {integrity: sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-regenerator@7.24.7': + resolution: {integrity: sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-reserved-words@7.24.7': + resolution: {integrity: sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-shorthand-properties@7.24.7': + resolution: {integrity: sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-spread@7.24.7': + resolution: {integrity: sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-sticky-regex@7.24.7': + resolution: {integrity: sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-template-literals@7.24.7': + resolution: {integrity: sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typeof-symbol@7.24.8': + resolution: {integrity: sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-escapes@7.24.7': + resolution: {integrity: sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-property-regex@7.24.7': + resolution: {integrity: sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-regex@7.24.7': + resolution: {integrity: sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-sets-regex@7.24.7': + resolution: {integrity: sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/preset-env@7.24.8': + resolution: {integrity: sha512-vObvMZB6hNWuDxhSaEPTKCwcqkAIuDtE+bQGn4XMXne1DSLzFVY8Vmj1bm+mUQXYNN8NmaQEO+r8MMbzPr1jBQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-modules@0.1.6-no-external-plugins': + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + + '@babel/regjsgen@0.8.0': + resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} + + '@babel/runtime@7.24.8': + resolution: {integrity: sha512-5F7SDGs1T72ZczbRwbGO9lQi0NLjQxzl6i4lJxLxfW9U5UluCSyEJeniWvnhl3/euNiqQVbo8zruhsDfid0esA==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.24.7': + resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.24.7': + resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.24.8': + resolution: {integrity: sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.24.7': + resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.24.8': + resolution: {integrity: sha512-SkSBEHwwJRU52QEVZBmMBnE5Ux2/6WU1grdYyOhpbCNxbmJrDuDCphBzKZSO3taf0zztp+qkWlymE5tVL5l0TA==} + engines: {node: '>=6.9.0'} + + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@jridgewell/gen-mapping@0.3.5': + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/source-map@0.3.6': + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + + '@jridgewell/sourcemap-codec@1.4.15': + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@nanostores/persistent@0.9.1': + resolution: {integrity: sha512-ow57Hxm5VMaI5GHET/cVk8hX/iKMmbhcGrB9owfN8p8OHiiJgUlYxe1giacwlAALJXAh2t8bxXh42hHb64BCEA==} + engines: {node: ^16.0.0 || ^18.0.0 || >=20.0.0} + peerDependencies: + nanostores: ^0.9.0 + + '@nanostores/solid@0.4.2': + resolution: {integrity: sha512-8v32+C9KdRbnvP4x4Oiw/CtL1tZwbRxYfmFsPIY9PXevCgxSFnicG6VnLLtNAR7F0kl8Ec7OROHO34Ffv0KDzg==} + peerDependencies: + nanostores: '>=0.8.0' + solid-js: ^1.6.0 + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@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'} + + '@popperjs/core@2.11.8': + resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} + + '@rollup/plugin-babel@5.3.1': + resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} + engines: {node: '>= 10.0.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@types/babel__core': ^7.1.9 + rollup: ^1.20.0||^2.0.0 + peerDependenciesMeta: + '@types/babel__core': + optional: true + + '@rollup/plugin-node-resolve@15.2.3': + resolution: {integrity: sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^2.78.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/plugin-replace@2.4.2': + resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + + '@rollup/plugin-terser@0.4.4': + resolution: {integrity: sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/pluginutils@3.1.0': + resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + + '@rollup/pluginutils@5.1.0': + resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.18.0': + resolution: {integrity: sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.18.0': + resolution: {integrity: sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.18.0': + resolution: {integrity: sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.18.0': + resolution: {integrity: sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-linux-arm-gnueabihf@4.18.0': + resolution: {integrity: sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.18.0': + resolution: {integrity: sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.18.0': + resolution: {integrity: sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.18.0': + resolution: {integrity: sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.18.0': + resolution: {integrity: sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.18.0': + resolution: {integrity: sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.18.0': + resolution: {integrity: sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.18.0': + resolution: {integrity: sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.18.0': + resolution: {integrity: sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.18.0': + resolution: {integrity: sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.18.0': + resolution: {integrity: sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.18.0': + resolution: {integrity: sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==} + cpu: [x64] + os: [win32] + + '@solid-primitives/event-listener@2.3.3': + resolution: {integrity: sha512-DAJbl+F0wrFW2xmcV8dKMBhk9QLVLuBSW+TR4JmIfTaObxd13PuL7nqaXnaYKDWOYa6otB00qcCUIGbuIhSUgQ==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/resize-observer@2.0.25': + resolution: {integrity: sha512-jVDXkt2MiriYRaz4DYs62185d+6jQ+1DCsR+v7f6XMsIJJuf963qdBRFjtZtKXBaxdPNMyuPeDgf5XQe3EoDJg==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/rootless@1.4.5': + resolution: {integrity: sha512-GFJE9GC3ojx0aUKqAUZmQPyU8fOVMtnVNrkdk2yS4kd17WqVSpXpoTmo9CnOwA+PG7FTzdIkogvfLQSLs4lrww==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/static-store@0.0.8': + resolution: {integrity: sha512-ZecE4BqY0oBk0YG00nzaAWO5Mjcny8Fc06CdbXadH9T9lzq/9GefqcSe/5AtdXqjvY/DtJ5C6CkcjPZO0o/eqg==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/utils@6.2.3': + resolution: {integrity: sha512-CqAwKb2T5Vi72+rhebSsqNZ9o67buYRdEJrIFzRXz3U59QqezuuxPsyzTSVCacwS5Pf109VRsgCJQoxKRoECZQ==} + peerDependencies: + solid-js: ^1.6.12 + + '@solidjs/router@0.11.5': + resolution: {integrity: sha512-nclebUUufZT37rB5l0LbJn92vZwJOhYVltfjfLFI3yAcMlwiil5JOy6X2FEgekWsoX29No/GCBTkYfrSZCRfaw==} + peerDependencies: + solid-js: ^1.8.6 + + '@suid/base@0.9.0': + resolution: {integrity: sha512-uj6kYkPB2/79iKJQSIKrSqxA0H0/1vcxxsyclHRMdU/RL3FVGUfasmAMJR7E6YVLi78A+fsabBKeu/yQSrr/Hg==} + peerDependencies: + solid-js: ^1.8.16 + + '@suid/css@0.4.0': + resolution: {integrity: sha512-yzHAlf1CVi7n0SvUrMgs8Z49UiS9669+td1w1frekhRQuRbkXhHoyJkvovaDVJlWRmCPA8Q0f1OTr0uDCUg9mQ==} + + '@suid/icons-material@0.7.0': + resolution: {integrity: sha512-d40gG5GBE/UrUYvVkf53zzhmNIV9eb4z52DUON2fGidprf/LkD4WdamwHKS1QfElvHnuaOci1VjV6cHdblzPBQ==} + peerDependencies: + solid-js: ^1.8.16 + + '@suid/material@0.16.0': + resolution: {integrity: sha512-qr/xdkl8Ekp+GO4m5VhXLi/CBrmUXALc8MP75p8y+0ZMXB+RLwSsZK1z1i9EjmEsmR5RC6G9VFJPWrpMI7j32A==} + peerDependencies: + solid-js: ^1.8.16 + + '@suid/styled-engine@0.7.0': + resolution: {integrity: sha512-yaanC2KI5yl8QrKL2e9Y89XJvqd3wrjZUCNctWWUF+1uypmoXcoP6N6MQvzr3+78fT0iLeEfn3b/lXl8x0+jAw==} + peerDependencies: + solid-js: ^1.8.16 + + '@suid/system@0.11.0': + resolution: {integrity: sha512-DVywaHMG97I7j0KjgOXTQlf6SG72sA5QSsNJ3RkED+dsjvHjkVgBbOkKNR04RHlwlItbR2Wdhu7ZlREvSsneeQ==} + peerDependencies: + solid-js: ^1.8.16 + + '@suid/types@0.6.0': + resolution: {integrity: sha512-W9RtmxQe0ZLvAwtoQtKb96SGNGNIWTskhxkXu5FeH5IPyvU5PpEWFLsyg3rmzLVAUHF1WsQwXBv/EZwwAjFkGQ==} + peerDependencies: + solid-js: ^1.8.16 + + '@suid/utils@0.9.0': + resolution: {integrity: sha512-YDudkXz0PXGlzl6s9OFCsRkdCTn6RBSx6Nb8o+np/SfOQ+Tnx3abgjNGkt10xZMRbobBr0lr6asmkYUQQRhHYA==} + peerDependencies: + solid-js: ^1.8.16 + + '@suid/vite-plugin@0.2.0': + resolution: {integrity: sha512-DDTbtBGS27EzMkIAdn0cLmlyYriBzY7+O8inMgYaSUIxWAPX0qKk5ZNB3qJaUGZXxwcxV7BSj3lOPcSISGvZxA==} + peerDependencies: + vite: ^5.0.0 + + '@surma/rollup-plugin-off-main-thread@2.2.3': + resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + + '@types/css-tree@2.3.8': + resolution: {integrity: sha512-zABG3nI2UENsx7AQv63tI5/ptoAG/7kQR1H0OvG+WTWYHOR5pfAT3cGgC8SdyCrgX/TTxJBZNmx82IjCXs1juQ==} + + '@types/estree@0.0.39': + resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} + + '@types/estree@1.0.5': + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + + '@types/hammerjs@2.0.45': + resolution: {integrity: sha512-qkcUlZmX6c4J8q45taBKTL3p+LbITgyx7qhlPYOdOHZB7B31K0mXbP5YA7i7SgDeEGuI9MnumiKPEMrxg8j3KQ==} + + '@types/resolve@1.20.2': + resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} + + '@types/trusted-types@2.0.7': + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + + acorn@8.12.0: + resolution: {integrity: sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + engines: {node: '>= 0.4'} + + async@3.2.5: + resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} + + at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + babel-plugin-jsx-dom-expressions@0.37.23: + resolution: {integrity: sha512-Y/r8LyLi/njnwPTaDuPEReWk30FJ1KplloYvcFUhHmiH1F7yVVj5mWojD7mbO/IruKyvOs9OIPUoeMi3Z++J4w==} + peerDependencies: + '@babel/core': ^7.20.12 + + babel-plugin-polyfill-corejs2@0.4.11: + resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-corejs3@0.10.4: + resolution: {integrity: sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-regenerator@0.6.2: + resolution: {integrity: sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-preset-solid@1.8.18: + resolution: {integrity: sha512-ky0FA4cCS9dk+xYBBItHoxtbRnaDIOGpmHLFqKPaR81hpMbJBOiLOZia2hT0JBwx4zn/D2OjMRvRr6kqtRMoUw==} + peerDependencies: + '@babel/core': ^7.0.0 + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + blurhash@2.0.5: + resolution: {integrity: sha512-cRygWd7kGBQO3VEhPiTgq4Wc43ctsM+o46urrmPOiuAe+07fzlSB9OJVdpgDL0jPqXUVQ9ht7aq7kxOeJHRK+w==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.23.1: + resolution: {integrity: sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + camel-case@4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + + caniuse-lite@1.0.30001639: + resolution: {integrity: sha512-eFHflNTBIlFwP2AIKaYuBQN/apnUoKNhBdza8ZnW/h2di4LCZ4xFqYlxUxo+LQ76KFI1PGcC1QDxMbxTZpSCAg==} + + capital-case@1.0.4: + resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + change-case@4.1.2: + resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + common-tags@1.8.2: + resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} + engines: {node: '>=4.0.0'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + constant-case@3.0.4: + resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + core-js-compat@3.37.1: + resolution: {integrity: sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==} + + crypto-random-string@2.0.0: + resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} + engines: {node: '>=8'} + + css-tree@2.3.1: + resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + + date-fns@3.6.0: + resolution: {integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==} + + debug@4.3.5: + resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + + dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + + ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + + electron-to-chromium@1.4.815: + resolution: {integrity: sha512-OvpTT2ItpOXJL7IGcYakRjHCt8L5GrrN/wHCQsRB4PQa1X9fe+X9oen245mIId7s14xvArCGSTIq644yPUKKLg==} + + es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} + + es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + + escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + estree-walker@1.0.1: + resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + events-to-async@2.0.1: + resolution: {integrity: sha512-RtnLYrMbXp4JkZIoZu+3VTqV21bNVBlJBZ4NmtwvMNqSE3qouhxv2gvLE4JJDaQc54ioPkrX74V6x+hp/hqjkQ==} + + 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'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-uri@3.0.1: + resolution: {integrity: sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==} + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + + 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] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + get-own-enumerable-property-symbols@3.0.2: + resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} + + get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + hammerjs@2.0.8: + resolution: {integrity: sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==} + engines: {node: '>=0.8.0'} + + has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + header-case@2.0.4: + resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} + + html-entities@2.3.3: + resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} + + idb@7.1.1: + resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} + + is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} + + is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + + is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.14.0: + resolution: {integrity: sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + + is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + + 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'} + + is-module@1.0.0: + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-obj@1.0.1: + resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} + engines: {node: '>=0.10.0'} + + is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + + is-regexp@1.0.0: + resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} + engines: {node: '>=0.10.0'} + + is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + + is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + + is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + + is-what@4.1.16: + resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} + engines: {node: '>=12.13'} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isomorphic-ws@5.0.0: + resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} + peerDependencies: + ws: '*' + + jake@10.9.1: + resolution: {integrity: sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==} + engines: {node: '>=10'} + hasBin: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + + jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-schema@0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + jsonpointer@5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} + + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + + lightningcss-darwin-arm64@1.25.1: + resolution: {integrity: sha512-G4Dcvv85bs5NLENcu/s1f7ehzE3D5ThnlWSDwE190tWXRQCQaqwcuHe+MGSVI/slm0XrxnaayXY+cNl3cSricw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.25.1: + resolution: {integrity: sha512-dYWuCzzfqRueDSmto6YU5SoGHvZTMU1Em9xvhcdROpmtOQLorurUZz8+xFxZ51lCO2LnYbfdjZ/gCqWEkwixNg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.25.1: + resolution: {integrity: sha512-hXoy2s9A3KVNAIoKz+Fp6bNeY+h9c3tkcx1J3+pS48CqAt+5bI/R/YY4hxGL57fWAIquRjGKW50arltD6iRt/w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.25.1: + resolution: {integrity: sha512-tWyMgHFlHlp1e5iW3EpqvH5MvsgoN7ZkylBbG2R2LWxnvH3FuWCJOhtGcYx9Ks0Kv0eZOBud789odkYLhyf1ng==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.25.1: + resolution: {integrity: sha512-Xjxsx286OT9/XSnVLIsFEDyDipqe4BcLeB4pXQ/FEA5+2uWCCuAEarUNQumRucnj7k6ftkAHUEph5r821KBccQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.25.1: + resolution: {integrity: sha512-IhxVFJoTW8wq6yLvxdPvyHv4NjzcpN1B7gjxrY3uaykQNXPHNIpChLB52+wfH+yS58zm1PL4LemUp8u9Cfp6Bw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-x64-gnu@1.25.1: + resolution: {integrity: sha512-RXIaru79KrREPEd6WLXfKfIp4QzoppZvD3x7vuTKkDA64PwTzKJ2jaC43RZHRt8BmyIkRRlmywNhTRMbmkPYpA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.25.1: + resolution: {integrity: sha512-TdcNqFsAENEEFr8fJWg0Y4fZ/nwuqTRsIr7W7t2wmDUlA8eSXVepeeONYcb+gtTj1RaXn/WgNLB45SFkz+XBZA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-win32-x64-msvc@1.25.1: + resolution: {integrity: sha512-9KZZkmmy9oGDSrnyHuxP6iMhbsgChUiu/NSgOx+U1I/wTngBStDf2i2aGRCHvFqj19HqqBEI4WuGVQBa2V6e0A==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.25.1: + resolution: {integrity: sha512-V0RMVZzK1+rCHpymRv4URK2lNhIRyO8g7U7zOFwVAhJuat74HtkjIQpQRKNCwFEYkRGpafOpmXXLoaoBcyVtBg==} + engines: {node: '>= 12.0.0'} + + lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + + lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + magic-string@0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + + masto@6.8.0: + resolution: {integrity: sha512-amooNsp4mebu/dtBZfUHP6I0mcHSDB0JoTyrCWdw2YcCOIuPX6bM0gA60nEaLZqoHSF7xG63TpdDbAYI37Fnlg==} + + mdn-data@2.0.30: + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + + merge-anything@5.1.7: + resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==} + engines: {node: '>=12.13'} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.7: + resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + engines: {node: '>=8.6'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + nanostores@0.9.5: + resolution: {integrity: sha512-Z+p+g8E7yzaWwOe5gEUB2Ox0rCEeXWYIZWmYvw/ajNYX8DlXdMvMDj8DWfM/subqPAcsf8l8Td4iAwO1DeIIRQ==} + engines: {node: ^16.0.0 || ^18.0.0 || >=20.0.0} + + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + + 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'} + + object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + param-case@3.0.4: + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + + pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + + path-case@3.0.4: + resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + postcss@8.4.39: + resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==} + engines: {node: ^10 || ^12 || >=14} + + prettier@3.3.2: + resolution: {integrity: sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==} + engines: {node: '>=14'} + hasBin: true + + pretty-bytes@5.6.0: + resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} + engines: {node: '>=6'} + + pretty-bytes@6.1.1: + resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} + engines: {node: ^14.13.1 || >=16.0.0} + + 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==} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + regenerate-unicode-properties@10.1.1: + resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} + engines: {node: '>=4'} + + regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + regenerator-transform@0.15.2: + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} + + regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + engines: {node: '>= 0.4'} + + regexpu-core@5.3.2: + resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} + engines: {node: '>=4'} + + regjsparser@0.9.1: + resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} + hasBin: true + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rollup@2.79.1: + resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} + engines: {node: '>=10.0.0'} + hasBin: true + + rollup@4.18.0: + resolution: {integrity: sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + engines: {node: '>=0.4'} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + sentence-case@3.0.4: + resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} + + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + + seroval-plugins@1.0.7: + resolution: {integrity: sha512-GO7TkWvodGp6buMEX9p7tNyIkbwlyuAWbI6G9Ec5bhcm7mQdu3JOK1IXbEUwb3FVzSc363GraG/wLW23NSavIw==} + engines: {node: '>=10'} + peerDependencies: + seroval: ^1.0 + + seroval@1.0.7: + resolution: {integrity: sha512-n6ZMQX5q0Vn19Zq7CIKNIo7E75gPkGCFUEqDpa8jgwpYr/vScjqnQ6H09t1uIiZ0ZSK0ypEGvrYK2bhBGWsGdw==} + engines: {node: '>=10'} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + + smob@1.5.0: + resolution: {integrity: sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==} + + snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + + solid-js@1.8.18: + resolution: {integrity: sha512-cpkxDPvO/AuKBugVv6xKFd1C9VC0XZMu4VtF56IlHoux8HgyW44uqNSWbozMnVcpIzHIhS3vVXPAVZYM26jpWw==} + + solid-refresh@0.6.3: + resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==} + peerDependencies: + solid-js: ^1.3 + + solid-styled@0.11.1: + resolution: {integrity: sha512-QZN9hj+lt3gai0HPqzN5kFTn3zHIlyKWXVcYJfiuPGgprRuEB3UvUNqNcOncknJrjHLdZAn/ItA01rs9sqh8hg==} + engines: {node: '>=12'} + peerDependencies: + solid-js: ^1 + + source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + source-map@0.8.0-beta.0: + resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} + engines: {node: '>= 8'} + + sourcemap-codec@1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead + + string.prototype.matchall@4.0.11: + resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} + engines: {node: '>= 0.4'} + + string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + stringify-object@3.3.0: + resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} + engines: {node: '>=4'} + + strip-comments@2.0.1: + resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==} + engines: {node: '>=10'} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + temp-dir@2.0.0: + resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} + engines: {node: '>=8'} + + tempy@0.6.0: + resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==} + engines: {node: '>=10'} + + terser@5.31.2: + resolution: {integrity: sha512-LGyRZVFm/QElZHy/CPr/O4eNZOZIzsrQ92y4v9UJe/pFJjypje2yI3C2FmPtvUEnhadlSbmG2nXtdcjHOjCfxw==} + engines: {node: '>=10'} + hasBin: true + + to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + tr46@1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + + ts-custom-error@3.3.1: + resolution: {integrity: sha512-5OX1tzOjxWEgsr/YEUWSuPrQ00deKLh6D7OTWcvNHm12/7QPyRh8SYpyWvA4IZv8H/+GQWQEh/kwo95Q9OVW1A==} + engines: {node: '>=14.0.0'} + + tslib@2.6.3: + resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + + type-fest@0.16.0: + resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} + engines: {node: '>=10'} + + typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} + + typescript@5.5.2: + resolution: {integrity: sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==} + engines: {node: '>=14.17'} + hasBin: true + + unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + + unicode-canonical-property-names-ecmascript@2.0.0: + resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} + engines: {node: '>=4'} + + unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + + unicode-match-property-value-ecmascript@2.1.0: + resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} + engines: {node: '>=4'} + + unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + + unique-string@2.0.0: + resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} + engines: {node: '>=8'} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unplugin-solid-styled@0.11.1: + resolution: {integrity: sha512-UrDGYSoo9WM1ITo2sz3ktX9RURRNVN5ewy+P7snIGECZE0n6ebrmdPwCFI3imXzZrCMlp/yZgFCrFOvsz8ms/Q==} + engines: {node: '>=10'} + peerDependencies: + solid-styled: '>=0.9' + vite: ^3 || ^4 || ^5 + peerDependenciesMeta: + vite: + optional: true + + unplugin@1.11.0: + resolution: {integrity: sha512-3r7VWZ/webh0SGgJScpWl2/MRCZK5d3ZYFcNaeci/GQ7Teop7zf0Nl2pUuz7G21BwPd9pcUPOC5KmJ2L3WgC5g==} + engines: {node: '>=14.0.0'} + + upath@1.2.0: + resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} + engines: {node: '>=4'} + + update-browserslist-db@1.0.16: + resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + upper-case-first@2.0.2: + resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} + + upper-case@2.0.2: + resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==} + + validate-html-nesting@1.2.2: + resolution: {integrity: sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg==} + + vite-plugin-pwa@0.20.0: + resolution: {integrity: sha512-/kDZyqF8KqoXRpMUQtR5Atri/7BWayW8Gp7Kz/4bfstsV6zSFTxjREbXZYL7zSuRL40HGA+o2hvUAFRmC+bL7g==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@vite-pwa/assets-generator': ^0.2.4 + vite: ^3.1.0 || ^4.0.0 || ^5.0.0 + workbox-build: ^7.1.0 + workbox-window: ^7.1.0 + peerDependenciesMeta: + '@vite-pwa/assets-generator': + optional: true + + vite-plugin-solid-styled@0.11.1: + resolution: {integrity: sha512-aqCCcaGo0EOVVt8JTmSgxBtYDMSDY/bti1WmNBZ6zDRkiN4oqfCQyqq9v+1XtYMhulldsufS3H9h3RXWmkvG4A==} + engines: {node: '>=10'} + peerDependencies: + solid-styled: '>=0.9' + vite: ^3 || ^4 || ^5 + + vite-plugin-solid@2.10.2: + resolution: {integrity: sha512-AOEtwMe2baBSXMXdo+BUwECC8IFHcKS6WQV/1NEd+Q7vHPap5fmIhLcAzr+DUJ04/KHx/1UBU0l1/GWP+rMAPQ==} + peerDependencies: + '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.* + solid-js: ^1.7.2 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + '@testing-library/jest-dom': + optional: true + + vite@5.3.2: + resolution: {integrity: sha512-6lA7OBHBlXUxiJxbO5aAY2fsHHzDr1q7DvXYnyZycRs2Dz+dXBWuhpWHvmljTRTpQC2uvGmUFFkSHF2vGo90MA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + 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 + + vitefu@0.2.5: + resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + vite: + optional: true + + webidl-conversions@4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + + webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + + whatwg-url@7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + + which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + + workbox-background-sync@7.1.0: + resolution: {integrity: sha512-rMbgrzueVWDFcEq1610YyDW71z0oAXLfdRHRQcKw4SGihkfOK0JUEvqWHFwA6rJ+6TClnMIn7KQI5PNN1XQXwQ==} + + workbox-broadcast-update@7.1.0: + resolution: {integrity: sha512-O36hIfhjej/c5ar95pO67k1GQw0/bw5tKP7CERNgK+JdxBANQhDmIuOXZTNvwb2IHBx9hj2kxvcDyRIh5nzOgQ==} + + workbox-build@7.1.1: + resolution: {integrity: sha512-WdkVdC70VMpf5NBCtNbiwdSZeKVuhTEd5PV3mAwpTQCGAB5XbOny1P9egEgNdetv4srAMmMKjvBk4RD58LpooA==} + engines: {node: '>=16.0.0'} + + workbox-cacheable-response@7.1.0: + resolution: {integrity: sha512-iwsLBll8Hvua3xCuBB9h92+/e0wdsmSVgR2ZlvcfjepZWwhd3osumQB3x9o7flj+FehtWM2VHbZn8UJeBXXo6Q==} + + workbox-core@7.1.0: + resolution: {integrity: sha512-5KB4KOY8rtL31nEF7BfvU7FMzKT4B5TkbYa2tzkS+Peqj0gayMT9SytSFtNzlrvMaWgv6y/yvP9C0IbpFjV30Q==} + + workbox-expiration@7.1.0: + resolution: {integrity: sha512-m5DcMY+A63rJlPTbbBNtpJ20i3enkyOtSgYfv/l8h+D6YbbNiA0zKEkCUaMsdDlxggla1oOfRkyqTvl5Ni5KQQ==} + + workbox-google-analytics@7.1.0: + resolution: {integrity: sha512-FvE53kBQHfVTcZyczeBVRexhh7JTkyQ8HAvbVY6mXd2n2A7Oyz/9fIwnY406ZcDhvE4NFfKGjW56N4gBiqkrew==} + + workbox-navigation-preload@7.1.0: + resolution: {integrity: sha512-4wyAbo0vNI/X0uWNJhCMKxnPanNyhybsReMGN9QUpaePLTiDpKxPqFxl4oUmBNddPwIXug01eTSLVIFXimRG/A==} + + workbox-precaching@7.1.0: + resolution: {integrity: sha512-LyxzQts+UEpgtmfnolo0hHdNjoB7EoRWcF7EDslt+lQGd0lW4iTvvSe3v5JiIckQSB5KTW5xiCqjFviRKPj1zA==} + + workbox-range-requests@7.1.0: + resolution: {integrity: sha512-m7+O4EHolNs5yb/79CrnwPR/g/PRzMFYEdo01LqwixVnc/sbzNSvKz0d04OE3aMRel1CwAAZQheRsqGDwATgPQ==} + + workbox-recipes@7.1.0: + resolution: {integrity: sha512-NRrk4ycFN9BHXJB6WrKiRX3W3w75YNrNrzSX9cEZgFB5ubeGoO8s/SDmOYVrFYp9HMw6sh1Pm3eAY/1gVS8YLg==} + + workbox-routing@7.1.0: + resolution: {integrity: sha512-oOYk+kLriUY2QyHkIilxUlVcFqwduLJB7oRZIENbqPGeBP/3TWHYNNdmGNhz1dvKuw7aqvJ7CQxn27/jprlTdg==} + + workbox-strategies@7.1.0: + resolution: {integrity: sha512-/UracPiGhUNehGjRm/tLUQ+9PtWmCbRufWtV0tNrALuf+HZ4F7cmObSEK+E4/Bx1p8Syx2tM+pkIrvtyetdlew==} + + workbox-streams@7.1.0: + resolution: {integrity: sha512-WyHAVxRXBMfysM8ORwiZnI98wvGWTVAq/lOyBjf00pXFvG0mNaVz4Ji+u+fKa/mf1i2SnTfikoYKto4ihHeS6w==} + + workbox-sw@7.1.0: + resolution: {integrity: sha512-Hml/9+/njUXBglv3dtZ9WBKHI235AQJyLBV1G7EFmh4/mUdSQuXui80RtjDeVRrXnm/6QWgRUEHG3/YBVbxtsA==} + + workbox-window@7.1.0: + resolution: {integrity: sha512-ZHeROyqR+AS5UPzholQRDttLFqGMwP0Np8MKWAdyxsDETxq3qOAyXvqessc3GniohG6e0mAqSQyKOHmT8zPF7g==} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@8.17.1: + resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + +snapshots: + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@apideck/better-ajv-errors@0.3.6(ajv@8.17.1)': + dependencies: + ajv: 8.17.1 + json-schema: 0.4.0 + jsonpointer: 5.0.1 + leven: 3.1.0 + + '@babel/code-frame@7.24.7': + dependencies: + '@babel/highlight': 7.24.7 + picocolors: 1.0.1 + + '@babel/compat-data@7.24.7': {} + + '@babel/compat-data@7.24.8': {} + + '@babel/core@7.24.7': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.24.7 + '@babel/helper-compilation-targets': 7.24.7 + '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) + '@babel/helpers': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/template': 7.24.7 + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + convert-source-map: 2.0.0 + debug: 4.3.5 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.24.7': + dependencies: + '@babel/types': 7.24.7 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + + '@babel/generator@7.24.8': + dependencies: + '@babel/types': 7.24.8 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + + '@babel/helper-annotate-as-pure@7.24.7': + dependencies: + '@babel/types': 7.24.7 + + '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7': + dependencies: + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-compilation-targets@7.24.7': + dependencies: + '@babel/compat-data': 7.24.7 + '@babel/helper-validator-option': 7.24.7 + browserslist: 4.23.1 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-compilation-targets@7.24.8': + dependencies: + '@babel/compat-data': 7.24.8 + '@babel/helper-validator-option': 7.24.8 + browserslist: 4.23.1 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.24.8(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-function-name': 7.24.7 + '@babel/helper-member-expression-to-functions': 7.24.8 + '@babel/helper-optimise-call-expression': 7.24.7 + '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7) + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/helper-split-export-declaration': 7.24.7 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-create-regexp-features-plugin@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-annotate-as-pure': 7.24.7 + regexpu-core: 5.3.2 + semver: 6.3.1 + + '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-compilation-targets': 7.24.8 + '@babel/helper-plugin-utils': 7.24.8 + debug: 4.3.5 + lodash.debounce: 4.0.8 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + + '@babel/helper-environment-visitor@7.24.7': + dependencies: + '@babel/types': 7.24.7 + + '@babel/helper-function-name@7.24.7': + dependencies: + '@babel/template': 7.24.7 + '@babel/types': 7.24.7 + + '@babel/helper-hoist-variables@7.24.7': + dependencies: + '@babel/types': 7.24.7 + + '@babel/helper-member-expression-to-functions@7.24.8': + dependencies: + '@babel/traverse': 7.24.8 + '@babel/types': 7.24.8 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.18.6': + dependencies: + '@babel/types': 7.24.7 + + '@babel/helper-module-imports@7.24.7': + dependencies: + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-simple-access': 7.24.7 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.24.8(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-simple-access': 7.24.7 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-optimise-call-expression@7.24.7': + dependencies: + '@babel/types': 7.24.7 + + '@babel/helper-plugin-utils@7.24.7': {} + + '@babel/helper-plugin-utils@7.24.8': {} + + '@babel/helper-remap-async-to-generator@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-wrap-function': 7.24.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-replace-supers@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-member-expression-to-functions': 7.24.8 + '@babel/helper-optimise-call-expression': 7.24.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-simple-access@7.24.7': + dependencies: + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.24.7': + dependencies: + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-split-export-declaration@7.24.7': + dependencies: + '@babel/types': 7.24.7 + + '@babel/helper-string-parser@7.24.7': {} + + '@babel/helper-string-parser@7.24.8': {} + + '@babel/helper-validator-identifier@7.24.7': {} + + '@babel/helper-validator-option@7.24.7': {} + + '@babel/helper-validator-option@7.24.8': {} + + '@babel/helper-wrap-function@7.24.7': + dependencies: + '@babel/helper-function-name': 7.24.7 + '@babel/template': 7.24.7 + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + transitivePeerDependencies: + - supports-color + + '@babel/helpers@7.24.7': + dependencies: + '@babel/template': 7.24.7 + '@babel/types': 7.24.7 + + '@babel/highlight@7.24.7': + dependencies: + '@babel/helper-validator-identifier': 7.24.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.0.1 + + '@babel/parser@7.24.7': + dependencies: + '@babel/types': 7.24.7 + + '@babel/parser@7.24.8': + dependencies: + '@babel/types': 7.24.8 + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.24.7) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-import-assertions@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-import-attributes@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-arrow-functions@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-async-generator-functions@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-remap-async-to-generator': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.7) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-async-to-generator@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-remap-async-to-generator': 7.24.7(@babel/core@7.24.7) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-block-scoped-functions@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-block-scoping@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-class-properties@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-class-static-block@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.7) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-classes@7.24.8(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-compilation-targets': 7.24.8 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-function-name': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7) + '@babel/helper-split-export-declaration': 7.24.7 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-computed-properties@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/template': 7.24.7 + + '@babel/plugin-transform-destructuring@7.24.8(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-dotall-regex@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-duplicate-keys@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-dynamic-import@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.7) + + '@babel/plugin-transform-exponentiation-operator@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-export-namespace-from@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.7) + + '@babel/plugin-transform-for-of@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-function-name@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-compilation-targets': 7.24.8 + '@babel/helper-function-name': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-json-strings@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.7) + + '@babel/plugin-transform-literals@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-logical-assignment-operators@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.7) + + '@babel/plugin-transform-member-expression-literals@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-modules-amd@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-commonjs@7.24.8(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-module-transforms': 7.24.8(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-simple-access': 7.24.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-systemjs@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-hoist-variables': 7.24.7 + '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-umd@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-named-capturing-groups-regex@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-new-target@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-nullish-coalescing-operator@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7) + + '@babel/plugin-transform-numeric-separator@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.7) + + '@babel/plugin-transform-object-rest-spread@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-compilation-targets': 7.24.8 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.24.7) + + '@babel/plugin-transform-object-super@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-optional-catch-binding@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.7) + + '@babel/plugin-transform-optional-chaining@7.24.8(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-parameters@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-private-methods@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-private-property-in-object@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.7) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-property-literals@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-regenerator@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + regenerator-transform: 0.15.2 + + '@babel/plugin-transform-reserved-words@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-shorthand-properties@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-spread@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-sticky-regex@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-template-literals@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-typeof-symbol@7.24.8(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-unicode-escapes@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-unicode-property-regex@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-unicode-regex@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-unicode-sets-regex@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/preset-env@7.24.8(@babel/core@7.24.7)': + dependencies: + '@babel/compat-data': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-compilation-targets': 7.24.8 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-validator-option': 7.24.8 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.7) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.7) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.7) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.7) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-syntax-import-assertions': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-syntax-import-attributes': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.7) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.7) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.7) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.7) + '@babel/plugin-transform-arrow-functions': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-async-generator-functions': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-async-to-generator': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-block-scoped-functions': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-block-scoping': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-class-properties': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-class-static-block': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-classes': 7.24.8(@babel/core@7.24.7) + '@babel/plugin-transform-computed-properties': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-destructuring': 7.24.8(@babel/core@7.24.7) + '@babel/plugin-transform-dotall-regex': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-duplicate-keys': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-dynamic-import': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-exponentiation-operator': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-export-namespace-from': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-for-of': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-function-name': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-json-strings': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-literals': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-logical-assignment-operators': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-member-expression-literals': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-modules-amd': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.24.7) + '@babel/plugin-transform-modules-systemjs': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-modules-umd': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-named-capturing-groups-regex': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-new-target': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-nullish-coalescing-operator': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-numeric-separator': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-object-rest-spread': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-object-super': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-optional-catch-binding': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.24.7) + '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-private-methods': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-private-property-in-object': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-property-literals': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-regenerator': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-reserved-words': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-shorthand-properties': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-spread': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-sticky-regex': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-template-literals': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-typeof-symbol': 7.24.8(@babel/core@7.24.7) + '@babel/plugin-transform-unicode-escapes': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-unicode-property-regex': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-unicode-regex': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-unicode-sets-regex': 7.24.7(@babel/core@7.24.7) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.7) + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.7) + babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.7) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.7) + core-js-compat: 3.37.1 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/types': 7.24.7 + esutils: 2.0.3 + + '@babel/regjsgen@0.8.0': {} + + '@babel/runtime@7.24.8': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/template@7.24.7': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/types': 7.24.7 + + '@babel/traverse@7.24.7': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-function-name': 7.24.7 + '@babel/helper-hoist-variables': 7.24.7 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/types': 7.24.7 + debug: 4.3.5 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/traverse@7.24.8': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.24.8 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-function-name': 7.24.7 + '@babel/helper-hoist-variables': 7.24.7 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/parser': 7.24.8 + '@babel/types': 7.24.8 + debug: 4.3.5 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.24.7': + dependencies: + '@babel/helper-string-parser': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 + to-fast-properties: 2.0.0 + + '@babel/types@7.24.8': + dependencies: + '@babel/helper-string-parser': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 + to-fast-properties: 2.0.0 + + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-s390x@0.21.5': + optional: true + + '@esbuild/linux-x64@0.21.5': + optional: true + + '@esbuild/netbsd-x64@0.21.5': + optional: true + + '@esbuild/openbsd-x64@0.21.5': + optional: true + + '@esbuild/sunos-x64@0.21.5': + optional: true + + '@esbuild/win32-arm64@0.21.5': + optional: true + + '@esbuild/win32-ia32@0.21.5': + optional: true + + '@esbuild/win32-x64@0.21.5': + optional: true + + '@jridgewell/gen-mapping@0.3.5': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/source-map@0.3.6': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/sourcemap-codec@1.4.15': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + + '@nanostores/persistent@0.9.1(nanostores@0.9.5)': + dependencies: + nanostores: 0.9.5 + + '@nanostores/solid@0.4.2(nanostores@0.9.5)(solid-js@1.8.18)': + dependencies: + nanostores: 0.9.5 + solid-js: 1.8.18 + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + '@popperjs/core@2.11.8': {} + + '@rollup/plugin-babel@5.3.1(@babel/core@7.24.7)(@types/babel__core@7.20.5)(rollup@2.79.1)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-module-imports': 7.24.7 + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + rollup: 2.79.1 + optionalDependencies: + '@types/babel__core': 7.20.5 + transitivePeerDependencies: + - supports-color + + '@rollup/plugin-node-resolve@15.2.3(rollup@2.79.1)': + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@2.79.1) + '@types/resolve': 1.20.2 + deepmerge: 4.3.1 + is-builtin-module: 3.2.1 + is-module: 1.0.0 + resolve: 1.22.8 + optionalDependencies: + rollup: 2.79.1 + + '@rollup/plugin-replace@2.4.2(rollup@2.79.1)': + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + magic-string: 0.25.9 + rollup: 2.79.1 + + '@rollup/plugin-terser@0.4.4(rollup@2.79.1)': + dependencies: + serialize-javascript: 6.0.2 + smob: 1.5.0 + terser: 5.31.2 + optionalDependencies: + rollup: 2.79.1 + + '@rollup/pluginutils@3.1.0(rollup@2.79.1)': + dependencies: + '@types/estree': 0.0.39 + estree-walker: 1.0.1 + picomatch: 2.3.1 + rollup: 2.79.1 + + '@rollup/pluginutils@5.1.0(rollup@2.79.1)': + dependencies: + '@types/estree': 1.0.5 + estree-walker: 2.0.2 + picomatch: 2.3.1 + optionalDependencies: + rollup: 2.79.1 + + '@rollup/rollup-android-arm-eabi@4.18.0': + optional: true + + '@rollup/rollup-android-arm64@4.18.0': + optional: true + + '@rollup/rollup-darwin-arm64@4.18.0': + optional: true + + '@rollup/rollup-darwin-x64@4.18.0': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.18.0': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.18.0': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.18.0': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.18.0': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.18.0': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.18.0': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.18.0': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.18.0': + optional: true + + '@rollup/rollup-linux-x64-musl@4.18.0': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.18.0': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.18.0': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.18.0': + optional: true + + '@solid-primitives/event-listener@2.3.3(solid-js@1.8.18)': + dependencies: + '@solid-primitives/utils': 6.2.3(solid-js@1.8.18) + solid-js: 1.8.18 + + '@solid-primitives/resize-observer@2.0.25(solid-js@1.8.18)': + dependencies: + '@solid-primitives/event-listener': 2.3.3(solid-js@1.8.18) + '@solid-primitives/rootless': 1.4.5(solid-js@1.8.18) + '@solid-primitives/static-store': 0.0.8(solid-js@1.8.18) + '@solid-primitives/utils': 6.2.3(solid-js@1.8.18) + solid-js: 1.8.18 + + '@solid-primitives/rootless@1.4.5(solid-js@1.8.18)': + dependencies: + '@solid-primitives/utils': 6.2.3(solid-js@1.8.18) + solid-js: 1.8.18 + + '@solid-primitives/static-store@0.0.8(solid-js@1.8.18)': + dependencies: + '@solid-primitives/utils': 6.2.3(solid-js@1.8.18) + solid-js: 1.8.18 + + '@solid-primitives/utils@6.2.3(solid-js@1.8.18)': + dependencies: + solid-js: 1.8.18 + + '@solidjs/router@0.11.5(solid-js@1.8.18)': + dependencies: + solid-js: 1.8.18 + + '@suid/base@0.9.0(solid-js@1.8.18)': + dependencies: + '@popperjs/core': 2.11.8 + '@suid/css': 0.4.0 + '@suid/system': 0.11.0(solid-js@1.8.18) + '@suid/types': 0.6.0(solid-js@1.8.18) + '@suid/utils': 0.9.0(solid-js@1.8.18) + clsx: 2.1.1 + solid-js: 1.8.18 + + '@suid/css@0.4.0': {} + + '@suid/icons-material@0.7.0(solid-js@1.8.18)': + dependencies: + '@suid/material': 0.16.0(solid-js@1.8.18) + solid-js: 1.8.18 + + '@suid/material@0.16.0(solid-js@1.8.18)': + dependencies: + '@suid/base': 0.9.0(solid-js@1.8.18) + '@suid/css': 0.4.0 + '@suid/system': 0.11.0(solid-js@1.8.18) + '@suid/types': 0.6.0(solid-js@1.8.18) + '@suid/utils': 0.9.0(solid-js@1.8.18) + clsx: 2.1.1 + solid-js: 1.8.18 + + '@suid/styled-engine@0.7.0(solid-js@1.8.18)': + dependencies: + '@suid/css': 0.4.0 + '@suid/utils': 0.9.0(solid-js@1.8.18) + solid-js: 1.8.18 + + '@suid/system@0.11.0(solid-js@1.8.18)': + dependencies: + '@suid/css': 0.4.0 + '@suid/styled-engine': 0.7.0(solid-js@1.8.18) + '@suid/types': 0.6.0(solid-js@1.8.18) + '@suid/utils': 0.9.0(solid-js@1.8.18) + clsx: 2.1.1 + csstype: 3.1.3 + solid-js: 1.8.18 + + '@suid/types@0.6.0(solid-js@1.8.18)': + dependencies: + solid-js: 1.8.18 + + '@suid/utils@0.9.0(solid-js@1.8.18)': + dependencies: + '@suid/types': 0.6.0(solid-js@1.8.18) + solid-js: 1.8.18 + + '@suid/vite-plugin@0.2.0(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2))': + dependencies: + '@babel/generator': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + '@types/babel__generator': 7.6.8 + '@types/babel__traverse': 7.20.6 + vite: 5.3.2(lightningcss@1.25.1)(terser@5.31.2) + transitivePeerDependencies: + - supports-color + + '@surma/rollup-plugin-off-main-thread@2.2.3': + dependencies: + ejs: 3.1.10 + json5: 2.2.3 + magic-string: 0.25.9 + string.prototype.matchall: 4.0.11 + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.24.7 + '@babel/types': 7.24.7 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 + + '@types/babel__generator@7.6.8': + dependencies: + '@babel/types': 7.24.7 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.24.7 + '@babel/types': 7.24.7 + + '@types/babel__traverse@7.20.6': + dependencies: + '@babel/types': 7.24.7 + + '@types/css-tree@2.3.8': {} + + '@types/estree@0.0.39': {} + + '@types/estree@1.0.5': {} + + '@types/hammerjs@2.0.45': {} + + '@types/resolve@1.20.2': {} + + '@types/trusted-types@2.0.7': {} + + acorn@8.12.0: {} + + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.1 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + array-buffer-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + is-array-buffer: 3.0.4 + + arraybuffer.prototype.slice@1.0.3: + dependencies: + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 + + async@3.2.5: {} + + at-least-node@1.0.0: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.0.0 + + babel-plugin-jsx-dom-expressions@0.37.23(@babel/core@7.24.7): + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-module-imports': 7.18.6 + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.7) + '@babel/types': 7.24.7 + html-entities: 2.3.3 + validate-html-nesting: 1.2.2 + + babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.24.7): + dependencies: + '@babel/compat-data': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.7) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.7): + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.7) + core-js-compat: 3.37.1 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.24.7): + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.7) + transitivePeerDependencies: + - supports-color + + babel-preset-solid@1.8.18(@babel/core@7.24.7): + dependencies: + '@babel/core': 7.24.7 + babel-plugin-jsx-dom-expressions: 0.37.23(@babel/core@7.24.7) + + balanced-match@1.0.2: {} + + binary-extensions@2.3.0: {} + + blurhash@2.0.5: {} + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.23.1: + dependencies: + caniuse-lite: 1.0.30001639 + electron-to-chromium: 1.4.815 + node-releases: 2.0.14 + update-browserslist-db: 1.0.16(browserslist@4.23.1) + + buffer-from@1.1.2: {} + + builtin-modules@3.3.0: {} + + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + + camel-case@4.1.2: + dependencies: + pascal-case: 3.1.2 + tslib: 2.6.3 + + caniuse-lite@1.0.30001639: {} + + capital-case@1.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.6.3 + upper-case-first: 2.0.2 + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + change-case@4.1.2: + dependencies: + camel-case: 4.1.2 + capital-case: 1.0.4 + constant-case: 3.0.4 + dot-case: 3.0.4 + header-case: 2.0.4 + no-case: 3.0.4 + param-case: 3.0.4 + pascal-case: 3.1.2 + path-case: 3.0.4 + sentence-case: 3.0.4 + snake-case: 3.0.4 + tslib: 2.6.3 + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + 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 + + clsx@2.1.1: {} + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + commander@2.20.3: {} + + common-tags@1.8.2: {} + + concat-map@0.0.1: {} + + constant-case@3.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.6.3 + upper-case: 2.0.2 + + convert-source-map@2.0.0: {} + + core-js-compat@3.37.1: + dependencies: + browserslist: 4.23.1 + + crypto-random-string@2.0.0: {} + + css-tree@2.3.1: + dependencies: + mdn-data: 2.0.30 + source-map-js: 1.2.0 + + csstype@3.1.3: {} + + data-view-buffer@1.0.1: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-offset@1.0.0: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + date-fns@3.6.0: {} + + debug@4.3.5: + dependencies: + ms: 2.1.2 + + deepmerge@4.3.1: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + detect-libc@1.0.3: {} + + dot-case@3.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.6.3 + + ejs@3.1.10: + dependencies: + jake: 10.9.1 + + electron-to-chromium@1.4.815: {} + + es-abstract@1.23.3: + dependencies: + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 + is-callable: 1.2.7 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.3 + is-string: 1.0.7 + is-typed-array: 1.1.13 + is-weakref: 1.0.2 + object-inspect: 1.13.2 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.15 + + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 + + es-errors@1.3.0: {} + + es-object-atoms@1.0.0: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.0.3: + dependencies: + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-to-primitive@1.2.1: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + + escalade@3.1.2: {} + + escape-string-regexp@1.0.5: {} + + estree-walker@1.0.1: {} + + estree-walker@2.0.2: {} + + esutils@2.0.3: {} + + events-to-async@2.0.1: {} + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.2: + 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.7 + + fast-json-stable-stringify@2.1.0: {} + + fast-uri@3.0.1: {} + + fastq@1.17.1: + dependencies: + reusify: 1.0.4 + + filelist@1.0.4: + dependencies: + minimatch: 5.1.6 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + for-each@0.3.3: + dependencies: + is-callable: 1.2.7 + + fs-extra@9.1.0: + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + function.prototype.name@1.1.6: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + functions-have-names: 1.2.3 + + functions-have-names@1.2.3: {} + + gensync@1.0.0-beta.2: {} + + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + + get-own-enumerable-property-symbols@3.0.2: {} + + get-symbol-description@1.0.2: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob@7.2.3: + 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 + + globals@11.12.0: {} + + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.0.1 + + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.4 + + graceful-fs@4.2.11: {} + + hammerjs@2.0.8: {} + + has-bigints@1.0.2: {} + + has-flag@3.0.0: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 + + has-proto@1.0.3: {} + + has-symbols@1.0.3: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.0.3 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + header-case@2.0.4: + dependencies: + capital-case: 1.0.4 + tslib: 2.6.3 + + html-entities@2.3.3: {} + + idb@7.1.1: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + internal-slot@1.0.7: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.0.6 + + is-array-buffer@3.0.4: + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + + is-bigint@1.0.4: + dependencies: + has-bigints: 1.0.2 + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-boolean-object@1.1.2: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-builtin-module@3.2.1: + dependencies: + builtin-modules: 3.3.0 + + is-callable@1.2.7: {} + + is-core-module@2.14.0: + dependencies: + hasown: 2.0.2 + + is-data-view@1.0.1: + dependencies: + is-typed-array: 1.1.13 + + is-date-object@1.0.5: + dependencies: + has-tostringtag: 1.0.2 + + is-extglob@2.1.1: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-module@1.0.0: {} + + is-negative-zero@2.0.3: {} + + is-number-object@1.0.7: + dependencies: + has-tostringtag: 1.0.2 + + is-number@7.0.0: {} + + is-obj@1.0.1: {} + + is-regex@1.1.4: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-regexp@1.0.0: {} + + is-shared-array-buffer@1.0.3: + dependencies: + call-bind: 1.0.7 + + is-stream@2.0.1: {} + + is-string@1.0.7: + dependencies: + has-tostringtag: 1.0.2 + + is-symbol@1.0.4: + dependencies: + has-symbols: 1.0.3 + + is-typed-array@1.1.13: + dependencies: + which-typed-array: 1.1.15 + + is-weakref@1.0.2: + dependencies: + call-bind: 1.0.7 + + is-what@4.1.16: {} + + isarray@2.0.5: {} + + isomorphic-ws@5.0.0(ws@8.17.1): + dependencies: + ws: 8.17.1 + + jake@10.9.1: + dependencies: + async: 3.2.5 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + + js-tokens@4.0.0: {} + + jsesc@0.5.0: {} + + jsesc@2.5.2: {} + + json-schema-traverse@1.0.0: {} + + json-schema@0.4.0: {} + + json5@2.2.3: {} + + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + jsonpointer@5.0.1: {} + + leven@3.1.0: {} + + lightningcss-darwin-arm64@1.25.1: + optional: true + + lightningcss-darwin-x64@1.25.1: + optional: true + + lightningcss-freebsd-x64@1.25.1: + optional: true + + lightningcss-linux-arm-gnueabihf@1.25.1: + optional: true + + lightningcss-linux-arm64-gnu@1.25.1: + optional: true + + lightningcss-linux-arm64-musl@1.25.1: + optional: true + + lightningcss-linux-x64-gnu@1.25.1: + optional: true + + lightningcss-linux-x64-musl@1.25.1: + optional: true + + lightningcss-win32-x64-msvc@1.25.1: + optional: true + + lightningcss@1.25.1: + dependencies: + detect-libc: 1.0.3 + optionalDependencies: + lightningcss-darwin-arm64: 1.25.1 + lightningcss-darwin-x64: 1.25.1 + lightningcss-freebsd-x64: 1.25.1 + lightningcss-linux-arm-gnueabihf: 1.25.1 + lightningcss-linux-arm64-gnu: 1.25.1 + lightningcss-linux-arm64-musl: 1.25.1 + lightningcss-linux-x64-gnu: 1.25.1 + lightningcss-linux-x64-musl: 1.25.1 + lightningcss-win32-x64-msvc: 1.25.1 + + lodash.debounce@4.0.8: {} + + lodash.sortby@4.7.0: {} + + lodash@4.17.21: {} + + lower-case@2.0.2: + dependencies: + tslib: 2.6.3 + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + magic-string@0.25.9: + dependencies: + sourcemap-codec: 1.4.8 + + masto@6.8.0: + dependencies: + change-case: 4.1.2 + events-to-async: 2.0.1 + isomorphic-ws: 5.0.0(ws@8.17.1) + ts-custom-error: 3.3.1 + ws: 8.17.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + mdn-data@2.0.30: {} + + merge-anything@5.1.7: + dependencies: + is-what: 4.1.16 + + merge2@1.4.1: {} + + micromatch@4.0.7: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.1 + + ms@2.1.2: {} + + nanoid@3.3.7: {} + + nanostores@0.9.5: {} + + no-case@3.0.4: + dependencies: + lower-case: 2.0.2 + tslib: 2.6.3 + + node-releases@2.0.14: {} + + normalize-path@3.0.0: {} + + object-inspect@1.13.2: {} + + object-keys@1.1.1: {} + + object.assign@4.1.5: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + param-case@3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.6.3 + + pascal-case@3.1.2: + dependencies: + no-case: 3.0.4 + tslib: 2.6.3 + + path-case@3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.6.3 + + path-is-absolute@1.0.1: {} + + path-parse@1.0.7: {} + + picocolors@1.0.1: {} + + picomatch@2.3.1: {} + + possible-typed-array-names@1.0.0: {} + + postcss@8.4.39: + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.1 + source-map-js: 1.2.0 + + prettier@3.3.2: {} + + pretty-bytes@5.6.0: {} + + pretty-bytes@6.1.1: {} + + punycode@2.3.1: {} + + queue-microtask@1.2.3: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + regenerate-unicode-properties@10.1.1: + dependencies: + regenerate: 1.4.2 + + regenerate@1.4.2: {} + + regenerator-runtime@0.14.1: {} + + regenerator-transform@0.15.2: + dependencies: + '@babel/runtime': 7.24.8 + + regexp.prototype.flags@1.5.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 + + regexpu-core@5.3.2: + dependencies: + '@babel/regjsgen': 0.8.0 + regenerate: 1.4.2 + regenerate-unicode-properties: 10.1.1 + regjsparser: 0.9.1 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.1.0 + + regjsparser@0.9.1: + dependencies: + jsesc: 0.5.0 + + require-from-string@2.0.2: {} + + resolve@1.22.8: + dependencies: + is-core-module: 2.14.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + reusify@1.0.4: {} + + rollup@2.79.1: + optionalDependencies: + fsevents: 2.3.3 + + rollup@4.18.0: + dependencies: + '@types/estree': 1.0.5 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.18.0 + '@rollup/rollup-android-arm64': 4.18.0 + '@rollup/rollup-darwin-arm64': 4.18.0 + '@rollup/rollup-darwin-x64': 4.18.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.18.0 + '@rollup/rollup-linux-arm-musleabihf': 4.18.0 + '@rollup/rollup-linux-arm64-gnu': 4.18.0 + '@rollup/rollup-linux-arm64-musl': 4.18.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.18.0 + '@rollup/rollup-linux-riscv64-gnu': 4.18.0 + '@rollup/rollup-linux-s390x-gnu': 4.18.0 + '@rollup/rollup-linux-x64-gnu': 4.18.0 + '@rollup/rollup-linux-x64-musl': 4.18.0 + '@rollup/rollup-win32-arm64-msvc': 4.18.0 + '@rollup/rollup-win32-ia32-msvc': 4.18.0 + '@rollup/rollup-win32-x64-msvc': 4.18.0 + fsevents: 2.3.3 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safe-array-concat@1.1.2: + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + isarray: 2.0.5 + + safe-buffer@5.2.1: {} + + safe-regex-test@1.0.3: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-regex: 1.1.4 + + semver@6.3.1: {} + + sentence-case@3.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.6.3 + upper-case-first: 2.0.2 + + serialize-javascript@6.0.2: + dependencies: + randombytes: 2.1.0 + + seroval-plugins@1.0.7(seroval@1.0.7): + dependencies: + seroval: 1.0.7 + + seroval@1.0.7: {} + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + side-channel@1.0.6: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.2 + + smob@1.5.0: {} + + snake-case@3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.6.3 + + solid-js@1.8.18: + dependencies: + csstype: 3.1.3 + seroval: 1.0.7 + seroval-plugins: 1.0.7(seroval@1.0.7) + + solid-refresh@0.6.3(solid-js@1.8.18): + dependencies: + '@babel/generator': 7.24.7 + '@babel/helper-module-imports': 7.24.7 + '@babel/types': 7.24.7 + solid-js: 1.8.18 + transitivePeerDependencies: + - supports-color + + solid-styled@0.11.1(solid-js@1.8.18): + dependencies: + '@babel/core': 7.24.7 + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + '@types/css-tree': 2.3.8 + browserslist: 4.23.1 + css-tree: 2.3.1 + lightningcss: 1.25.1 + solid-js: 1.8.18 + transitivePeerDependencies: + - supports-color + + source-map-js@1.2.0: {} + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + source-map@0.8.0-beta.0: + dependencies: + whatwg-url: 7.1.0 + + sourcemap-codec@1.4.8: {} + + string.prototype.matchall@4.0.11: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.7 + regexp.prototype.flags: 1.5.2 + set-function-name: 2.0.2 + side-channel: 1.0.6 + + string.prototype.trim@1.2.9: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + + string.prototype.trimend@1.0.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + stringify-object@3.3.0: + dependencies: + get-own-enumerable-property-symbols: 3.0.2 + is-obj: 1.0.1 + is-regexp: 1.0.0 + + strip-comments@2.0.1: {} + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + temp-dir@2.0.0: {} + + tempy@0.6.0: + dependencies: + is-stream: 2.0.1 + temp-dir: 2.0.0 + type-fest: 0.16.0 + unique-string: 2.0.0 + + terser@5.31.2: + dependencies: + '@jridgewell/source-map': 0.3.6 + acorn: 8.12.0 + commander: 2.20.3 + source-map-support: 0.5.21 + + to-fast-properties@2.0.0: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + tr46@1.0.1: + dependencies: + punycode: 2.3.1 + + ts-custom-error@3.3.1: {} + + tslib@2.6.3: {} + + type-fest@0.16.0: {} + + typed-array-buffer@1.0.2: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 + + typed-array-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + + typed-array-byte-offset@1.0.2: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + + typed-array-length@1.0.6: + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 + + typescript@5.5.2: {} + + unbox-primitive@1.0.2: + dependencies: + call-bind: 1.0.7 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + + unicode-canonical-property-names-ecmascript@2.0.0: {} + + unicode-match-property-ecmascript@2.0.0: + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.0 + unicode-property-aliases-ecmascript: 2.1.0 + + unicode-match-property-value-ecmascript@2.1.0: {} + + unicode-property-aliases-ecmascript@2.1.0: {} + + unique-string@2.0.0: + dependencies: + crypto-random-string: 2.0.0 + + universalify@2.0.1: {} + + unplugin-solid-styled@0.11.1(rollup@2.79.1)(solid-styled@0.11.1(solid-js@1.8.18))(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2)): + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@2.79.1) + solid-styled: 0.11.1(solid-js@1.8.18) + unplugin: 1.11.0 + optionalDependencies: + vite: 5.3.2(lightningcss@1.25.1)(terser@5.31.2) + transitivePeerDependencies: + - rollup + + unplugin@1.11.0: + dependencies: + acorn: 8.12.0 + chokidar: 3.6.0 + webpack-sources: 3.2.3 + webpack-virtual-modules: 0.6.2 + + upath@1.2.0: {} + + update-browserslist-db@1.0.16(browserslist@4.23.1): + dependencies: + browserslist: 4.23.1 + escalade: 3.1.2 + picocolors: 1.0.1 + + upper-case-first@2.0.2: + dependencies: + tslib: 2.6.3 + + upper-case@2.0.2: + dependencies: + tslib: 2.6.3 + + validate-html-nesting@1.2.2: {} + + vite-plugin-pwa@0.20.0(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.1.0): + dependencies: + debug: 4.3.5 + fast-glob: 3.3.2 + pretty-bytes: 6.1.1 + vite: 5.3.2(lightningcss@1.25.1)(terser@5.31.2) + workbox-build: 7.1.1(@types/babel__core@7.20.5) + workbox-window: 7.1.0 + transitivePeerDependencies: + - supports-color + + vite-plugin-solid-styled@0.11.1(rollup@2.79.1)(solid-styled@0.11.1(solid-js@1.8.18))(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2)): + dependencies: + solid-styled: 0.11.1(solid-js@1.8.18) + unplugin-solid-styled: 0.11.1(rollup@2.79.1)(solid-styled@0.11.1(solid-js@1.8.18))(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2)) + vite: 5.3.2(lightningcss@1.25.1)(terser@5.31.2) + transitivePeerDependencies: + - rollup + + vite-plugin-solid@2.10.2(solid-js@1.8.18)(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2)): + dependencies: + '@babel/core': 7.24.7 + '@types/babel__core': 7.20.5 + babel-preset-solid: 1.8.18(@babel/core@7.24.7) + merge-anything: 5.1.7 + solid-js: 1.8.18 + solid-refresh: 0.6.3(solid-js@1.8.18) + vite: 5.3.2(lightningcss@1.25.1)(terser@5.31.2) + vitefu: 0.2.5(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2)) + transitivePeerDependencies: + - supports-color + + vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2): + dependencies: + esbuild: 0.21.5 + postcss: 8.4.39 + rollup: 4.18.0 + optionalDependencies: + fsevents: 2.3.3 + lightningcss: 1.25.1 + terser: 5.31.2 + + vitefu@0.2.5(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2)): + optionalDependencies: + vite: 5.3.2(lightningcss@1.25.1)(terser@5.31.2) + + webidl-conversions@4.0.2: {} + + webpack-sources@3.2.3: {} + + webpack-virtual-modules@0.6.2: {} + + whatwg-url@7.1.0: + dependencies: + lodash.sortby: 4.7.0 + tr46: 1.0.1 + webidl-conversions: 4.0.2 + + which-boxed-primitive@1.0.2: + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + + which-typed-array@1.1.15: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + + workbox-background-sync@7.1.0: + dependencies: + idb: 7.1.1 + workbox-core: 7.1.0 + + workbox-broadcast-update@7.1.0: + dependencies: + workbox-core: 7.1.0 + + workbox-build@7.1.1(@types/babel__core@7.20.5): + dependencies: + '@apideck/better-ajv-errors': 0.3.6(ajv@8.17.1) + '@babel/core': 7.24.7 + '@babel/preset-env': 7.24.8(@babel/core@7.24.7) + '@babel/runtime': 7.24.8 + '@rollup/plugin-babel': 5.3.1(@babel/core@7.24.7)(@types/babel__core@7.20.5)(rollup@2.79.1) + '@rollup/plugin-node-resolve': 15.2.3(rollup@2.79.1) + '@rollup/plugin-replace': 2.4.2(rollup@2.79.1) + '@rollup/plugin-terser': 0.4.4(rollup@2.79.1) + '@surma/rollup-plugin-off-main-thread': 2.2.3 + ajv: 8.17.1 + common-tags: 1.8.2 + fast-json-stable-stringify: 2.1.0 + fs-extra: 9.1.0 + glob: 7.2.3 + lodash: 4.17.21 + pretty-bytes: 5.6.0 + rollup: 2.79.1 + source-map: 0.8.0-beta.0 + stringify-object: 3.3.0 + strip-comments: 2.0.1 + tempy: 0.6.0 + upath: 1.2.0 + workbox-background-sync: 7.1.0 + workbox-broadcast-update: 7.1.0 + workbox-cacheable-response: 7.1.0 + workbox-core: 7.1.0 + workbox-expiration: 7.1.0 + workbox-google-analytics: 7.1.0 + workbox-navigation-preload: 7.1.0 + workbox-precaching: 7.1.0 + workbox-range-requests: 7.1.0 + workbox-recipes: 7.1.0 + workbox-routing: 7.1.0 + workbox-strategies: 7.1.0 + workbox-streams: 7.1.0 + workbox-sw: 7.1.0 + workbox-window: 7.1.0 + transitivePeerDependencies: + - '@types/babel__core' + - supports-color + + workbox-cacheable-response@7.1.0: + dependencies: + workbox-core: 7.1.0 + + workbox-core@7.1.0: {} + + workbox-expiration@7.1.0: + dependencies: + idb: 7.1.1 + workbox-core: 7.1.0 + + workbox-google-analytics@7.1.0: + dependencies: + workbox-background-sync: 7.1.0 + workbox-core: 7.1.0 + workbox-routing: 7.1.0 + workbox-strategies: 7.1.0 + + workbox-navigation-preload@7.1.0: + dependencies: + workbox-core: 7.1.0 + + workbox-precaching@7.1.0: + dependencies: + workbox-core: 7.1.0 + workbox-routing: 7.1.0 + workbox-strategies: 7.1.0 + + workbox-range-requests@7.1.0: + dependencies: + workbox-core: 7.1.0 + + workbox-recipes@7.1.0: + dependencies: + workbox-cacheable-response: 7.1.0 + workbox-core: 7.1.0 + workbox-expiration: 7.1.0 + workbox-precaching: 7.1.0 + workbox-routing: 7.1.0 + workbox-strategies: 7.1.0 + + workbox-routing@7.1.0: + dependencies: + workbox-core: 7.1.0 + + workbox-strategies@7.1.0: + dependencies: + workbox-core: 7.1.0 + + workbox-streams@7.1.0: + dependencies: + workbox-core: 7.1.0 + workbox-routing: 7.1.0 + + workbox-sw@7.1.0: {} + + workbox-window@7.1.0: + dependencies: + '@types/trusted-types': 2.0.7 + workbox-core: 7.1.0 + + wrappy@1.0.2: {} + + ws@8.17.1: {} + + yallist@3.1.1: {} diff --git a/src/App.css b/src/App.css new file mode 100644 index 0000000..c04a937 --- /dev/null +++ b/src/App.css @@ -0,0 +1,17 @@ +html, +body { + overflow: hidden; + height: 100vh; + height: 100dvh; +} + +#root { + overflow: hidden hidden; + height: 100vh; + height: 100dvh; + background-color: var(--tutu-color-surface, transparent); +} + +.custom-emoji { + width: 1.25em; +} \ No newline at end of file diff --git a/src/App.tsx b/src/App.tsx new file mode 100644 index 0000000..c5fa9fd --- /dev/null +++ b/src/App.tsx @@ -0,0 +1,32 @@ +import { Route, Router } from "@solidjs/router"; +import { ThemeProvider } from "@suid/material"; +import { Component, lazy } from "solid-js"; +import { useRootTheme } from "./material/mui.js"; +import "./App.css" + +const AccountSignIn = lazy(() => import("./accounts/SignIn.js")); +const AccountMastodonOAuth2Callback = lazy(() => import("./accounts/MastodonOAuth2Callback.js")) +const TimelineHome = lazy(() => import("./timelines/Home.js")) + +const Routing: Component = () => { + return ( + + + + + + + + ); +}; + +const App: Component = () => { + const theme = useRootTheme(); + return ( + + + + ); +}; + +export default App; diff --git a/src/accounts/MastodonOAuth2Callback.tsx b/src/accounts/MastodonOAuth2Callback.tsx new file mode 100644 index 0000000..2b34af9 --- /dev/null +++ b/src/accounts/MastodonOAuth2Callback.tsx @@ -0,0 +1,124 @@ +import { useNavigate, useSearchParams } from "@solidjs/router"; +import { + Component, + Show, + createSignal, + createUniqueId, + onMount, +} from "solid-js"; +import { acceptAccountViaAuthCode } from "./stores"; +import { $settings } from "../settings/stores"; +import { useDocumentTitle } from "../utils"; +import cards from "../material/cards.module.css"; +import { LinearProgress } from "@suid/material"; +import Img from "../material/Img"; +import { createRestAPIClient } from "masto"; +import { Title } from "../material/typography"; + +type OAuth2CallbackParams = { + code?: string; + error?: string; + error_description?: string; +}; + +const MastodonOAuth2Callback: Component = () => { + const progressId = createUniqueId(); + const titleId = createUniqueId(); + const [params] = useSearchParams(); + const navigate = useNavigate(); + const setDocumentTitle = useDocumentTitle("Back from Mastodon..."); + const [siteImg, setSiteImg] = createSignal<{ + src: string; + srcset?: string; + blurhash: string; + }>(); + const [siteTitle, setSiteTitle] = createSignal("the Mastodon server"); + + onMount(async () => { + const onGoingOAuth2Process = $settings.get().onGoingOAuth2Process; + if (!onGoingOAuth2Process) return; + const client = createRestAPIClient({ + url: onGoingOAuth2Process, + }); + const ins = await client.v2.instance.fetch(); + setDocumentTitle(`Back from ${ins.title}...`); + setSiteTitle(ins.title); + + const srcset = [] + if (ins.thumbnail.versions["@1x"]) { + srcset.push(`${ins.thumbnail.versions["@1x"]} 1x`) + } + if (ins.thumbnail.versions["@2x"]) { + srcset.push(`${ins.thumbnail.versions["@2x"]} 2x`) + } + + setSiteImg({ + src: ins.thumbnail.url, + blurhash: ins.thumbnail.blurhash, + srcset: srcset ? srcset.join(",") : undefined, + }); + }); + + onMount(async () => { + const onGoingOAuth2Process = $settings.get().onGoingOAuth2Process; + if (onGoingOAuth2Process && params.code) { + const acct = await acceptAccountViaAuthCode( + onGoingOAuth2Process, + params.code, + ); + $settings.setKey('onGoingOAuth2Process', undefined) + navigate('/', {replace: true}) + return; + } + + const error = + params.error || + (onGoingOAuth2Process ? "unknown" : "oauth2_unknown_target"); + const errorDescription = + params.error_description || + (error === "unknown" + ? "Remote server sends nothing" + : error === "oauth2_unknown_target" + ? "Unknown OAuth2 target. This is an internal error. Please contract the application maintainer." + : undefined); + const urlParams = new URLSearchParams({ + error, + }); + if (errorDescription) { + urlParams.set("errorDescription", errorDescription); + } + navigate("/accounts/sign-in?" + urlParams.toString(), { + replace: true, + }); + }); + return ( +
+
+ + }> + {`Banner + + + + Contracting {siteTitle}... + +

+ If this page stays too long, you can close this page and sign in again. +

+
+
+ ); +}; + +export default MastodonOAuth2Callback; diff --git a/src/accounts/SignIn.tsx b/src/accounts/SignIn.tsx new file mode 100644 index 0000000..0d0cf94 --- /dev/null +++ b/src/accounts/SignIn.tsx @@ -0,0 +1,173 @@ +import { + Component, + Show, + createEffect, + createSelector, + createSignal, + createUniqueId, + onMount, +} from "solid-js"; +import cards from "../material/cards.module.css"; +import TextField from "../material/TextField.js"; +import Button from "../material/Button.js"; +import { useDocumentTitle } from "../utils"; +import { Title } from "../material/typography"; +import { css } from "solid-styled"; +import { LinearProgress } from "@suid/material"; +import { createRestAPIClient } from "masto"; +import { getOrRegisterApp } from "./stores"; +import { useSearchParams } from "@solidjs/router"; +import { $settings } from "../settings/stores"; + +type ErrorParams = { + error: string; + errorDescription: string; +}; + +const SignIn: Component = () => { + const progressId = createUniqueId(); + const [params] = useSearchParams(); + const [rawServerUrl, setRawServerUrl] = createSignal(""); + const [currentState, setCurrentState] = createSignal< + "inactive" | "contracting" | "navigating" + >("inactive"); + const [serverUrlHelperText, setServerUrlHelperText] = createSignal(""); + const [serverUrlError, setServerUrlError] = createSignal(false); + const [targetSiteTitle, setTargetSiteTitle] = createSignal(""); + + useDocumentTitle("Sign In"); + css` + form { + display: flex; + flex-flow: column; + gap: 16px; + } + `; + + const serverUrl = () => { + const url = rawServerUrl(); + if (url.length === 0 || /^%w:/.test(url)) { + return url; + } else { + return `https://${url}`; + } + }; + + createEffect(() => { + const url = serverUrl(); + setServerUrlError(false); + if (url.length === 0) { + return; + } + try { + new URL(url); + } catch { + setServerUrlHelperText("Domain is required."); + return; + } + setServerUrlHelperText(""); + }); + + onMount(() => { + $settings.setKey('onGoingOAuth2Process', undefined) + }) + + const onStartOAuth2 = async (e: Event) => { + e.preventDefault(); + setCurrentState("contracting"); + const url = serverUrl(); + try { + setServerUrlError(!!serverUrlHelperText()); + + const client = createRestAPIClient({ + url, + }); + const ins = await client.v2.instance.fetch(); + setTargetSiteTitle(ins.title); + + const redirectURL = new URL( + "./oauth2/mastodon", + window.location.href, + ).toString(); + + const app = await getOrRegisterApp(url, redirectURL); + if (app === null) { + alert("The mastodon server could not be used with tutu."); + return; + } + + const authStart = new URL("./oauth/authorize", url); + const searches = authStart.searchParams; + const args = { + response_type: "code", + client_id: app.clientId, + redirect_uri: redirectURL, + scope: "read write push", + }; + for (const [k, v] of Object.entries(args)) { + searches.set(k, v); + } + $settings.setKey("onGoingOAuth2Process", url) + window.location.href = authStart.toString(); + } catch (e) { + setServerUrlHelperText( + `Could not contract with the server: "${String(e)}". Please check and try again.`, + ); + setServerUrlError(true); + console.error(`Failed to contract ${url}.`, e); + } finally { + setCurrentState("inactive"); + } + }; + + return ( +
+ +
+

Authorization is failed.

+

{params.errorDescription}

+

+ Please try again later. If the problem persist, you can seek for + help from the server administrator. +

+
+
+
+ +
+ Sign in with Your Mastodon Account + + +
+ +
+ +
+
+ ); +}; + +export default SignIn; diff --git a/src/accounts/stores.ts b/src/accounts/stores.ts new file mode 100644 index 0000000..a990fc7 --- /dev/null +++ b/src/accounts/stores.ts @@ -0,0 +1,174 @@ +import { persistentAtom } from "@nanostores/persistent"; +import { createOAuthAPIClient, createRestAPIClient } from "masto"; +import { action } from "nanostores"; + +export type Account = { + site: string; + accessToken: string; + + tokenType: string; + scope: string; + createdAt: number; +}; + +export const $accounts = persistentAtom("accounts", [], { + encode: JSON.stringify, + decode: JSON.parse, +}); + +interface OAuth2AccessToken { + access_token: string; + token_type: string; + scope: string; + created_at: number; +} + +async function oauth2TokenViaAuthCode(app: RegisteredApp, authCode: string) { + const resp = await fetch(new URL("./oauth/token", app.site), { + method: 'post', + body: JSON.stringify({ + grant_type: "authorization_code", + code: authCode, + client_id: app.clientId, + client_secret: app.clientSecret, + redirect_uri: app.redirectUrl, + scope: "read write push", + }), + headers: { + "Content-Type": "application/json", + }, + }); + + switch (resp.status) { + case 200: + return (await resp.json()) as OAuth2AccessToken; + default: { + const dict = await resp.json(); + const explain = dict.error_desciption ?? "Unknown OAuth2 Error"; + throw new TypeError(explain); + } + } +} + +export const acceptAccountViaAuthCode = action( + $accounts, + "acceptAccount", + async ($store, site: string, authCode: string) => { + const app = $registeredApps.get()[site]; + if (!app) { + throw TypeError("application not found"); + } + const token = await oauth2TokenViaAuthCode(app, authCode); + + const acct = { + site: app.site, + accessToken: token.access_token, + tokenType: token.token_type, + scope: token.scope, + createdAt: token.created_at * 1000, + }; + + const all = [...$store.get(), acct]; + $store.set(all); + + return acct; + }, +); + +export type RegisteredApp = { + site: string; + clientId: string; + clientSecret: string; + vapidKey?: string; + redirectUrl: string; + scope: string; +}; + +export const $registeredApps = persistentAtom<{ + [site: string]: RegisteredApp; +}>( + "registeredApps", + {}, + { + encode: JSON.stringify, + decode: JSON.parse, + }, +); + +async function getAppAccessToken(app: RegisteredApp) { + const resp = await fetch(new URL("./oauth/token", app.site), { + method: 'post', + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + client_id: app.clientId, + client_secret: app.clientSecret, + redirect_uri: app.redirectUrl, + grant_type: "client_credentials", + }), + }); + const dict = await resp.json(); + return dict.access_token; +} + +export const getOrRegisterApp = action( + $registeredApps, + "getOrRegisterApp", + async ($store, site: string, redirectUrl: string) => { + const all = $store.get(); + const savedApp = all[site]; + if (savedApp && savedApp.redirectUrl === redirectUrl) { + const appAccessToken = await getAppAccessToken(savedApp); + if (appAccessToken) { + const client = createRestAPIClient({ + url: site, + accessToken: appAccessToken, + }); + try { + const verify = await client.v1.apps.verifyCredentials(); + Object.assign(savedApp, { + vapidKey: verify.vapidKey, + }); + const oauthClient = createOAuthAPIClient({ + url: site, + accessToken: appAccessToken, + }); + try { + await oauthClient.revoke({ + clientId: savedApp.clientId, + clientSecret: savedApp.clientSecret, + token: appAccessToken, + }); + } catch {} + return savedApp; + } finally { + $store.set(all); + } + } + } + + const client = createRestAPIClient({ + url: site, + }); + const app = await client.v1.apps.create({ + clientName: "TuTu", + website: "https://github.com/thislight/tutu", + redirectUris: redirectUrl, + scopes: "read write push", + }); + if (!app.clientId || !app.clientSecret) { + return null; + } + all[site] = { + site, + clientId: app.clientId, + clientSecret: app.clientSecret, + vapidKey: app.vapidKey ?? undefined, + redirectUrl: redirectUrl, + scope: "read write push", + }; + $store.set(all); + return all[site]; + }, +); diff --git a/src/index.tsx b/src/index.tsx new file mode 100644 index 0000000..9430fe8 --- /dev/null +++ b/src/index.tsx @@ -0,0 +1,5 @@ +import {render} from 'solid-js/web' +import App from './App.js' +import "./material/theme.css" + +render(() => , document.getElementById("root")!) diff --git a/src/masto/acct.ts b/src/masto/acct.ts new file mode 100644 index 0000000..51c8ea2 --- /dev/null +++ b/src/masto/acct.ts @@ -0,0 +1,12 @@ +import { Accessor, createResource } from "solid-js"; +import { Account } from "../accounts/stores"; +import { useMastoClientFor } from "./clients"; + +export function useAcctProfile(account: Accessor) { + const client = useMastoClientFor(account) + return createResource(client, (client) => { + return client.v1.accounts.verifyCredentials() + }, { + name: "MastodonAccountProfile" + }) +} diff --git a/src/masto/clients.ts b/src/masto/clients.ts new file mode 100644 index 0000000..3ff1be6 --- /dev/null +++ b/src/masto/clients.ts @@ -0,0 +1,41 @@ +import { Accessor, createMemo, createResource } from "solid-js"; +import { Account } from "../accounts/stores"; +import { createRestAPIClient, mastodon } from "masto"; + +const restfulCache: Record = {} + +export function createMastoClientFor(account: Account) { + const cacheKey = [account.site, account.accessToken].join('') + const cache = restfulCache[cacheKey] + if (cache) return cache; + + const client = createRestAPIClient({ + url: account.site, + accessToken: account.accessToken, + }) + restfulCache[cacheKey] = client + + return client +} + +export function useMastoClientFor(account: Accessor) { + return createMemo(() => createMastoClientFor(account())) +} + +export function createUnauthorizedClient(site: string) { + const cache = restfulCache[site] + if (cache) return cache; + + const client = createRestAPIClient({ + url: site + }) + restfulCache[site] = client + + return client +} + +export function useInstance(client: Accessor) { + return createResource(client, async (client) => { + return await client.v2.instance.fetch() + }) +} diff --git a/src/masto/timelines.ts b/src/masto/timelines.ts new file mode 100644 index 0000000..a2e7b21 --- /dev/null +++ b/src/masto/timelines.ts @@ -0,0 +1,75 @@ +import { type mastodon } from "masto"; +import { Accessor, createResource, createSignal } from "solid-js"; + +type TimelineFetchTips = { + direction?: "new" | "old"; +}; + +type Timeline = { + list(params: { + maxId?: string; + minId?: string; + }): mastodon.Paginator; +}; + +export function useTimeline( + timeline: Accessor, +) { + let minId: string | undefined; + let maxId: string | undefined; + let otl: Timeline | undefined; + const idSet = new Set(); + return createResource< + mastodon.v1.Status[], + [Timeline], + TimelineFetchTips | undefined + >( + () => [timeline()] as const, + async ([tl], info) => { + if (otl !== tl) { + minId = undefined; + maxId = undefined; + idSet.clear(); + info.value = []; + otl = tl; + } + const direction = + typeof info.refetching !== "boolean" + ? info.refetching?.direction + : "old"; + const pager = await tl.list( + direction === "old" + ? { + maxId: minId, + } + : { + minId: maxId, + }, + ); + const old = info.value || []; + const diff = pager.filter((x) => !idSet.has(x.id)); + for (const v of diff.map((x) => x.id)) { + idSet.add(v); + } + if (direction === "old") { + minId = pager[pager.length - 1]?.id; + if (!maxId && pager.length > 0) { + maxId = pager[0].id; + } + return [...old, ...diff]; + } else { + maxId = pager.length > 0 ? pager[0].id : undefined; + if (!minId && pager.length > 0) { + minId = pager[pager.length - 1]?.id; + } + return [...diff, ...old]; + } + }, + { + initialValue: [], + storage(init) { + return createSignal(init, { equals: false }); + }, + }, + ); +} diff --git a/src/masto/toot.ts b/src/masto/toot.ts new file mode 100644 index 0000000..85fd817 --- /dev/null +++ b/src/masto/toot.ts @@ -0,0 +1,35 @@ +import type { mastodon } from "masto"; +import { createRenderEffect, createResource, type Accessor } from "solid-js"; + +const CUSTOM_EMOJI_REGEX = /:(\S+):/g; + +/** + * Resolve the custom emojis in string to HTML. + */ +export function resolveCustomEmoji( + content: string, + emojis: mastodon.v1.CustomEmoji[], +) { + return content.replace(CUSTOM_EMOJI_REGEX, (original, shortcode: string) => { + const emoji = emojis.find((x) => x.shortcode === shortcode); + if (!emoji) { + return original; + } + return `${shortcode}`; + }); +} + +export function appliedCustomEmoji( + target: { innerHTML: string }, + content: string, + emojis?: mastodon.v1.CustomEmoji[], +) { + createRenderEffect(() => { + const result = emojis ? resolveCustomEmoji(content, emojis) : content; + target.innerHTML = result; + }); +} + +export function hasCustomEmoji(s: string) { + return CUSTOM_EMOJI_REGEX.test(s); +} diff --git a/src/material/Button.tsx b/src/material/Button.tsx new file mode 100644 index 0000000..7b0051d --- /dev/null +++ b/src/material/Button.tsx @@ -0,0 +1,21 @@ +import { Component, JSX, splitProps } from "solid-js"; +import materialStyles from "./material.module.css"; + +/** + * Material-styled button. + * + * @param type Same as `; +}; + +export default Button; diff --git a/src/material/Img.tsx b/src/material/Img.tsx new file mode 100644 index 0000000..f85b6d3 --- /dev/null +++ b/src/material/Img.tsx @@ -0,0 +1,121 @@ +import { + JSX, + splitProps, + Component, + createSignal, + createEffect, + onMount, + createRenderEffect, + Show, +} from "solid-js"; +import { css } from "solid-styled"; +import { decode } from "blurhash"; +import { mergeClass } from "../utils"; + +type ImgProps = { + blurhash?: string; + keepBlur?: boolean; +} & JSX.HTMLElementTags["img"]; + +const Img: Component = (props) => { + let canvas: HTMLCanvasElement; + let imgE: HTMLImageElement; + const [managed, passthough] = splitProps(props, [ + "blurhash", + "keepBlur", + "class", + "style", + ]); + const [isImgLoaded, setIsImgLoaded] = createSignal(false); + const [imgSize, setImgSize] = createSignal<{ + width: number; + height: number; + }>(); + + const isBlurEnabled = () => managed.keepBlur || !isImgLoaded(); + + css` + :where(.img-root) { + display: inline-block; + position: relative; + + > img:first-of-type { + object-fit: contain; + object-position: center; + width: 100%; + height: 100%; + visibility: ${isBlurEnabled() ? "hidden" : "visible"}; + } + } + + :where(.cover) { + display: ${isBlurEnabled() ? "block" : "none"}; + position: absolute; + left: 0; + top: 0; + height: ${`${imgSize()?.height ?? 0}px`}; + width: ${`${imgSize()?.width ?? 0}px`}; + } + `; + + const onImgLoaded = () => { + setIsImgLoaded(true); + setImgSize({ + width: imgE.width, + height: imgE.height, + }); + }; + + const onMetadataLoaded = () => { + setImgSize({ + width: imgE.width, + height: imgE.height, + }); + }; + + onMount(() => { + setImgSize((x) => { + const parent = imgE.parentElement; + if (!parent) return x; + return x + ? x + : { + width: parent.clientWidth, + height: parent.clientHeight, + }; + }); + }); + + return ( +
+ + { + createRenderEffect(() => { + if (!managed.blurhash) return; + const ctx = canvas.getContext("2d"); + if (!ctx) return; + const size = imgSize(); + if (!size) return; + const imgd = ctx?.createImageData(size.width, size.height); + const pixels = decode(managed.blurhash, size.width, size.height); + imgd.data.set(pixels); + ctx.putImageData(imgd, 0, 0); + }); + }} + class="cover" + role="presentation" + /> + + + +
+ ); +}; + +export default Img; diff --git a/src/material/Scaffold.tsx b/src/material/Scaffold.tsx new file mode 100644 index 0000000..d7a1344 --- /dev/null +++ b/src/material/Scaffold.tsx @@ -0,0 +1,58 @@ +import { createElementSize } from "@solid-primitives/resize-observer"; +import { + Show, + createRenderEffect, + createSignal, + onCleanup, + type JSX, + type ParentComponent, +} from "solid-js"; +import { css } from "solid-styled"; + +interface ScaffoldProps { + topbar?: JSX.Element; + fab?: JSX.Element; +} + +const Scaffold: ParentComponent = (props) => { + const [topbarElement, setTopbarElement] = createSignal(); + + const topbarSize = createElementSize(topbarElement); + + css` + .scaffold-content { + --scaffold-topbar-height: ${(topbarSize.height?.toString() ?? 0) + "px"}; + + height: 100%; + width: 100%; + } + + .topbar { + position: sticky; + top: 0px; + z-index: var(--tutu-zidx-nav, auto); + } + + .fab-dock { + position: fixed; + bottom: 40px; + right: 40px; + z-index: var(--tutu-zidx-nav, auto); + } + `; + return ( + <> + +
+ {props.topbar} +
+
+ +
{props.fab}
+
+
{props.children}
+ + ); +}; + +export default Scaffold; diff --git a/src/material/Tab.tsx b/src/material/Tab.tsx new file mode 100644 index 0000000..2145b89 --- /dev/null +++ b/src/material/Tab.tsx @@ -0,0 +1,80 @@ +import { + Component, + createEffect, + splitProps, + type JSX, + type ParentComponent, +} from "solid-js"; +import { css } from "solid-styled"; +import { useTabListContext } from "./Tabs"; + +const Tab: ParentComponent< + { + focus?: boolean; + large?: boolean; + } & JSX.ButtonHTMLAttributes +> = (props) => { + const [managed, rest] = splitProps(props, [ + "focus", + "large", + "type", + "role", + "ref", + ]); + let self: HTMLButtonElement; + const { + focusOn: [, setFocusOn], + } = useTabListContext(); + + createEffect((lastStatus) => { + if (managed.focus && !lastStatus) { + setFocusOn((x) => [...x, self]); + } + if (!managed.focus && lastStatus) { + setFocusOn((x) => x.filter((e) => e !== self)); + } + return managed.focus; + }); + css` + .tab { + cursor: pointer; + background: none; + border: none; + min-width: ${managed.large ? "160px" : "72px"}; + height: 48px; + max-width: min(calc(100% - 56px), 264px); + padding: 10px 24px; + font-size: 0.8135rem; + font-weight: 600; + text-transform: uppercase; + transition: color 120ms var(--tutu-anim-curve-std); + } + + :global(.MuiToolbar-root) .tab { + color: rgba(255, 255, 255, 0.7); + + &:hover, + &:focus, + &.focus, + &:global(.tablist-focus) { + color: white; + } + } + `; + return ( + + ); +}; + +export default Tab; diff --git a/src/material/Tabs.tsx b/src/material/Tabs.tsx new file mode 100644 index 0000000..3630062 --- /dev/null +++ b/src/material/Tabs.tsx @@ -0,0 +1,165 @@ +import { + ParentComponent, + createContext, + createEffect, + createMemo, + createRenderEffect, + createSignal, + useContext, + type Signal, +} from "solid-js"; +import { css } from "solid-styled"; + +const TabListContext = /* @__PURE__ */ createContext<{ + focusOn: Signal; +}>(); + +export function useTabListContext() { + const result = useContext(TabListContext); + if (!result) { + throw new TypeError("tab list context is not found"); + } + return result; +} + +const ANIM_SPEED = 160 / 110; // 160px/110ms + +const TABLIST_FOCUS_CLASS = "tablist-focus"; + +const Tabs: ParentComponent<{ + offset?: number; + onFocusChanged?: (element: HTMLElement[]) => void; +}> = (props) => { + let self: HTMLDivElement; + const [focusOn, setFocusOn] = createSignal([]); + + createRenderEffect((lastFocusElement) => { + const current = focusOn(); + if (lastFocusElement) { + for (const e of lastFocusElement) { + e.classList.remove(TABLIST_FOCUS_CLASS); + } + } + for (const e of current) { + e.classList.add("tablist-focus"); + } + return current; + }); + + createRenderEffect(() => { + const callback = props.onFocusChanged; + if (!callback) return; + callback(focusOn()); + }); + + let lastLeft = 0; + let lastWidth = 0; + + const getNearestDistance = ( + srcRect: { x: number; width: number }, + prevEl: Element | null, + nextEl: Element | null, + offset?: number, + ) => { + if (!offset || offset === 0) return [0, 0] as const; + if (offset > 0) { + if (!nextEl) return [0, 0] as const; + const rect = nextEl.getBoundingClientRect(); + return [ + (rect.x - srcRect.x) * offset, + (rect.width - srcRect.width) * offset, + ] as const; + } else { + if (!prevEl) return [0, 0] as const; + const rect = prevEl.getBoundingClientRect(); + return [ + (rect.x - srcRect.x) * offset, + (srcRect.width - rect.width) * offset, + ] as const; + } + }; + + const focusBoundingClientRect = () => { + return focusOn() + .map((x) => x.getBoundingClientRect()) + .reduce( + (p, c) => { + return { + x: Math.min(p.x, c.x), + width: p.width + c.width, + }; + }, + { x: +Infinity, width: 0 }, + ); + }; + + const focusSiblings = () => { + const rects = focusOn().map((x) => [x, x.getBoundingClientRect()] as const); + if (rects.length === 0) return [null, null] as const; + rects.sort(([, rect1], [, rect2]) => rect1.x - rect2.x); + return [ + rects[0][0].previousElementSibling, + rects[rects.length - 1][0].nextElementSibling, + ] as const; + }; + + const indicator = () => { + const el = focusOn(); + if (!el) { + return ["0px", "0px", "110ms", "110ms"] as const; + } + const rect = focusBoundingClientRect(); + const rootRect = self.getBoundingClientRect(); + const left = rect.x - rootRect.x; + const width = rect.width; + const [prevEl, nextEl] = focusSiblings(); + const [offset, widthChange] = getNearestDistance( + rect, + prevEl, + nextEl, + props.offset, + ); + const result = [ + `${left + offset}px`, + `${width + widthChange}px`, + `${Math.max(Math.floor(Math.abs(left + offset - lastLeft)), 160) * ANIM_SPEED}ms`, + `${Math.max(Math.floor(Math.abs(width - lastWidth)), 160) * ANIM_SPEED}ms`, + ] as const; + lastLeft = left; + lastWidth = width; + return result; + }; + + css` + .tablist { + width: 100%; + position: relative; + white-space: nowrap; + overflow-x: auto; + + &::after { + transition: + left ${indicator()[2]} var(--tutu-anim-curve-std), + width ${indicator()[3]} var(--tutu-anim-curve-std); + position: absolute; + content: ""; + display: block; + background-color: white; + height: 2px; + width: ${indicator()[1]}; + left: ${indicator()[0]}; + bottom: 0; + } + } + `; + + return ( + +
+ {props.children} +
+
+ ); +}; + +export default Tabs; diff --git a/src/material/TextField.tsx b/src/material/TextField.tsx new file mode 100644 index 0000000..df0f7fc --- /dev/null +++ b/src/material/TextField.tsx @@ -0,0 +1,80 @@ +import { + Component, + createEffect, + createSignal, + createUniqueId, + onMount, + Show, +} from "solid-js"; +import formStyles from "./form.module.css"; + +export type TextFieldProps = { + label?: string; + helperText?: string; + type?: "text" | "password"; + onChange?: (value: string) => void; + onInput?: (value: string) => void; + inputId?: string; + error?: boolean; + required?: boolean; + name?: string; +}; + +const TextField: Component = (props) => { + let input: HTMLInputElement; + let field: HTMLDivElement; + const [hasContent, setHasContent] = createSignal(false); + const altInputId = createUniqueId(); + + createEffect(() => { + if (hasContent()) { + field.classList.add("float-label"); + } else { + field.classList.remove("float-label"); + } + }); + + onMount(() => { + setHasContent(input.value.length > 0); + }); + + const onInputChange = (e: { currentTarget: HTMLInputElement }) => { + const value = (e.currentTarget as HTMLInputElement).value; + setHasContent(value.length > 0); + props.onInput?.(value); + }; + + const inputId = () => props.inputId ?? altInputId; + + const fieldClass = () => { + const cls = [formStyles.textfield]; + if (typeof props.helperText !== "undefined") { + cls.push(formStyles.withHelperText); + } + if (props.error) { + cls.push(formStyles.error); + } + return cls.join(" "); + }; + + return ( +
+ + props.onChange?.(e.currentTarget.value)} + placeholder="" + required={props.required} + name={props.name} + /> + + {props.helperText} + +
+ ); +}; + +export default TextField; diff --git a/src/material/cards.module.css b/src/material/cards.module.css new file mode 100644 index 0000000..b5966e3 --- /dev/null +++ b/src/material/cards.module.css @@ -0,0 +1,55 @@ +.card { + composes: surface from 'material.module.css'; + border-radius: 2px; + box-shadow: var(--tutu-shadow-e2); + transition: var(--tutu-transition-shadow); + overflow: hidden; + background-color: var(--tutu-color-surface-l); + + &:focus-within, + &:focus-visible { + box-shadow: var(--tutu-shadow-e8); + } + + &:not(.manualMargin) { + &>:not(.cardNoPad) { + margin-inline: var(--card-pad, 20px); + } + + > :not(.cardGutSkip):first-child { + margin-top: var(--card-gut, 20px); + } + + >.cardGutSkip+*:not(.cardGutSkip) { + margin-top: var(--card-gut, 20px); + } + + > :not(.cardGutSkip):last-child { + margin-bottom: var(--card-gut, 20px); + } + } + +} + +.layoutCentered { + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + width: 448px; + + @media (max-width: 600px) { + & { + position: static; + height: 100%; + width: 100%; + left: 0; + right: 0; + transform: none; + display: grid; + grid-template-rows: 1fr auto; + height: 100vh; + overflow: auto; + } + } +} \ No newline at end of file diff --git a/src/material/form.module.css b/src/material/form.module.css new file mode 100644 index 0000000..5e7dfb7 --- /dev/null +++ b/src/material/form.module.css @@ -0,0 +1,80 @@ +.textfield { + composes: touchTarget from 'material.module.css'; + + --border-color: var(--tutu-color-inactive-on-surface); + --active-border-color: var(--tutu-color-primary); + --label-color: var(--tutu-color-inactive-on-surface); + --active-label-color: var(--tutu-color-primary); + --helper-text-color: var(--tutu-color-inactive-on-surface); + + &>* { + width: 100%; + } + + &.error, &:has(>input[aria-invalid="true"]) { + &:not(:focus-within) { + --border-color: var(--tutu-color-error-on-surface); + --label-color: var(--tutu-color-error-on-surface); + --helper-text-color: var(--tutu-color-error-on-surface); + } + + &:focus-within { + --helper-text-color: var(--tutu-color-error-on-surface); + } + } + + + position: relative; + + &>label { + position: absolute; + left: 0; + bottom: calc(10px + var(--bottom-height, 0px)); + color: var(--label-color); + transition: bottom .2s ease-in-out, font-size .2s ease-in-out, color .2s ease-in-out; + cursor: text; + font-size: 0.8125rem; + } + + &>label:has(+ input:not(:placeholder-shown)) { + bottom: calc(100% - 0.8125rem); + } + + &:focus-within>label, &.float-label>label { + bottom: calc(100% - 0.8125rem); + color: var(--active-label-color); + } + + &>input[type='text'], + &>input[type='password'] { + border: none; + outline: none; + border-bottom: 1px solid var(--border-color); + background-color: transparent; + padding-top: 16px; + padding-bottom: 8px; + margin-bottom: 1px; + transition: border-color .2s ease-in-out; + + &:focus { + border-bottom: 2px solid var(--active-border-color); + margin-bottom: 0; + } + } + + &.withHelperText { + --bottom-height: 0.8125rem; + } + + & .helperText { + color: var(--helper-text-color); + font-size: 0.8125rem; + line-height: 100%; + -webkit-line-clamp: 1; + line-clamp: 1; + display: flex; + justify-content: space-between; + min-height: 0.8125rem; + cursor: auto; + } +} \ No newline at end of file diff --git a/src/material/material.module.css b/src/material/material.module.css new file mode 100644 index 0000000..d51a179 --- /dev/null +++ b/src/material/material.module.css @@ -0,0 +1,65 @@ +.surface { + background-color: var(--tutu-color-surface); + color: var(--tutu-color-on-surface); +} + +.touchTarget { + min-width: 44px; + min-height: 44px; + cursor: pointer; +} + +.button { + composes: buttonText from './typography.module.css'; + composes: touchTarget; + + border: none; + background-color: transparent; + color: var(--tutu-color-primary); + font-family: inherit; + + &:focus,&:hover,&:focus-visible { + background-color: var(--tutu-color-surface-dd); + } + + &.pressed { + background-color: var(--tutu-color-surface-d); + } + + &.raised { + background-color: var(--tutu-color-primary); + color: var(--tutu-color-on-primary); + } + + &:disabled, &[aria-disabled]:not([aria-disabled="false"]) { + color: #9e9e9e; + + &:focus,&:hover,&:focus-visible { + background-color: transparent; + } + } + + .toolbar &, .appbar & { + height: 100%; + margin-block: 0; + padding-block: 0; + border-radius: 0; + } + + .appbar & { + color: var(--tutu-color-on-primary); + + &:focus,&:hover,&:focus-visible { + background-color: var(--tutu-color-primary-ll); + } + + &.pressed { + background-color: var(--tutu-color-primary-l); + } + } + + .toolbar & { + color: var(--tutu-color-on-surface); + } +} + diff --git a/src/material/mui.ts b/src/material/mui.ts new file mode 100644 index 0000000..15511ac --- /dev/null +++ b/src/material/mui.ts @@ -0,0 +1,16 @@ +import { Theme, createTheme } from "@suid/material/styles"; +import { deepPurple, amber } from "@suid/material/colors"; +import { Accessor } from "solid-js"; + +export function useRootTheme() : Accessor { + return () => createTheme({ + palette: { + primary: { + main: deepPurple[500] + }, + secondary: { + main: amber.A200 + } + } + }) +} diff --git a/src/material/theme.css b/src/material/theme.css new file mode 100644 index 0000000..5d26879 --- /dev/null +++ b/src/material/theme.css @@ -0,0 +1,135 @@ +:root, +[lang^="en"], [lang="en"] { + --md-typography-type: "regular"; + --title-size: 1.25rem; + --title-weight: 500; + --subheading-size: 1.125rem; + --body-size: 1rem; + --body2-weight: 500; + --caption-size: 0.875rem; + --button-size: 1rem; + --button-weight: 500; + --button-text-transform: uppercase; + + @media (min-width: 1024px) { + & { + --subheading-size: 1.0625rem; + --body-size: 0.9375rem; + } + } +} + +[lang^="zh"], [lang="zh"], +[lang^="kr"], [lang="kr"], +[lang^="ja"], [lang="ja"] { + --md-typography-type: "dense"; + --title-size: 1.4375rem; + --subheading-size: 1.1875rem; + --body-size: 1.0625rem; + --caption-size: 0.9375rem; + --button-size: 1.0625rem; + --button-text-transform: none; + + @media (min-width: 1024px) { + & { + --subheading-size: 1.125rem; + --body-size: 1rem; + } + } +} + +:root { + --tutu-color-primary: #673ab7; + /* Deep Purple 500 */ + --tutu-color-on-primary: white; + --tutu-color-primary-d: #512da8; + /* 700 */ + --tutu-color-on-primary-d: white; + --tutu-color-primary-dd: #4527a0; + /* 800 */ + --tutu-color-on-primary-dd: white; + --tutu-color-primary-l: #9575cd; + /* 200 */ + --tutu-color-on-primary-l: white; + --tutu-color-primary-ll: #b39ddb; + /* 100 */ + --tutu-color-on-primary-ll: black; + + --tutu-color-secondary: #ffd740; + /* Amber A200 */ + --tutu-color-on-secondary: black; + + --tutu-color-surface-l: white; + --tutu-color-surface: #fafafa; + --tutu-color-surface-d: #99999928; + --tutu-color-surface-dd: #99999920; + --tutu-color-on-surface: black; + --tutu-color-secondary-text-on-surface: rgba(0, 0, 0, 0.5); + --tutu-color-error-on-surface: #d32f2f; + --tutu-color-inactive-on-surface: #757575; + + --tutu-shadow-e1: 0px 1px 2px 0px #9e9e9e; + /* Switch */ + --tutu-shadow-e2: 0px 2px 4px 0px #9e9e9e; + /* (Resting) cards, raised button, quick entry / search bar */ + --tutu-shadow-e3: 0px 3px 6px 0px #9e9e9e; + /* Refresh indicator, quick entry / search bar (scrolled) */ + --tutu-shadow-e4: 0px 4px 8px 0px #9e9e9e; + /* App bar */ + --tutu-shadow-e6: 0px 6px 12px 0px #9e9e9e; + /* Snack bar, FAB (resting) */ + --tutu-shadow-e8: 0px 8px 16px 0px #9e9e9e; + /* Menu, (picked-up) cards, (pressed) raise button */ + --tutu-shadow-e9: 0px 9px 18px 0px #9e9e9e; + /* Submenu (+1dp for each submenu) */ + --tutu-shadow-e12: 0px 12px 24px 0px #9e9e9e; + /* (pressed) FAB */ + --tutu-shadow-e16: 0px 16px 32px 0px #9e9e9e; + /* Nav drawer, right drawer, modal bottom sheet */ + --tutu-shadow-e24: 0px 24px 48px 0px #9e9e9e; + /* Dialog, picker */ + + --tutu-anim-curve-std: cubic-bezier(0.4, 0, 0.2, 1); + --tutu-anim-curve-deceleration: cubic-bezier(0, 0, 0.2, 1); + --tutu-anim-curve-aceleration: cubic-bezier(0.4, 0, 1, 1); + --tutu-anim-curve-sharp: cubic-bezier(0.4, 0, 0.6, 1); + + @media (max-width: 300px) { + + /* XS screen, like wearables */ + & { + --tutu-transition-shadow: box-shadow 157.5ms var(--tutu-anim-curve-std); + } + } + + @media (max-width: 600px) { + + /* Mobile */ + & { + --tutu-transition-shadow: box-shadow 225ms var(--tutu-anim-curve-std); + } + } + + @media (max-width: 1200px) { + + /* Tablet */ + & { + --tutu-transition-shadow: box-shadow 292.5ms var(--tutu-anim-curve-std); + } + } + + /* Desktop */ + --tutu-transition-shadow: box-shadow 175ms var(--tutu-anim-curve-std); + + --tutu-zidx-nav: 1100; +} + +* { + font-family: Roboto, "Noto Sans", system-ui, -apple-system, BlinkMacSystemFont, sans-serif; + box-sizing: border-box; + margin: 0; +} + +body { + font-size: var(--body-size, 1rem); +} \ No newline at end of file diff --git a/src/material/toolbar.module.css b/src/material/toolbar.module.css new file mode 100644 index 0000000..e69de29 diff --git a/src/material/typography.module.css b/src/material/typography.module.css new file mode 100644 index 0000000..2c079da --- /dev/null +++ b/src/material/typography.module.css @@ -0,0 +1,48 @@ +.display4 { + font-size: 7rem; + font-weight: 300; +} + +.display3 { + font-size: 3.5rem; +} + +.display2 { + font-size: 2.8125rem; +} + +.display1 { + font-size: 2.125rem; +} + +.headline { + font-size: 1.5rem; +} + +.title { + font-size: var(--title-size); + font-weight: var(--title-weight); +} + +.subheading { + font-size: var(--subheading-size); +} + +.body1 { + font-size: var(--body-size); +} + +.body2 { + composes: body1; + font-weight: var(--body2-weight); +} + +.caption { + font-size: var(--caption-size); +} + +.buttonText { + font-weight: var(--button-weight); + font-size: var(--button-size); + text-transform: var(--button-text-transform); +} diff --git a/src/material/typography.tsx b/src/material/typography.tsx new file mode 100644 index 0000000..2121266 --- /dev/null +++ b/src/material/typography.tsx @@ -0,0 +1,87 @@ +import { JSX, ParentComponent, splitProps, type Ref } from "solid-js"; +import { Dynamic } from "solid-js/web"; +import typography from "./typography.module.css"; +import { mergeClass } from "../utils"; + +type AnyElement = keyof JSX.IntrinsicElements | ParentComponent + +type PropsOf = + E extends ParentComponent + ? Props + : E extends keyof JSX.IntrinsicElements + ? JSX.IntrinsicElements[E] + : JSX.HTMLAttributes; + +export type TypographyProps< + E extends AnyElement, +> = { + ref?: Ref; + component?: E; + class?: string; +} & PropsOf; + +type TypographyKind = + | "display4" + | "display3" + | "display2" + | "display1" + | "headline" + | "title" + | "subheading" + | "body1" + | "body2" + | "caption" + | "buttonText"; + +export function Typography(props: {typography: TypographyKind } & TypographyProps) { + const [managed, passthough] = splitProps(props, [ + "ref", + "component", + "class", + "typography", + ]); + const classes = () => + mergeClass(managed.class, typography[managed.typography]); + return ( + + ); +}; + +export function Display4(props: TypographyProps) { + return +} +export function Display3(props: TypographyProps) { + return +} +export function Display2(props: TypographyProps) { + return +} +export function Display1(props: TypographyProps) { + return +} +export function Headline(props: TypographyProps) { + return +} +export function Title(props: TypographyProps) { + return +} +export function Subheading(props: TypographyProps) { + return +} +export function Body1(props: TypographyProps) { + return +} +export function Body2(props: TypographyProps) { + return +} +export function Caption(props: TypographyProps) { + return +} +export function ButtonText(props: TypographyProps) { + return +} diff --git a/src/platform/anim.ts b/src/platform/anim.ts new file mode 100644 index 0000000..eead57a --- /dev/null +++ b/src/platform/anim.ts @@ -0,0 +1,11 @@ +import { createContext, useContext, type Accessor } from "solid-js"; + +export type HeroSource = {[key: string | symbol | number]: HTMLElement | undefined} + +const HeroSourceContext = createContext>(() => ({})) + +export const HeroSourceProvider = HeroSourceContext.Provider + +export function useHeroSource() { + return useContext(HeroSourceContext) +} diff --git a/src/platform/timesrc.ts b/src/platform/timesrc.ts new file mode 100644 index 0000000..dbf51fb --- /dev/null +++ b/src/platform/timesrc.ts @@ -0,0 +1,42 @@ +import { + Accessor, + createContext, + createRenderEffect, + createSignal, + onCleanup, + untrack, + useContext, +} from "solid-js"; + +const TimeSourceContext = createContext>(); + +export const TimeSourceProvider = TimeSourceContext.Provider; + +export function createTimeSource() { + let id: number | undefined; + const [get, set] = createSignal(new Date()); + + createRenderEffect(() => + untrack(() => { + id = setTimeout(() => { + set(new Date()); + }, 30 * 1000); + }), + ); + + onCleanup(() => { + if (typeof id !== "undefined") { + clearInterval(id); + } + }); + + return get; +} + +export function useTimeSource() { + return ( + useContext(TimeSourceContext) ?? + (console.warn("useTimeSource() is used but no source is provided"), + createTimeSource()) + ); +} diff --git a/src/settings/stores.ts b/src/settings/stores.ts new file mode 100644 index 0000000..7d71ac0 --- /dev/null +++ b/src/settings/stores.ts @@ -0,0 +1,7 @@ +import { persistentMap } from "@nanostores/persistent"; + +type Settings = { + onGoingOAuth2Process?: string +} + +export const $settings = persistentMap("settings::", {}) diff --git a/src/timelines/CompactToot.tsx b/src/timelines/CompactToot.tsx new file mode 100644 index 0000000..b8db733 --- /dev/null +++ b/src/timelines/CompactToot.tsx @@ -0,0 +1,57 @@ +import type { mastodon } from "masto"; +import { type Component } from "solid-js"; +import tootStyle from "./toot.module.css"; +import { formatRelative } from "date-fns"; +import Img from "../material/Img"; +import { Body2 } from "../material/typography"; +import { css } from "solid-styled"; +import { appliedCustomEmoji } from "../masto/toot"; +import cardStyle from "../material/cards.module.css"; + +type CompactTootProps = { + status: mastodon.v1.Status; + now: Date; + class?: string; +}; + +const CompactToot: Component = (props) => { + const toot = () => props.status; + return ( +
+ +
+ { + appliedCustomEmoji( + e, + toot().account.displayName, + toot().account.emojis, + ); + }} + > + + @{toot().account.username}@{new URL(toot().account.url).hostname} + + +
+
{ + appliedCustomEmoji(e, toot().content, toot().emojis); + }} + class={[tootStyle.compactTootContent].join(' ')} + >
+
+ ); +}; + +export default CompactToot; diff --git a/src/timelines/Home.tsx b/src/timelines/Home.tsx new file mode 100644 index 0000000..743b5af --- /dev/null +++ b/src/timelines/Home.tsx @@ -0,0 +1,336 @@ +import { + Component, + For, + onCleanup, + createSignal, + createEffect, + Show, + untrack, + onMount, +} from "solid-js"; +import { $accounts } from "../accounts/stores"; +import { useDocumentTitle } from "../utils"; +import { useStore } from "@nanostores/solid"; +import { useMastoClientFor } from "../masto/clients"; +import { type mastodon } from "masto"; +import Scaffold from "../material/Scaffold"; +import { + AppBar, + Button, + Fab, + LinearProgress, + ListItemSecondaryAction, + ListItemText, + MenuItem, + Switch, + Toolbar, + Typography, +} from "@suid/material"; +import { css } from "solid-styled"; +import { TimeSourceProvider, createTimeSource } from "../platform/timesrc"; +import TootThread from "./TootThread.js"; +import { useAcctProfile } from "../masto/acct"; +import ProfileMenuButton from "./ProfileMenuButton"; +import Tabs from "../material/Tabs"; +import Tab from "../material/Tab"; +import { Create as CreateTootIcon } from "@suid/icons-material"; +import { useTimeline } from "../masto/timelines"; +import { makeEventListener } from "@solid-primitives/event-listener"; + +const TimelinePanel: Component<{ + client: mastodon.rest.Client; + name: "home" | "public" | "trends"; + prefetch?: boolean; +}> = (props) => { + const [timeline, { refetch: refetchTimeline, mutate: mutateTimeline }] = + useTimeline(() => + props.name !== "trends" + ? props.client.v1.timelines[props.name] + : props.client.v1.trends.statuses, + ); + + const tlEndObserver = new IntersectionObserver(() => { + if (untrack(() => props.prefetch) && !timeline.loading) + refetchTimeline({ direction: "old" }); + }); + + onCleanup(() => tlEndObserver.disconnect()); + + const onBookmark = async ( + index: number, + client: mastodon.rest.Client, + status: mastodon.v1.Status, + ) => { + const result = await (status.bookmarked + ? client.v1.statuses.$select(status.id).unbookmark() + : client.v1.statuses.$select(status.id).bookmark()); + mutateTimeline((o) => { + o[index] = result; + return o; + }); + }; + + const onBoost = async ( + index: number, + client: mastodon.rest.Client, + status: mastodon.v1.Status, + ) => { + const reblogged = false; + mutateTimeline((o) => { + Object.assign(o[index].reblog ?? o[index], { + reblogged: !reblogged, + }); + return o; + }); + const result = reblogged + ? await client.v1.statuses.$select(status.id).unreblog() + : (await client.v1.statuses.$select(status.id).reblog()).reblog!; + mutateTimeline((o) => { + Object.assign(o[index].reblog ?? o[index], { + reblogged: result.reblogged, + reblogsCount: result.reblogsCount, + }); + return o; + }); + }; + + return ( + <> +
+ + {(item, index) => { + return ( + onBoost(index(), ...args)} + onBookmark={(...args) => onBookmark(index(), ...args)} + client={props.client} + /> + ); + }} + +
+ +
tlEndObserver.observe(e)}>
+ +
+ +
+
+ +
+ +
+
+ +
+ +
+
+ + ); +}; + +const Home: Component = () => { + let panelList: HTMLDivElement; + useDocumentTitle("Timelines"); + const accounts = useStore($accounts); + const now = createTimeSource(); + + const client = useMastoClientFor(() => accounts()[0]); + const [profile] = useAcctProfile(() => accounts()[0]); + + const [panelOffset, setPanelOffset] = createSignal(0); + const [prefetching, setPrefetching] = createSignal(true); + const [currentFocusOn, setCurrentFocusOn] = createSignal([]); + const [focusRange, setFocusRange] = createSignal([0, 0] as readonly [ + number, + number, + ]); + + let scrollEventLockReleased = true; + + const recalculateTabIndicator = () => { + scrollEventLockReleased = false; + try { + const { x: panelX, width: panelWidth } = + panelList.getBoundingClientRect(); + let minIdx = +Infinity, + maxIdx = -Infinity; + const items = panelList.querySelectorAll(".tab-panel"); + const ranges = Array.from(items).map((x) => { + const rect = x.getBoundingClientRect(); + const inlineStart = rect.x - panelX; + const inlineEnd = rect.width + inlineStart; + return [inlineStart, inlineEnd] as const; + }); + for (let i = 0; i < items.length; i++) { + const e = items.item(i); + const [inlineStart, inlineEnd] = ranges[i]; + if (inlineStart >= 0 && inlineEnd <= panelWidth) { + minIdx = Math.min(minIdx, i); + maxIdx = Math.max(maxIdx, i); + e.classList.add("active"); + } else { + e.classList.remove("active"); + } + } + + if (isFinite(minIdx) && isFinite(maxIdx)) { + setFocusRange([minIdx, maxIdx]); + } + } finally { + scrollEventLockReleased = true; + } + }; + + onMount(() => { + makeEventListener(panelList, "scroll", () => { + if (scrollEventLockReleased) { + requestAnimationFrame(recalculateTabIndicator); + } + }); + makeEventListener(window, "resize", () => { + if (scrollEventLockReleased) { + requestAnimationFrame(recalculateTabIndicator); + } + }); + requestAnimationFrame(recalculateTabIndicator); + }); + + const isTabFocus = (idx: number) => { + const [start, end] = focusRange(); + if (!isFinite(start) || !isFinite(end)) return false; + return idx >= start && idx <= end; + }; + + const onTabClick = (idx: number) => { + const items = panelList.querySelectorAll(".tab-panel"); + if (items.length > idx) { + items.item(idx).scrollIntoView({ behavior: "smooth" }); + } + }; + + css` + .tab-panel { + overflow: visible auto; + max-width: 560px; + height: 100%; + padding: 40px 16px; + max-height: calc(100vh - var(--scaffold-topbar-height, 0px)); + max-height: calc(100dvh - var(--scaffold-topbar-height, 0px)); + scroll-snap-align: center; + + &:not(.active) { + overflow: hidden; + } + + @media (max-width: 600px) { + padding: 0; + } + } + + .panel-list { + display: grid; + grid-auto-columns: 560px; + grid-auto-flow: column; + overflow-x: auto; + scroll-snap-type: x mandatory; + scroll-snap-stop: always; + height: calc(100vh - var(--scaffold-topbar-height, 0px)); + height: calc(100dvh - var(--scaffold-topbar-height, 0px)); + + @media (max-width: 600px) { + grid-auto-columns: 100%; + } + } + `; + + return ( + + + + + Home + + + Trending + + + Public + + + + setPrefetching((x) => !x)}> + Prefetch Toots + + + + + + + + } + fab={ + + + + } + > + +
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+
+
+ ); +}; + +export default Home; diff --git a/src/timelines/MediaAttachmentGrid.tsx b/src/timelines/MediaAttachmentGrid.tsx new file mode 100644 index 0000000..f98df53 --- /dev/null +++ b/src/timelines/MediaAttachmentGrid.tsx @@ -0,0 +1,80 @@ +import type { mastodon } from "masto"; +import { type Component, For, createSignal } from "solid-js"; +import { css } from "solid-styled"; +import tootStyle from "./toot.module.css"; +import { Portal } from "solid-js/web"; +import MediaViewer, { MEDIA_VIEWER_HEROSRC } from "./MediaViewer"; +import { HeroSourceProvider } from "../platform/anim"; + +const MediaAttachmentGrid: Component<{ + attachments: mastodon.v1.MediaAttachment[]; +}> = (props) => { + let rootRef: HTMLElement; + const [viewerIndex, setViewerIndex] = createSignal(); + const viewerOpened = () => typeof viewerIndex() !== "undefined" + const gridTemplateColumns = () => { + const l = props.attachments.length; + if (l < 2) { + return "1fr"; + } + if (l < 4) { + return "repeat(2, 1fr)"; + } + return "repeat(3, 1fr)"; + }; + + const openViewerFor = (index: number) => { + setViewerIndex(index); + }; + + css` + .attachments { + grid-template-columns: ${gridTemplateColumns()}; + } + `; + return ( +
e.stopImmediatePropagation()} + > + + {(item, index) => { + switch (item.type) { + case "image": + return ( + {item.description + ); + case "video": + case "gifv": + case "audio": + case "unknown": + return
; + } + }} +
+ ({ + [MEDIA_VIEWER_HEROSRC]: rootRef.children.item( + viewerIndex() || 0, + ) as HTMLElement, + })} + > + setViewerIndex(undefined)} + /> + +
+ ); +}; + +export default MediaAttachmentGrid; diff --git a/src/timelines/MediaViewer.tsx b/src/timelines/MediaViewer.tsx new file mode 100644 index 0000000..5e73f4c --- /dev/null +++ b/src/timelines/MediaViewer.tsx @@ -0,0 +1,378 @@ +import type { mastodon } from "masto"; +import { + For, + type Component, + type ParentComponent, + Switch, + Match, + createEffect, + createSignal, + type JSX, + onMount, + Index, + mergeProps, + requestCallback, + untrack, +} from "solid-js"; +import { css } from "solid-styled"; +import { useHeroSource } from "../platform/anim"; +import { Portal } from "solid-js/web"; +import { createStore } from "solid-js/store"; +import { IconButton, Toolbar } from "@suid/material"; +import { ArrowLeft, ArrowRight, Close } from "@suid/icons-material"; + +type MediaViewerProps = { + show: boolean; + index: number; + media: mastodon.v1.MediaAttachment[]; + onIndexUpdated?: (newIndex: number) => void; + onClose?: () => void; +}; + +export const MEDIA_VIEWER_HEROSRC = Symbol("mediaViewerHeroSrc"); + +function within(n: number, target: number, range: number) { + return n >= target - range || n <= target + range; +} + +function clamp(input: number, min: number, max: number) { + return Math.min(Math.max(input, min), max) +} + +const MediaViewer: ParentComponent = (props) => { + let rootRef: HTMLDialogElement; + + const heroSource = useHeroSource(); + const heroSourceEl = () => heroSource()[MEDIA_VIEWER_HEROSRC]; + type State = { + ref?: HTMLElement; + media: mastodon.v1.MediaAttachment; + top: number; + left: number; + scale: number; + osize: [number, number]; // width, height + }; + const [state, setState] = createStore( + props.media.map( + (media) => + ({ + top: 0, + left: 0, + ref: undefined, + media, + scale: 1, + osize: [0, 9], + }) as State, + ), + ); + const [showControls, setShowControls] = createSignal(true); + const [dragging, setDragging] = createSignal(false); + + const hasPrev = () => state.length > 1 && props.index !== 0; + const hasNext = () => state.length > 1 && props.index < state.length - 1; + + css` + .media-viewer--root { + background: none; + border: none; + overflow: hidden; + margin: 0; + padding: 0; + outline: none; + max-width: 100%; + max-height: 100%; + height: 100%; + width: 100%; + + &[open] { + display: block; + } + } + + .media-viewer { + display: grid; + grid-auto-flow: column; + grid-auto-columns: 100%; + width: 100%; + height: 100%; + overflow: auto; + background-color: ${showControls() + ? "var(--tutu-color-surface)" + : "var(--tutu-color-on-surface)"}; + transition: background-color 0.2s var(--tutu-anim-curve-std); + scroll-behavior: smooth; + + > .media { + height: 100%; + } + } + + .media { + overflow: hidden; + position: relative; + + > img { + position: absolute; + object-fit: contain; + top: 0; + left: 0; + transform-origin: center; + } + } + + .media-ctrls { + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + z-index: 1; + cursor: ${dragging() ? "grabbing" : "grab"}; + } + + .left-dock { + position: absolute; + left: 24px; + top: 50%; + transform: translateY(-50%) + ${showControls() && hasPrev() + ? "" + : "translateX(-100%) translateX(-24px)"}; + display: inline-block; + transition: transform 0.2s var(--tutu-anim-curve-std); + } + + .right-dock { + position: absolute; + right: 24px; + top: 50%; + transform: translateY(-50%) + ${showControls() && hasNext() + ? "" + : "translateX(100%) translateX(24px)"}; + display: inline-block; + transition: transform 0.2s var(--tutu-anim-curve-std); + } + `; + + createEffect(() => { + if (props.show) { + rootRef.showModal(); + untrack(() => { + for (let i = 0; i < state.length; i++) { + centre(state[i], i); + } + }); + } else { + rootRef.close(); + } + }); + + createEffect(() => { + const viewer = rootRef.children.item(0)!; + const targetPageE = viewer.children.item(props.index + 1); + if (!targetPageE) return; + targetPageE.scrollIntoView(); + }); + + const minScaleOf = (state: State) => { + const { + ref, + osize: [width, height], + } = state; + const { width: parentWidth, height: parentHeight } = + ref!.parentElement!.getBoundingClientRect(); + if (height <= parentHeight && width <= parentWidth) { + return 1; + } + return Math.min(parentHeight / height, parentWidth / width); + }; + + // Position medias to the centre. + // This function is only available when the elements are layout. + const centre = ({ ref, osize: [width, height] }: State, idx: number) => { + const { width: parentWidth, height: parentHeight } = + ref!.parentElement!.getBoundingClientRect(); + const scale = + height <= parentHeight && width <= parentWidth + ? 1 + : Math.min(parentHeight / height, parentWidth / width); + const top = parentHeight / 2 - height / 2; + const left = parentWidth / 2 - width / 2; + setState(idx, { top, left, scale }); + }; + + const scale = ( + center: readonly [number, number], // left, top + move: number, + idx: number, + ) => { + const { ref, top: otop, left: oleft, scale: oscale, osize: [owidth, oheight] } = state[idx]; + const [cx, cy] = center; + const iy = clamp(cy - otop, 0, oheight), + ix = clamp(cx - oleft, 0, owidth); // in image coordinate system + const scale = move + oscale; + const oix = ix / oscale, + oiy = iy / oscale; + const nix = oix * scale, + niy = oiy * scale; + // Now we can calculate the center's move + + const { width: vw, height: vh } = + ref!.parentElement!.getBoundingClientRect(); + const top = vh / 2 - niy; + const left = vw / 2 - nix; + setState(idx, { top, left, scale }); + }; + + const movePrev = () => { + props.onIndexUpdated?.(Math.max(props.index - 1, 0)); + }; + + const moveNext = () => { + props.onIndexUpdated?.(Math.min(props.index + 1, state.length - 1)); + }; + + const ctrlWheel = (event: WheelEvent) => { + if (event.ctrlKey && event.deltaY !== 0) { + event.preventDefault(); + const center = [event.clientX, event.clientY] as const; + scale(center, -event.deltaY / event.clientY, props.index); + } else { + if (event.deltaX !== 0) { + event.preventDefault(); + if (event.deltaX > 0) { + moveNext(); + } else { + movePrev(); + } + } + } + }; + + let lastMousedown: [number, number, number] | null = null; // time, left, top + + const ctrlMouseDown = (event: MouseEvent) => { + if (event.buttons !== 1) return; + event.preventDefault(); + lastMousedown = [Date.now(), event.clientX, event.clientY]; + setDragging(true); + }; + + const ctrlMouseMove = (event: MouseEvent) => { + if (!lastMousedown) return; + event.preventDefault(); + const { movementX: mleft, movementY: mtop } = event; + setState(props.index, (o) => ({ left: o.left + mleft, top: o.top + mtop })); + }; + + const ctrlMouseUp = (event: MouseEvent) => { + if (lastMousedown !== null) { + event.preventDefault(); + const [time, left, top] = lastMousedown; + const { clientX: nleft, clientY: ntop } = event; + const now = Date.now(); + const target = event.target; + checkControls: { + if ( + target instanceof Element && + !target.classList.contains("media-ctrls") + ) { + // It's dispatched from sub controls, exits + break checkControls; + } + if ( + now - time < 250 && + within(left, nleft, 4) && + within(top, ntop, 4) + ) { + setShowControls((x) => !x); + } + } + lastMousedown = null; + setDragging(false); + } + }; + + return ( + +
+
+ + + + + +
+ (movePrev(), e.stopPropagation())} + > + + +
+
+ (moveNext(), e.stopPropagation())} + > + + +
+
+ + {(item, index) => { + return ( +
+ {JSON.stringify(item().media, undefined, 2)} + } + > + + { + setState(index, { ref: r }); + }} + onLoad={(e) => { + const { naturalWidth: width, naturalHeight: height } = + e.currentTarget; + setState(index, { + osize: [width, height], + }); + }} + src={item().media.url || undefined} + style={{ + left: `${item().left}px`, + top: `${item().top}px`, + transform: `scale(${item().scale})`, + }} + alt={item().media.description || undefined} + > + + +
+ ); + }} +
+
+
+ ); +}; + +export default MediaViewer; diff --git a/src/timelines/ProfileMenuButton.tsx b/src/timelines/ProfileMenuButton.tsx new file mode 100644 index 0000000..1d61553 --- /dev/null +++ b/src/timelines/ProfileMenuButton.tsx @@ -0,0 +1,121 @@ +import { + Avatar, + ButtonBase, + Divider, + ListItemAvatar, + ListItemIcon, + ListItemText, + Menu, + MenuItem, +} from "@suid/material"; +import { Show, createSignal, createUniqueId, type ParentComponent } from "solid-js"; +import { + Settings as SettingsIcon, + Bookmark as BookmarkIcon, + Star as LikeIcon, + FeaturedPlayList as ListIcon, +} from "@suid/icons-material"; + +const ProfileMenuButton: ParentComponent<{ + profile?: { displayName: string; avatar: string; username: string }; + onClick?: () => void; + onClose?: () => void; +}> = (props) => { + const menuId = createUniqueId(); + const buttonId = createUniqueId(); + + let [anchor, setAnchor] = createSignal(null); + const open = () => !!anchor(); + + const onClick = ( + event: MouseEvent & { currentTarget: HTMLButtonElement }, + ) => { + setAnchor(event.currentTarget); + props.onClick?.(); + }; + + const onClose = () => { + props.onClick?.(); + setAnchor(null); + }; + + return ( + <> + + + + + + + + + + + + + + + + Bookmarks + + + + + + Likes + + + + + + Lists + + + + {props.children} + + + + + + + Settings + + + + ); +}; + +export default ProfileMenuButton; diff --git a/src/timelines/RegularToot.tsx b/src/timelines/RegularToot.tsx new file mode 100644 index 0000000..7d9b694 --- /dev/null +++ b/src/timelines/RegularToot.tsx @@ -0,0 +1,259 @@ +import type { mastodon } from "masto"; +import { + splitProps, + type Component, + type JSX, + Show, + createRenderEffect, +} from "solid-js"; +import tootStyle from "./toot.module.css"; +import { formatRelative } from "date-fns"; +import Img from "../material/Img.js"; +import { Body2 } from "../material/typography.js"; +import { css } from "solid-styled"; +import { + BookmarkAddOutlined, + Repeat, + ReplyAll, + Star, + StarOutline, + Bookmark, + Reply, +} from "@suid/icons-material"; +import { useTimeSource } from "../platform/timesrc.js"; +import { resolveCustomEmoji } from "../masto/toot.js"; +import { Divider } from "@suid/material"; +import cardStyle from "../material/cards.module.css"; +import Button from "../material/Button.js"; +import MediaAttachmentGrid from "./MediaAttachmentGrid.js"; + +type TootContentViewProps = { + source?: string; + emojis?: mastodon.v1.CustomEmoji[]; +} & JSX.HTMLAttributes; + +const TootContentView: Component = (props) => { + const [managed, rest] = splitProps(props, ["source", "emojis"]); + return ( +
{ + createRenderEffect(() => { + ref.innerHTML = managed.source + ? managed.emojis + ? resolveCustomEmoji(managed.source, managed.emojis) + : managed.source + : ""; + }); + }} + {...rest} + >
+ ); +}; + +const RetootIcon: Component = (props) => { + const [managed, rest] = splitProps(props, ["class"]); + css` + .retoot-icon { + padding: 0; + display: inline-block; + border-radius: 2px; + + > :global(svg) { + color: green; + font-size: 1rem; + vertical-align: middle; + } + } + `; + return ( + + + + ); +}; + +const ReplyIcon: Component = (props) => { + const [managed, rest] = splitProps(props, ["class"]); + css` + .retoot-icon { + padding: 0; + display: inline-block; + border-radius: 2px; + + > :global(svg) { + color: var(--tutu-color-primary); + font-size: 1rem; + vertical-align: middle; + } + } + `; + return ( + + + + ); +}; + +type TootActionGroupProps = { + onRetoot?: (value: T) => void; + onFavourite?: (value: T) => void; + onBookmark?: (value: T) => void; + onReply?: (value: T) => void; +}; + +type TootCardProps = { + status: mastodon.v1.Status; + actionable?: boolean; + evaluated?: boolean; +} & TootActionGroupProps & + JSX.HTMLElementTags["article"]; + +function isolatedCallback(e: MouseEvent) { + e.stopPropagation(); +} + +function TootActionGroup( + props: TootActionGroupProps & { value: T }, +) { + const toot = () => props.value; + return ( +
+ + + + +
+ ); +} + +function TootAuthorGroup(props: { status: mastodon.v1.Status; now: Date }) { + const toot = () => props.status; + + return ( +
+ +
+ { + createRenderEffect(() => { + e.innerHTML = resolveCustomEmoji( + toot().account.displayName, + toot().account.emojis, + ); + }); + }} + /> + + + @{toot().account.username}@{new URL(toot().account.url).hostname} + +
+
+ ); +} + +const RegularToot: Component = (props) => { + let rootRef: HTMLElement; + const [managed, managedActionGroup, rest] = splitProps( + props, + ["status", "lang", "class", "actionable", "evaluated"], + ["onRetoot", "onFavourite", "onBookmark", "onReply"], + ); + const now = useTimeSource(); + const status = () => managed.status; + const toot = () => status().reblog ?? status(); + + css` + .reply-sep { + margin-left: calc(var(--toot-avatar-size) + var(--card-pad) + 8px); + margin-block: 8px; + } + `; + + return ( + <> +
+ +
+ + + { + createRenderEffect(() => { + e.innerHTML = resolveCustomEmoji( + status().account.displayName, + toot().emojis, + ); + }); + }} + >{" "} + boosted + +
+
+ + + 0}> + + + + + + +
+ + ); +}; + +export default RegularToot; diff --git a/src/timelines/TootBottomSheet.tsx b/src/timelines/TootBottomSheet.tsx new file mode 100644 index 0000000..0b40aa0 --- /dev/null +++ b/src/timelines/TootBottomSheet.tsx @@ -0,0 +1,8 @@ +import type { Component } from "solid-js"; + + +const TootBottomSheet: Component = (props) => { + return <> +} + +export default TootBottomSheet diff --git a/src/timelines/TootThread.tsx b/src/timelines/TootThread.tsx new file mode 100644 index 0000000..cf4c226 --- /dev/null +++ b/src/timelines/TootThread.tsx @@ -0,0 +1,86 @@ +import type { mastodon } from "masto"; +import { Show, createResource, createSignal, type Component } from "solid-js"; +import CompactToot from "./CompactToot"; +import { useTimeSource } from "../platform/timesrc"; +import RegularToot from "./RegularToot"; +import cardStyle from "../material/cards.module.css"; +import { css } from "solid-styled"; + +type TootThreadProps = { + status: mastodon.v1.Status; + client: mastodon.rest.Client; + expanded?: 0 | 1 | 2; + + onBoost?(client: mastodon.rest.Client, status: mastodon.v1.Status): void; + onBookmark?(client: mastodon.rest.Client, status: mastodon.v1.Status): void; +}; + +const TootThread: Component = (props) => { + const status = () => props.status; + const now = useTimeSource(); + const [expanded, setExpanded] = createSignal(false); + + const [inReplyTo] = createResource( + () => [props.client, status().inReplyToId || null] as const, + async ([client, replyToId]) => { + if (!(client && replyToId)) return null; + return await client.v1.statuses.$select(replyToId).fetch(); + }, + ); + + const boost = (status: mastodon.v1.Status) => { + props.onBoost?.(props.client, status); + }; + + const bookmark = (status: mastodon.v1.Status) => { + props.onBookmark?.(props.client, status); + }; + + css` + article { + transition: margin 90ms var(--tutu-anim-curve-sharp), var(--tutu-transition-shadow); + user-select: none; + cursor: pointer; + } + + .thread-line { + position: relative; + &::before { + content: ""; + position: absolute; + left: 36px; + top: 16px; + bottom: 0; + background-color: var(--tutu-color-secondary); + width: 2px; + display: block; + } + } + + .expanded { + margin-block: 20px; + box-shadow: var(--tutu-shadow-e9); + } + `; + + return ( +
setExpanded((x) => !x)}> + + + + bookmark(s)} + onRetoot={(s) => boost(s)} + /> +
+ ); +}; + +export default TootThread; diff --git a/src/timelines/toot.module.css b/src/timelines/toot.module.css new file mode 100644 index 0000000..13ab4e7 --- /dev/null +++ b/src/timelines/toot.module.css @@ -0,0 +1,209 @@ +.toot { + --card-pad: 16px; + --card-gut: 16px; + --toot-avatar-size: 40px; + margin-block: 0; + + &.toot { + /* fix composition ordering: I think the css module processor should aware the overriding and behaves, but no */ + transition: margin-block 125ms var(--tutu-anim-curve-std), + height 225ms var(--tutu-anim-curve-std), + var(--tutu-transition-shadow); + border-radius: 0; + } + + &>.toot { + box-shadow: none; + } + + time { + color: var(--tutu-color-secondary-text-on-surface); + } + + & :global(.custom-emoji) { + height: 1em; + object-fit: contain; + } + + &.expanded { + margin-block: 20px; + box-shadow: var(--tutu-shadow-e9); + } +} + +.tootAuthorGrp { + display: flex; + align-items: flex-start; + gap: 8px; + margin-bottom: 8px; + + > :not(:first-child) { + flex-grow: 1; + } +} + +.tootAuthorNameGrp { + display: grid; + grid-template-columns: 1fr auto; + + >* { + color: var(--tutu-color-secondary-text-on-surface); + } + + >:last-child { + grid-column: 1 /3; + } + + > time { + text-align: end; + } + + &:hover { + .tootAuthorNamePrimary { + text-decoration: underline; + } + } +} + +.tootAuthorNamePrimary { + color: revert; +} + +.tootAvatar { + width: calc(var(--toot-avatar-size, 40px) - 1px); + aspect-ratio: 1/1; + object-fit: contain; + border-radius: 50% 50%; + overflow: hidden; + border: 1px solid var(--tutu-color-surface); + background-color: var(--tutu-color-surface-d); +} + +.tootContent { + composes: cardNoPad from '../material/cards.module.css'; + margin-left: calc(var(--card-pad, 0) + var(--toot-avatar-size, 0) + 8px); + margin-right: var(--card-pad, 0); + line-height: 1.5; + + & a { + color: var(--tutu-color-primary-d); + } + + & :global(a[target="_blank"]) { + > :global(.invisible) { + display: none; + } + + > :global(.ellipsis) { + &::after { + display: inline; + content: "..."; + } + } + } +} + +.compact { + display: grid; + grid-template-columns: auto 1fr; + gap: 8px; + row-gap: 0; + padding-block: var(--card-gut, 16px); + padding-inline: var(--card-pad, 16px); + + > :first-child { + grid-row: 1/3; + } + + > :last-child { + grid-column: 2 /3; + } +} + +.compactAuthorGroup { + display: flex; + gap: 8px; + align-items: center; + margin-bottom: 8px; + + > .compactAuthorUsername { + color: var(--tutu-color-secondary-text-on-surface); + flex-grow: 1; + } + + > time { + color: var(--tutu-color-secondary-text-on-surface); + } +} + +.compactTootContent { + composes: tootContent; + margin-left: 0; + margin-right: 0; +} + +.tootRetootGrp { + display: grid; + grid-template-columns: auto 1fr auto; + gap: 8px; + margin-bottom: 8px; +} + +.tootAttachmentGrp { + composes: cardNoPad from '../material/cards.module.css'; + margin-top: 1em; + margin-left: calc(var(--card-pad, 0) + var(--toot-avatar-size, 0) + 8px); + margin-right: var(--card-pad, 0); + display: grid; + gap: 4px; + + >:where(img) { + max-height: 35vh; + min-height: 40px; + object-fit: none; + width: 100%; + background-color: var(--tutu-color-surface-d); + border-radius: 2px; + } +} + +.tootBottomActionGrp { + composes: cardGutSkip from '../material/cards.module.css'; + padding-block: calc((var(--card-gut) - 10px) / 2); + + animation: 225ms var(--tutu-anim-curve-std) tootBottomExpanding; + display: flex; + flex-flow: row wrap; + justify-content: space-evenly; + + > button{ + color: var(--tutu-color-on-surface); + padding: 10px 8px; + + > svg { + font-size: 20px; + } + } +} + +.tootActionWithCount { + display: flex; + align-items: center; + gap: 8px; +} + +.tootAction { + display: flex; + align-items: center; + justify-content: center; +} + +@keyframes tootBottomExpanding { + 0% { + opacity: 0; + } + + 100% { + opacity: 1; + } +} \ No newline at end of file diff --git a/src/utils.tsx b/src/utils.tsx new file mode 100644 index 0000000..51091ca --- /dev/null +++ b/src/utils.tsx @@ -0,0 +1,26 @@ +import { createRenderEffect, createSignal, onCleanup } from "solid-js"; + +export function useDocumentTitle(newTitle?: string) { + const capturedTitle = document.title + const [title, setTitle] = createSignal(newTitle ?? capturedTitle) + + createRenderEffect(() => { + document.title = title() + }) + + onCleanup(() => { + document.title = capturedTitle + }) + + return setTitle +} + +export function mergeClass(c1: string | undefined, c2: string | undefined) { + if (!c1) { + return c2 + } + if (!c2) { + return c1 + } + return [c1, c2].join(' ') +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..137e232 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "strict": true, + "target": "ESNext", + "module": "esnext", + "moduleResolution": "node", + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "jsx": "preserve", + "jsxImportSource": "solid-js", + "types": ["vite/client"], + "noEmit": true, + "isolatedModules": true, + } +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..7612cee --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,27 @@ +import { defineConfig } from "vite"; +import solid from "vite-plugin-solid"; +import solidStyled from "vite-plugin-solid-styled"; +import suid from "@suid/vite-plugin"; +import { VitePWA } from "vite-plugin-pwa"; + +export default defineConfig(({ mode }) => ({ + plugins: [ + suid(), + solid(), + solidStyled({ + filter: { + include: "src/**/*.{tsx,jsx}", + exclude: "node_modules/**/*.{ts,js,tsx,jsx}", + }, + }), + VitePWA({ + registerType: "autoUpdate", + }), + ], + css: { + devSourcemap: true, + }, + build: { + target: ["firefox98", "safari15.4", "ios15.4", "chrome84", "edge87"], + }, +})); From 1612788a9c7d42276a9973e580582d83f19aa688 Mon Sep 17 00:00:00 2001 From: thislight Date: Sun, 14 Jul 2024 20:58:55 +0800 Subject: [PATCH 003/300] ci: added depoly --- .forgejo/workflows/depoly.yml | 36 ++ package.json | 3 +- pnpm-lock.yaml | 700 ++++++++++++++++++++++++++++++++-- 3 files changed, 706 insertions(+), 33 deletions(-) create mode 100644 .forgejo/workflows/depoly.yml diff --git a/.forgejo/workflows/depoly.yml b/.forgejo/workflows/depoly.yml new file mode 100644 index 0000000..bf3bfc3 --- /dev/null +++ b/.forgejo/workflows/depoly.yml @@ -0,0 +1,36 @@ + +on: ['push'] + +jobs: + depoly: + runs-on: linux + container: + image: code.lightstands.xyz/standcoded/fedora:40 + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup pnpm + run: | + corepack enable + corepack prepare pnpm@latest-9 --activate + pnpm config set store-dir /tmp/pnpm-store + + - name: Cache Dependencies + id: dependencies-cache + uses: actions/cache@v4 + with: + path: /tmp/pnpm-store + key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }} + + - name: Install Dependencies + run: pnpm i + + - name: Depoly to Cloudflare + uses: https://github.com/cloudflare/wrangler-action@v3 + with: + apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} + accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} + command: pages deploy --project-name=tututheapp dist + if: "env.GITHUB_REF_NAME == 'master'" + diff --git a/package.json b/package.json index 466596f..a1ec53e 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,8 @@ "vite": "^5.3.2", "vite-plugin-pwa": "^0.20.0", "vite-plugin-solid": "^2.10.2", - "vite-plugin-solid-styled": "^0.11.1" + "vite-plugin-solid-styled": "^0.11.1", + "wrangler": "^3.64.0" }, "dependencies": { "@nanostores/persistent": "^0.9.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 31b4c61..acc4341 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -53,7 +53,7 @@ importers: devDependencies: '@suid/vite-plugin': specifier: ^0.2.0 - version: 0.2.0(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2)) + version: 0.2.0(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)) '@types/hammerjs': specifier: ^2.0.45 version: 2.0.45 @@ -68,16 +68,19 @@ importers: version: 5.5.2 vite: specifier: ^5.3.2 - version: 5.3.2(lightningcss@1.25.1)(terser@5.31.2) + version: 5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2) vite-plugin-pwa: specifier: ^0.20.0 - version: 0.20.0(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.1.0) + version: 0.20.0(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.1.0) vite-plugin-solid: specifier: ^2.10.2 - version: 2.10.2(solid-js@1.8.18)(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2)) + version: 2.10.2(solid-js@1.8.18)(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)) vite-plugin-solid-styled: specifier: ^0.11.1 - version: 0.11.1(rollup@2.79.1)(solid-styled@0.11.1(solid-js@1.8.18))(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2)) + version: 0.11.1(rollup@2.79.1)(solid-styled@0.11.1(solid-js@1.8.18))(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)) + wrangler: + specifier: ^3.64.0 + version: 3.64.0 packages: @@ -720,144 +723,328 @@ packages: resolution: {integrity: sha512-SkSBEHwwJRU52QEVZBmMBnE5Ux2/6WU1grdYyOhpbCNxbmJrDuDCphBzKZSO3taf0zztp+qkWlymE5tVL5l0TA==} engines: {node: '>=6.9.0'} + '@cloudflare/kv-asset-handler@0.3.4': + resolution: {integrity: sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==} + engines: {node: '>=16.13'} + + '@cloudflare/workerd-darwin-64@1.20240701.0': + resolution: {integrity: sha512-XAZa4ZP+qyTn6JQQACCPH09hGZXP2lTnWKkmg5mPwT8EyRzCKLkczAf98vPP5bq7JZD/zORdFWRY0dOTap8zTQ==} + engines: {node: '>=16'} + cpu: [x64] + os: [darwin] + + '@cloudflare/workerd-darwin-arm64@1.20240701.0': + resolution: {integrity: sha512-w80ZVAgfH4UwTz7fXZtk7KmS2FzlXniuQm4ku4+cIgRTilBAuKqjpOjwUCbx5g13Gqcm9NuiHce+IDGtobRTIQ==} + engines: {node: '>=16'} + cpu: [arm64] + os: [darwin] + + '@cloudflare/workerd-linux-64@1.20240701.0': + resolution: {integrity: sha512-UWLr/Anxwwe/25nGv451MNd2jhREmPt/ws17DJJqTLAx6JxwGWA15MeitAIzl0dbxRFAJa+0+R8ag2WR3F/D6g==} + engines: {node: '>=16'} + cpu: [x64] + os: [linux] + + '@cloudflare/workerd-linux-arm64@1.20240701.0': + resolution: {integrity: sha512-3kCnF9kYgov1ggpuWbgpXt4stPOIYtVmPCa7MO2xhhA0TWP6JDUHRUOsnmIgKrvDjXuXqlK16cdg3v+EWsaPJg==} + engines: {node: '>=16'} + cpu: [arm64] + os: [linux] + + '@cloudflare/workerd-windows-64@1.20240701.0': + resolution: {integrity: sha512-6IPGITRAeS67j3BH1rN4iwYWDt47SqJG7KlZJ5bB4UaNAia4mvMBSy/p2p4vA89bbXoDRjMtEvRu7Robu6O7hQ==} + engines: {node: '>=16'} + cpu: [x64] + os: [win32] + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@esbuild-plugins/node-globals-polyfill@0.2.3': + resolution: {integrity: sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==} + peerDependencies: + esbuild: '*' + + '@esbuild-plugins/node-modules-polyfill@0.2.2': + resolution: {integrity: sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==} + peerDependencies: + esbuild: '*' + '@esbuild/aix-ppc64@0.21.5': resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} engines: {node: '>=12'} cpu: [ppc64] os: [aix] + '@esbuild/android-arm64@0.17.19': + resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm64@0.21.5': resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} engines: {node: '>=12'} cpu: [arm64] os: [android] + '@esbuild/android-arm@0.17.19': + resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + '@esbuild/android-arm@0.21.5': resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} engines: {node: '>=12'} cpu: [arm] os: [android] + '@esbuild/android-x64@0.17.19': + resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + '@esbuild/android-x64@0.21.5': resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} engines: {node: '>=12'} cpu: [x64] os: [android] + '@esbuild/darwin-arm64@0.17.19': + resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-arm64@0.21.5': resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] + '@esbuild/darwin-x64@0.17.19': + resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + '@esbuild/darwin-x64@0.21.5': resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} engines: {node: '>=12'} cpu: [x64] os: [darwin] + '@esbuild/freebsd-arm64@0.17.19': + resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-arm64@0.21.5': resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-x64@0.17.19': + resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + '@esbuild/freebsd-x64@0.21.5': resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] + '@esbuild/linux-arm64@0.17.19': + resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm64@0.21.5': resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} engines: {node: '>=12'} cpu: [arm64] os: [linux] + '@esbuild/linux-arm@0.17.19': + resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + '@esbuild/linux-arm@0.21.5': resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} engines: {node: '>=12'} cpu: [arm] os: [linux] + '@esbuild/linux-ia32@0.17.19': + resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-ia32@0.21.5': resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} engines: {node: '>=12'} cpu: [ia32] os: [linux] + '@esbuild/linux-loong64@0.17.19': + resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-loong64@0.21.5': resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] + '@esbuild/linux-mips64el@0.17.19': + resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-mips64el@0.21.5': resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] + '@esbuild/linux-ppc64@0.17.19': + resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-ppc64@0.21.5': resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] + '@esbuild/linux-riscv64@0.17.19': + resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-riscv64@0.21.5': resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] + '@esbuild/linux-s390x@0.17.19': + resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-s390x@0.21.5': resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} engines: {node: '>=12'} cpu: [s390x] os: [linux] + '@esbuild/linux-x64@0.17.19': + resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + '@esbuild/linux-x64@0.21.5': resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} engines: {node: '>=12'} cpu: [x64] os: [linux] + '@esbuild/netbsd-x64@0.17.19': + resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + '@esbuild/netbsd-x64@0.21.5': resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] + '@esbuild/openbsd-x64@0.17.19': + resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + '@esbuild/openbsd-x64@0.21.5': resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] + '@esbuild/sunos-x64@0.17.19': + resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + '@esbuild/sunos-x64@0.21.5': resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} engines: {node: '>=12'} cpu: [x64] os: [sunos] + '@esbuild/win32-arm64@0.17.19': + resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-arm64@0.21.5': resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} engines: {node: '>=12'} cpu: [arm64] os: [win32] + '@esbuild/win32-ia32@0.17.19': + resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-ia32@0.21.5': resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} engines: {node: '>=12'} cpu: [ia32] os: [win32] + '@esbuild/win32-x64@0.17.19': + resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + '@esbuild/win32-x64@0.21.5': resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} engines: {node: '>=12'} cpu: [x64] os: [win32] + '@fastify/busboy@2.1.1': + resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} + engines: {node: '>=14'} + '@jridgewell/gen-mapping@0.3.5': resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} @@ -879,6 +1066,9 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@nanostores/persistent@0.9.1': resolution: {integrity: sha512-ow57Hxm5VMaI5GHET/cVk8hX/iKMmbhcGrB9owfN8p8OHiiJgUlYxe1giacwlAALJXAh2t8bxXh42hHb64BCEA==} engines: {node: ^16.0.0 || ^18.0.0 || >=20.0.0} @@ -1135,12 +1325,22 @@ packages: '@types/hammerjs@2.0.45': resolution: {integrity: sha512-qkcUlZmX6c4J8q45taBKTL3p+LbITgyx7qhlPYOdOHZB7B31K0mXbP5YA7i7SgDeEGuI9MnumiKPEMrxg8j3KQ==} + '@types/node-forge@1.3.11': + resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} + + '@types/node@20.14.10': + resolution: {integrity: sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==} + '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + acorn-walk@8.3.3: + resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} + engines: {node: '>=0.4.0'} + acorn@8.12.0: resolution: {integrity: sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==} engines: {node: '>=0.4.0'} @@ -1169,6 +1369,9 @@ packages: resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} engines: {node: '>= 0.4'} + as-table@1.0.55: + resolution: {integrity: sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==} + async@3.2.5: resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} @@ -1212,6 +1415,9 @@ packages: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} + blake3-wasm@2.1.5: + resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} + blurhash@2.0.5: resolution: {integrity: sha512-cRygWd7kGBQO3VEhPiTgq4Wc43ctsM+o46urrmPOiuAe+07fzlSB9OJVdpgDL0jPqXUVQ9ht7aq7kxOeJHRK+w==} @@ -1250,6 +1456,9 @@ packages: capital-case@1.0.4: resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} + capnp-ts@0.7.0: + resolution: {integrity: sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==} + chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -1292,12 +1501,20 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + consola@3.2.3: + resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} + engines: {node: ^14.18.0 || >=16.10.0} + constant-case@3.0.4: resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + cookie@0.5.0: + resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + engines: {node: '>= 0.6'} + core-js-compat@3.37.1: resolution: {integrity: sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==} @@ -1312,6 +1529,9 @@ packages: csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + data-uri-to-buffer@2.0.2: + resolution: {integrity: sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==} + data-view-buffer@1.0.1: resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} engines: {node: '>= 0.4'} @@ -1348,6 +1568,9 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} + defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + detect-libc@1.0.3: resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} engines: {node: '>=0.10'} @@ -1388,6 +1611,11 @@ packages: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} + esbuild@0.17.19: + resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} + engines: {node: '>=12'} + hasBin: true + esbuild@0.21.5: resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} engines: {node: '>=12'} @@ -1401,6 +1629,13 @@ packages: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + estree-walker@0.6.1: + resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==} + estree-walker@1.0.1: resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} @@ -1414,6 +1649,10 @@ packages: events-to-async@2.0.1: resolution: {integrity: sha512-RtnLYrMbXp4JkZIoZu+3VTqV21bNVBlJBZ4NmtwvMNqSE3qouhxv2gvLE4JJDaQc54ioPkrX74V6x+hp/hqjkQ==} + exit-hook@2.2.1: + resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==} + engines: {node: '>=6'} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -1473,6 +1712,9 @@ packages: get-own-enumerable-property-symbols@3.0.2: resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} + get-source@2.0.12: + resolution: {integrity: sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==} + get-symbol-description@1.0.2: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} @@ -1481,6 +1723,9 @@ packages: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} + glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported @@ -1791,6 +2036,16 @@ packages: resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} engines: {node: '>=8.6'} + mime@3.0.0: + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} + hasBin: true + + miniflare@3.20240701.0: + resolution: {integrity: sha512-m9+I+7JNyqDGftCMKp9cK9pCZkK72hAL2mM9IWwhct+ZmucLBA8Uu6+rHQqA5iod86cpwOkrB2PrPA3wx9YNgw==} + engines: {node: '>=16.13'} + hasBin: true + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -1801,6 +2056,10 @@ packages: ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + mustache@4.2.0: + resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} + hasBin: true + nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -1813,6 +2072,13 @@ packages: no-case@3.0.4: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + node-fetch-native@1.6.4: + resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==} + + node-forge@1.3.1: + resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + engines: {node: '>= 6.13.0'} + node-releases@2.0.14: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} @@ -1851,6 +2117,12 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + path-to-regexp@6.2.2: + resolution: {integrity: sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==} + + pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + picocolors@1.0.1: resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} @@ -1879,6 +2151,9 @@ packages: resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} engines: {node: ^14.13.1 || >=16.0.0} + printable-characters@1.0.42: + resolution: {integrity: sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -1922,6 +2197,10 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} + resolve.exports@2.0.2: + resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} + engines: {node: '>=10'} + resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true @@ -1930,6 +2209,16 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + rollup-plugin-inject@3.0.2: + resolution: {integrity: sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==} + deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject. + + rollup-plugin-node-polyfills@0.2.1: + resolution: {integrity: sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==} + + rollup-pluginutils@2.8.2: + resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} + rollup@2.79.1: resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} engines: {node: '>=10.0.0'} @@ -1954,6 +2243,10 @@ packages: resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} engines: {node: '>= 0.4'} + selfsigned@2.4.1: + resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} + engines: {node: '>=10'} + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -2025,6 +2318,13 @@ packages: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} deprecated: Please use @jridgewell/sourcemap-codec instead + stacktracey@2.1.8: + resolution: {integrity: sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==} + + stoppable@1.1.0: + resolution: {integrity: sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==} + engines: {node: '>=4', npm: '>=6'} + string.prototype.matchall@4.0.11: resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} engines: {node: '>= 0.4'} @@ -2116,9 +2416,22 @@ packages: engines: {node: '>=14.17'} hasBin: true + ufo@1.5.3: + resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} + unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + undici@5.28.4: + resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} + engines: {node: '>=14.0'} + + unenv-nightly@1.10.0-1717606461.a117952: + resolution: {integrity: sha512-u3TfBX02WzbHTpaEfWEKwDijDSFAHcgXkayUZ+MVDrjhLFvgAJzFGTSTmwlEhwWi2exyRQey23ah9wELMM6etg==} + unicode-canonical-property-names-ecmascript@2.0.0: resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} engines: {node: '>=4'} @@ -2310,6 +2623,21 @@ packages: workbox-window@7.1.0: resolution: {integrity: sha512-ZHeROyqR+AS5UPzholQRDttLFqGMwP0Np8MKWAdyxsDETxq3qOAyXvqessc3GniohG6e0mAqSQyKOHmT8zPF7g==} + workerd@1.20240701.0: + resolution: {integrity: sha512-qSgNVqauqzNCij9MaJLF2c2ko3AnFioVSIxMSryGbRK+LvtGr9BKBt6JOxCb24DoJASoJDx3pe3DJHBVydUiBg==} + engines: {node: '>=16'} + hasBin: true + + wrangler@3.64.0: + resolution: {integrity: sha512-q2VQADJXzuOkXs9KIfPSx7UCZHBoxsqSNbJDLkc2pHpGmsyNQXsJRqjMoTg/Kls7O3K9A7EGnzGr7+Io2vE6AQ==} + engines: {node: '>=16.17.0'} + hasBin: true + peerDependencies: + '@cloudflare/workers-types': ^4.20240620.0 + peerDependenciesMeta: + '@cloudflare/workers-types': + optional: true + wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -2325,9 +2653,18 @@ packages: utf-8-validate: optional: true + xxhash-wasm@1.0.2: + resolution: {integrity: sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A==} + yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + youch@3.3.3: + resolution: {integrity: sha512-qSFXUk3UZBLfggAW3dJKg0BMblG5biqSF8M34E06o5CSsZtH92u9Hqmj2RzGiHDi64fhe83+4tENFP2DB6t6ZA==} + + zod@3.23.8: + resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} + snapshots: '@ampproject/remapping@2.3.0': @@ -2387,12 +2724,12 @@ snapshots: '@babel/helper-annotate-as-pure@7.24.7': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.24.8 '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7': dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/traverse': 7.24.8 + '@babel/types': 7.24.8 transitivePeerDependencies: - supports-color @@ -2500,7 +2837,7 @@ snapshots: '@babel/helper-optimise-call-expression@7.24.7': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.24.8 '@babel/helper-plugin-utils@7.24.7': {} @@ -2533,8 +2870,8 @@ snapshots: '@babel/helper-skip-transparent-expression-wrappers@7.24.7': dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/traverse': 7.24.8 + '@babel/types': 7.24.8 transitivePeerDependencies: - supports-color @@ -2556,8 +2893,8 @@ snapshots: dependencies: '@babel/helper-function-name': 7.24.7 '@babel/template': 7.24.7 - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/traverse': 7.24.8 + '@babel/types': 7.24.8 transitivePeerDependencies: - supports-color @@ -2854,7 +3191,7 @@ snapshots: '@babel/plugin-transform-modules-amd@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) + '@babel/helper-module-transforms': 7.24.8(@babel/core@7.24.7) '@babel/helper-plugin-utils': 7.24.8 transitivePeerDependencies: - supports-color @@ -2872,7 +3209,7 @@ snapshots: dependencies: '@babel/core': 7.24.7 '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) + '@babel/helper-module-transforms': 7.24.8(@babel/core@7.24.7) '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-validator-identifier': 7.24.7 transitivePeerDependencies: @@ -2881,7 +3218,7 @@ snapshots: '@babel/plugin-transform-modules-umd@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) + '@babel/helper-module-transforms': 7.24.8(@babel/core@7.24.7) '@babel/helper-plugin-utils': 7.24.8 transitivePeerDependencies: - supports-color @@ -3121,7 +3458,7 @@ snapshots: dependencies: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.24.8 - '@babel/types': 7.24.7 + '@babel/types': 7.24.8 esutils: 2.0.3 '@babel/regjsgen@0.8.0': {} @@ -3178,75 +3515,176 @@ snapshots: '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 + '@cloudflare/kv-asset-handler@0.3.4': + dependencies: + mime: 3.0.0 + + '@cloudflare/workerd-darwin-64@1.20240701.0': + optional: true + + '@cloudflare/workerd-darwin-arm64@1.20240701.0': + optional: true + + '@cloudflare/workerd-linux-64@1.20240701.0': + optional: true + + '@cloudflare/workerd-linux-arm64@1.20240701.0': + optional: true + + '@cloudflare/workerd-windows-64@1.20240701.0': + optional: true + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@esbuild-plugins/node-globals-polyfill@0.2.3(esbuild@0.17.19)': + dependencies: + esbuild: 0.17.19 + + '@esbuild-plugins/node-modules-polyfill@0.2.2(esbuild@0.17.19)': + dependencies: + esbuild: 0.17.19 + escape-string-regexp: 4.0.0 + rollup-plugin-node-polyfills: 0.2.1 + '@esbuild/aix-ppc64@0.21.5': optional: true + '@esbuild/android-arm64@0.17.19': + optional: true + '@esbuild/android-arm64@0.21.5': optional: true + '@esbuild/android-arm@0.17.19': + optional: true + '@esbuild/android-arm@0.21.5': optional: true + '@esbuild/android-x64@0.17.19': + optional: true + '@esbuild/android-x64@0.21.5': optional: true + '@esbuild/darwin-arm64@0.17.19': + optional: true + '@esbuild/darwin-arm64@0.21.5': optional: true + '@esbuild/darwin-x64@0.17.19': + optional: true + '@esbuild/darwin-x64@0.21.5': optional: true + '@esbuild/freebsd-arm64@0.17.19': + optional: true + '@esbuild/freebsd-arm64@0.21.5': optional: true + '@esbuild/freebsd-x64@0.17.19': + optional: true + '@esbuild/freebsd-x64@0.21.5': optional: true + '@esbuild/linux-arm64@0.17.19': + optional: true + '@esbuild/linux-arm64@0.21.5': optional: true + '@esbuild/linux-arm@0.17.19': + optional: true + '@esbuild/linux-arm@0.21.5': optional: true + '@esbuild/linux-ia32@0.17.19': + optional: true + '@esbuild/linux-ia32@0.21.5': optional: true + '@esbuild/linux-loong64@0.17.19': + optional: true + '@esbuild/linux-loong64@0.21.5': optional: true + '@esbuild/linux-mips64el@0.17.19': + optional: true + '@esbuild/linux-mips64el@0.21.5': optional: true + '@esbuild/linux-ppc64@0.17.19': + optional: true + '@esbuild/linux-ppc64@0.21.5': optional: true + '@esbuild/linux-riscv64@0.17.19': + optional: true + '@esbuild/linux-riscv64@0.21.5': optional: true + '@esbuild/linux-s390x@0.17.19': + optional: true + '@esbuild/linux-s390x@0.21.5': optional: true + '@esbuild/linux-x64@0.17.19': + optional: true + '@esbuild/linux-x64@0.21.5': optional: true + '@esbuild/netbsd-x64@0.17.19': + optional: true + '@esbuild/netbsd-x64@0.21.5': optional: true + '@esbuild/openbsd-x64@0.17.19': + optional: true + '@esbuild/openbsd-x64@0.21.5': optional: true + '@esbuild/sunos-x64@0.17.19': + optional: true + '@esbuild/sunos-x64@0.21.5': optional: true + '@esbuild/win32-arm64@0.17.19': + optional: true + '@esbuild/win32-arm64@0.21.5': optional: true + '@esbuild/win32-ia32@0.17.19': + optional: true + '@esbuild/win32-ia32@0.21.5': optional: true + '@esbuild/win32-x64@0.17.19': + optional: true + '@esbuild/win32-x64@0.21.5': optional: true + '@fastify/busboy@2.1.1': {} + '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 @@ -3269,6 +3707,11 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@nanostores/persistent@0.9.1(nanostores@0.9.5)': dependencies: nanostores: 0.9.5 @@ -3474,7 +3917,7 @@ snapshots: '@suid/types': 0.6.0(solid-js@1.8.18) solid-js: 1.8.18 - '@suid/vite-plugin@0.2.0(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2))': + '@suid/vite-plugin@0.2.0(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2))': dependencies: '@babel/generator': 7.24.7 '@babel/parser': 7.24.7 @@ -3482,7 +3925,7 @@ snapshots: '@babel/types': 7.24.7 '@types/babel__generator': 7.6.8 '@types/babel__traverse': 7.20.6 - vite: 5.3.2(lightningcss@1.25.1)(terser@5.31.2) + vite: 5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2) transitivePeerDependencies: - supports-color @@ -3522,10 +3965,22 @@ snapshots: '@types/hammerjs@2.0.45': {} + '@types/node-forge@1.3.11': + dependencies: + '@types/node': 20.14.10 + + '@types/node@20.14.10': + dependencies: + undici-types: 5.26.5 + '@types/resolve@1.20.2': {} '@types/trusted-types@2.0.7': {} + acorn-walk@8.3.3: + dependencies: + acorn: 8.12.0 + acorn@8.12.0: {} ajv@8.17.1: @@ -3564,6 +4019,10 @@ snapshots: is-array-buffer: 3.0.4 is-shared-array-buffer: 1.0.3 + as-table@1.0.55: + dependencies: + printable-characters: 1.0.42 + async@3.2.5: {} at-least-node@1.0.0: {} @@ -3614,6 +4073,8 @@ snapshots: binary-extensions@2.3.0: {} + blake3-wasm@2.1.5: {} + blurhash@2.0.5: {} brace-expansion@1.1.11: @@ -3661,6 +4122,13 @@ snapshots: tslib: 2.6.3 upper-case-first: 2.0.2 + capnp-ts@0.7.0: + dependencies: + debug: 4.3.5 + tslib: 2.6.3 + transitivePeerDependencies: + - supports-color + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 @@ -3719,6 +4187,8 @@ snapshots: concat-map@0.0.1: {} + consola@3.2.3: {} + constant-case@3.0.4: dependencies: no-case: 3.0.4 @@ -3727,6 +4197,8 @@ snapshots: convert-source-map@2.0.0: {} + cookie@0.5.0: {} + core-js-compat@3.37.1: dependencies: browserslist: 4.23.1 @@ -3740,6 +4212,8 @@ snapshots: csstype@3.1.3: {} + data-uri-to-buffer@2.0.2: {} + data-view-buffer@1.0.1: dependencies: call-bind: 1.0.7 @@ -3778,6 +4252,8 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 + defu@6.1.4: {} + detect-libc@1.0.3: {} dot-case@3.0.4: @@ -3862,6 +4338,31 @@ snapshots: is-date-object: 1.0.5 is-symbol: 1.0.4 + esbuild@0.17.19: + optionalDependencies: + '@esbuild/android-arm': 0.17.19 + '@esbuild/android-arm64': 0.17.19 + '@esbuild/android-x64': 0.17.19 + '@esbuild/darwin-arm64': 0.17.19 + '@esbuild/darwin-x64': 0.17.19 + '@esbuild/freebsd-arm64': 0.17.19 + '@esbuild/freebsd-x64': 0.17.19 + '@esbuild/linux-arm': 0.17.19 + '@esbuild/linux-arm64': 0.17.19 + '@esbuild/linux-ia32': 0.17.19 + '@esbuild/linux-loong64': 0.17.19 + '@esbuild/linux-mips64el': 0.17.19 + '@esbuild/linux-ppc64': 0.17.19 + '@esbuild/linux-riscv64': 0.17.19 + '@esbuild/linux-s390x': 0.17.19 + '@esbuild/linux-x64': 0.17.19 + '@esbuild/netbsd-x64': 0.17.19 + '@esbuild/openbsd-x64': 0.17.19 + '@esbuild/sunos-x64': 0.17.19 + '@esbuild/win32-arm64': 0.17.19 + '@esbuild/win32-ia32': 0.17.19 + '@esbuild/win32-x64': 0.17.19 + esbuild@0.21.5: optionalDependencies: '@esbuild/aix-ppc64': 0.21.5 @@ -3892,6 +4393,10 @@ snapshots: escape-string-regexp@1.0.5: {} + escape-string-regexp@4.0.0: {} + + estree-walker@0.6.1: {} + estree-walker@1.0.1: {} estree-walker@2.0.2: {} @@ -3900,6 +4405,8 @@ snapshots: events-to-async@2.0.1: {} + exit-hook@2.2.1: {} + fast-deep-equal@3.1.3: {} fast-glob@3.3.2: @@ -3965,6 +4472,11 @@ snapshots: get-own-enumerable-property-symbols@3.0.2: {} + get-source@2.0.12: + dependencies: + data-uri-to-buffer: 2.0.2 + source-map: 0.6.1 + get-symbol-description@1.0.2: dependencies: call-bind: 1.0.7 @@ -3975,6 +4487,8 @@ snapshots: dependencies: is-glob: 4.0.3 + glob-to-regexp@0.4.1: {} + glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -4246,6 +4760,27 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 + mime@3.0.0: {} + + miniflare@3.20240701.0: + dependencies: + '@cspotcode/source-map-support': 0.8.1 + acorn: 8.12.0 + acorn-walk: 8.3.3 + capnp-ts: 0.7.0 + exit-hook: 2.2.1 + glob-to-regexp: 0.4.1 + stoppable: 1.1.0 + undici: 5.28.4 + workerd: 1.20240701.0 + ws: 8.17.1 + youch: 3.3.3 + zod: 3.23.8 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -4256,6 +4791,8 @@ snapshots: ms@2.1.2: {} + mustache@4.2.0: {} + nanoid@3.3.7: {} nanostores@0.9.5: {} @@ -4265,6 +4802,10 @@ snapshots: lower-case: 2.0.2 tslib: 2.6.3 + node-fetch-native@1.6.4: {} + + node-forge@1.3.1: {} + node-releases@2.0.14: {} normalize-path@3.0.0: {} @@ -4303,6 +4844,10 @@ snapshots: path-parse@1.0.7: {} + path-to-regexp@6.2.2: {} + + pathe@1.1.2: {} + picocolors@1.0.1: {} picomatch@2.3.1: {} @@ -4321,6 +4866,8 @@ snapshots: pretty-bytes@6.1.1: {} + printable-characters@1.0.42: {} + punycode@2.3.1: {} queue-microtask@1.2.3: {} @@ -4367,6 +4914,8 @@ snapshots: require-from-string@2.0.2: {} + resolve.exports@2.0.2: {} + resolve@1.22.8: dependencies: is-core-module: 2.14.0 @@ -4375,6 +4924,20 @@ snapshots: reusify@1.0.4: {} + rollup-plugin-inject@3.0.2: + dependencies: + estree-walker: 0.6.1 + magic-string: 0.25.9 + rollup-pluginutils: 2.8.2 + + rollup-plugin-node-polyfills@0.2.1: + dependencies: + rollup-plugin-inject: 3.0.2 + + rollup-pluginutils@2.8.2: + dependencies: + estree-walker: 0.6.1 + rollup@2.79.1: optionalDependencies: fsevents: 2.3.3 @@ -4420,6 +4983,11 @@ snapshots: es-errors: 1.3.0 is-regex: 1.1.4 + selfsigned@2.4.1: + dependencies: + '@types/node-forge': 1.3.11 + node-forge: 1.3.1 + semver@6.3.1: {} sentence-case@3.0.4: @@ -4511,6 +5079,13 @@ snapshots: sourcemap-codec@1.4.8: {} + stacktracey@2.1.8: + dependencies: + as-table: 1.0.55 + get-source: 2.0.12 + + stoppable@1.1.0: {} + string.prototype.matchall@4.0.11: dependencies: call-bind: 1.0.7 @@ -4629,6 +5204,8 @@ snapshots: typescript@5.5.2: {} + ufo@1.5.3: {} + unbox-primitive@1.0.2: dependencies: call-bind: 1.0.7 @@ -4636,6 +5213,21 @@ snapshots: has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 + undici-types@5.26.5: {} + + undici@5.28.4: + dependencies: + '@fastify/busboy': 2.1.1 + + unenv-nightly@1.10.0-1717606461.a117952: + dependencies: + consola: 3.2.3 + defu: 6.1.4 + mime: 3.0.0 + node-fetch-native: 1.6.4 + pathe: 1.1.2 + ufo: 1.5.3 + unicode-canonical-property-names-ecmascript@2.0.0: {} unicode-match-property-ecmascript@2.0.0: @@ -4653,13 +5245,13 @@ snapshots: universalify@2.0.1: {} - unplugin-solid-styled@0.11.1(rollup@2.79.1)(solid-styled@0.11.1(solid-js@1.8.18))(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2)): + unplugin-solid-styled@0.11.1(rollup@2.79.1)(solid-styled@0.11.1(solid-js@1.8.18))(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)): dependencies: '@rollup/pluginutils': 5.1.0(rollup@2.79.1) solid-styled: 0.11.1(solid-js@1.8.18) unplugin: 1.11.0 optionalDependencies: - vite: 5.3.2(lightningcss@1.25.1)(terser@5.31.2) + vite: 5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2) transitivePeerDependencies: - rollup @@ -4688,26 +5280,26 @@ snapshots: validate-html-nesting@1.2.2: {} - vite-plugin-pwa@0.20.0(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.1.0): + vite-plugin-pwa@0.20.0(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.1.0): dependencies: debug: 4.3.5 fast-glob: 3.3.2 pretty-bytes: 6.1.1 - vite: 5.3.2(lightningcss@1.25.1)(terser@5.31.2) + vite: 5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2) workbox-build: 7.1.1(@types/babel__core@7.20.5) workbox-window: 7.1.0 transitivePeerDependencies: - supports-color - vite-plugin-solid-styled@0.11.1(rollup@2.79.1)(solid-styled@0.11.1(solid-js@1.8.18))(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2)): + vite-plugin-solid-styled@0.11.1(rollup@2.79.1)(solid-styled@0.11.1(solid-js@1.8.18))(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)): dependencies: solid-styled: 0.11.1(solid-js@1.8.18) - unplugin-solid-styled: 0.11.1(rollup@2.79.1)(solid-styled@0.11.1(solid-js@1.8.18))(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2)) - vite: 5.3.2(lightningcss@1.25.1)(terser@5.31.2) + unplugin-solid-styled: 0.11.1(rollup@2.79.1)(solid-styled@0.11.1(solid-js@1.8.18))(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)) + vite: 5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2) transitivePeerDependencies: - rollup - vite-plugin-solid@2.10.2(solid-js@1.8.18)(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2)): + vite-plugin-solid@2.10.2(solid-js@1.8.18)(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)): dependencies: '@babel/core': 7.24.7 '@types/babel__core': 7.20.5 @@ -4715,24 +5307,25 @@ snapshots: merge-anything: 5.1.7 solid-js: 1.8.18 solid-refresh: 0.6.3(solid-js@1.8.18) - vite: 5.3.2(lightningcss@1.25.1)(terser@5.31.2) - vitefu: 0.2.5(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2)) + vite: 5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2) + vitefu: 0.2.5(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)) transitivePeerDependencies: - supports-color - vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2): + vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2): dependencies: esbuild: 0.21.5 postcss: 8.4.39 rollup: 4.18.0 optionalDependencies: + '@types/node': 20.14.10 fsevents: 2.3.3 lightningcss: 1.25.1 terser: 5.31.2 - vitefu@0.2.5(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2)): + vitefu@0.2.5(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)): optionalDependencies: - vite: 5.3.2(lightningcss@1.25.1)(terser@5.31.2) + vite: 5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2) webidl-conversions@4.0.2: {} @@ -4875,8 +5468,51 @@ snapshots: '@types/trusted-types': 2.0.7 workbox-core: 7.1.0 + workerd@1.20240701.0: + optionalDependencies: + '@cloudflare/workerd-darwin-64': 1.20240701.0 + '@cloudflare/workerd-darwin-arm64': 1.20240701.0 + '@cloudflare/workerd-linux-64': 1.20240701.0 + '@cloudflare/workerd-linux-arm64': 1.20240701.0 + '@cloudflare/workerd-windows-64': 1.20240701.0 + + wrangler@3.64.0: + dependencies: + '@cloudflare/kv-asset-handler': 0.3.4 + '@esbuild-plugins/node-globals-polyfill': 0.2.3(esbuild@0.17.19) + '@esbuild-plugins/node-modules-polyfill': 0.2.2(esbuild@0.17.19) + blake3-wasm: 2.1.5 + chokidar: 3.6.0 + date-fns: 3.6.0 + esbuild: 0.17.19 + miniflare: 3.20240701.0 + nanoid: 3.3.7 + path-to-regexp: 6.2.2 + resolve: 1.22.8 + resolve.exports: 2.0.2 + selfsigned: 2.4.1 + source-map: 0.6.1 + unenv: unenv-nightly@1.10.0-1717606461.a117952 + xxhash-wasm: 1.0.2 + optionalDependencies: + fsevents: 2.3.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + wrappy@1.0.2: {} ws@8.17.1: {} + xxhash-wasm@1.0.2: {} + yallist@3.1.1: {} + + youch@3.3.3: + dependencies: + cookie: 0.5.0 + mustache: 4.2.0 + stacktracey: 2.1.8 + + zod@3.23.8: {} From ea0e5cdd9c441c2a1a5b0d63b7323aa5cae9ac81 Mon Sep 17 00:00:00 2001 From: thislight Date: Sun, 14 Jul 2024 20:58:55 +0800 Subject: [PATCH 004/300] ci: added depoly --- .forgejo/workflows/depoly.yml | 36 ++ package.json | 3 +- pnpm-lock.yaml | 700 ++++++++++++++++++++++++++++++++-- 3 files changed, 706 insertions(+), 33 deletions(-) create mode 100644 .forgejo/workflows/depoly.yml diff --git a/.forgejo/workflows/depoly.yml b/.forgejo/workflows/depoly.yml new file mode 100644 index 0000000..bf3bfc3 --- /dev/null +++ b/.forgejo/workflows/depoly.yml @@ -0,0 +1,36 @@ + +on: ['push'] + +jobs: + depoly: + runs-on: linux + container: + image: code.lightstands.xyz/standcoded/fedora:40 + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup pnpm + run: | + corepack enable + corepack prepare pnpm@latest-9 --activate + pnpm config set store-dir /tmp/pnpm-store + + - name: Cache Dependencies + id: dependencies-cache + uses: actions/cache@v4 + with: + path: /tmp/pnpm-store + key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }} + + - name: Install Dependencies + run: pnpm i + + - name: Depoly to Cloudflare + uses: https://github.com/cloudflare/wrangler-action@v3 + with: + apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} + accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} + command: pages deploy --project-name=tututheapp dist + if: "env.GITHUB_REF_NAME == 'master'" + diff --git a/package.json b/package.json index 466596f..a1ec53e 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,8 @@ "vite": "^5.3.2", "vite-plugin-pwa": "^0.20.0", "vite-plugin-solid": "^2.10.2", - "vite-plugin-solid-styled": "^0.11.1" + "vite-plugin-solid-styled": "^0.11.1", + "wrangler": "^3.64.0" }, "dependencies": { "@nanostores/persistent": "^0.9.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 31b4c61..acc4341 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -53,7 +53,7 @@ importers: devDependencies: '@suid/vite-plugin': specifier: ^0.2.0 - version: 0.2.0(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2)) + version: 0.2.0(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)) '@types/hammerjs': specifier: ^2.0.45 version: 2.0.45 @@ -68,16 +68,19 @@ importers: version: 5.5.2 vite: specifier: ^5.3.2 - version: 5.3.2(lightningcss@1.25.1)(terser@5.31.2) + version: 5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2) vite-plugin-pwa: specifier: ^0.20.0 - version: 0.20.0(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.1.0) + version: 0.20.0(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.1.0) vite-plugin-solid: specifier: ^2.10.2 - version: 2.10.2(solid-js@1.8.18)(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2)) + version: 2.10.2(solid-js@1.8.18)(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)) vite-plugin-solid-styled: specifier: ^0.11.1 - version: 0.11.1(rollup@2.79.1)(solid-styled@0.11.1(solid-js@1.8.18))(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2)) + version: 0.11.1(rollup@2.79.1)(solid-styled@0.11.1(solid-js@1.8.18))(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)) + wrangler: + specifier: ^3.64.0 + version: 3.64.0 packages: @@ -720,144 +723,328 @@ packages: resolution: {integrity: sha512-SkSBEHwwJRU52QEVZBmMBnE5Ux2/6WU1grdYyOhpbCNxbmJrDuDCphBzKZSO3taf0zztp+qkWlymE5tVL5l0TA==} engines: {node: '>=6.9.0'} + '@cloudflare/kv-asset-handler@0.3.4': + resolution: {integrity: sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==} + engines: {node: '>=16.13'} + + '@cloudflare/workerd-darwin-64@1.20240701.0': + resolution: {integrity: sha512-XAZa4ZP+qyTn6JQQACCPH09hGZXP2lTnWKkmg5mPwT8EyRzCKLkczAf98vPP5bq7JZD/zORdFWRY0dOTap8zTQ==} + engines: {node: '>=16'} + cpu: [x64] + os: [darwin] + + '@cloudflare/workerd-darwin-arm64@1.20240701.0': + resolution: {integrity: sha512-w80ZVAgfH4UwTz7fXZtk7KmS2FzlXniuQm4ku4+cIgRTilBAuKqjpOjwUCbx5g13Gqcm9NuiHce+IDGtobRTIQ==} + engines: {node: '>=16'} + cpu: [arm64] + os: [darwin] + + '@cloudflare/workerd-linux-64@1.20240701.0': + resolution: {integrity: sha512-UWLr/Anxwwe/25nGv451MNd2jhREmPt/ws17DJJqTLAx6JxwGWA15MeitAIzl0dbxRFAJa+0+R8ag2WR3F/D6g==} + engines: {node: '>=16'} + cpu: [x64] + os: [linux] + + '@cloudflare/workerd-linux-arm64@1.20240701.0': + resolution: {integrity: sha512-3kCnF9kYgov1ggpuWbgpXt4stPOIYtVmPCa7MO2xhhA0TWP6JDUHRUOsnmIgKrvDjXuXqlK16cdg3v+EWsaPJg==} + engines: {node: '>=16'} + cpu: [arm64] + os: [linux] + + '@cloudflare/workerd-windows-64@1.20240701.0': + resolution: {integrity: sha512-6IPGITRAeS67j3BH1rN4iwYWDt47SqJG7KlZJ5bB4UaNAia4mvMBSy/p2p4vA89bbXoDRjMtEvRu7Robu6O7hQ==} + engines: {node: '>=16'} + cpu: [x64] + os: [win32] + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@esbuild-plugins/node-globals-polyfill@0.2.3': + resolution: {integrity: sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==} + peerDependencies: + esbuild: '*' + + '@esbuild-plugins/node-modules-polyfill@0.2.2': + resolution: {integrity: sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==} + peerDependencies: + esbuild: '*' + '@esbuild/aix-ppc64@0.21.5': resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} engines: {node: '>=12'} cpu: [ppc64] os: [aix] + '@esbuild/android-arm64@0.17.19': + resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm64@0.21.5': resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} engines: {node: '>=12'} cpu: [arm64] os: [android] + '@esbuild/android-arm@0.17.19': + resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + '@esbuild/android-arm@0.21.5': resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} engines: {node: '>=12'} cpu: [arm] os: [android] + '@esbuild/android-x64@0.17.19': + resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + '@esbuild/android-x64@0.21.5': resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} engines: {node: '>=12'} cpu: [x64] os: [android] + '@esbuild/darwin-arm64@0.17.19': + resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-arm64@0.21.5': resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] + '@esbuild/darwin-x64@0.17.19': + resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + '@esbuild/darwin-x64@0.21.5': resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} engines: {node: '>=12'} cpu: [x64] os: [darwin] + '@esbuild/freebsd-arm64@0.17.19': + resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-arm64@0.21.5': resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-x64@0.17.19': + resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + '@esbuild/freebsd-x64@0.21.5': resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] + '@esbuild/linux-arm64@0.17.19': + resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm64@0.21.5': resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} engines: {node: '>=12'} cpu: [arm64] os: [linux] + '@esbuild/linux-arm@0.17.19': + resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + '@esbuild/linux-arm@0.21.5': resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} engines: {node: '>=12'} cpu: [arm] os: [linux] + '@esbuild/linux-ia32@0.17.19': + resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-ia32@0.21.5': resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} engines: {node: '>=12'} cpu: [ia32] os: [linux] + '@esbuild/linux-loong64@0.17.19': + resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-loong64@0.21.5': resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] + '@esbuild/linux-mips64el@0.17.19': + resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-mips64el@0.21.5': resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] + '@esbuild/linux-ppc64@0.17.19': + resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-ppc64@0.21.5': resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] + '@esbuild/linux-riscv64@0.17.19': + resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-riscv64@0.21.5': resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] + '@esbuild/linux-s390x@0.17.19': + resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-s390x@0.21.5': resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} engines: {node: '>=12'} cpu: [s390x] os: [linux] + '@esbuild/linux-x64@0.17.19': + resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + '@esbuild/linux-x64@0.21.5': resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} engines: {node: '>=12'} cpu: [x64] os: [linux] + '@esbuild/netbsd-x64@0.17.19': + resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + '@esbuild/netbsd-x64@0.21.5': resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] + '@esbuild/openbsd-x64@0.17.19': + resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + '@esbuild/openbsd-x64@0.21.5': resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] + '@esbuild/sunos-x64@0.17.19': + resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + '@esbuild/sunos-x64@0.21.5': resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} engines: {node: '>=12'} cpu: [x64] os: [sunos] + '@esbuild/win32-arm64@0.17.19': + resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-arm64@0.21.5': resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} engines: {node: '>=12'} cpu: [arm64] os: [win32] + '@esbuild/win32-ia32@0.17.19': + resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-ia32@0.21.5': resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} engines: {node: '>=12'} cpu: [ia32] os: [win32] + '@esbuild/win32-x64@0.17.19': + resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + '@esbuild/win32-x64@0.21.5': resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} engines: {node: '>=12'} cpu: [x64] os: [win32] + '@fastify/busboy@2.1.1': + resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} + engines: {node: '>=14'} + '@jridgewell/gen-mapping@0.3.5': resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} @@ -879,6 +1066,9 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@nanostores/persistent@0.9.1': resolution: {integrity: sha512-ow57Hxm5VMaI5GHET/cVk8hX/iKMmbhcGrB9owfN8p8OHiiJgUlYxe1giacwlAALJXAh2t8bxXh42hHb64BCEA==} engines: {node: ^16.0.0 || ^18.0.0 || >=20.0.0} @@ -1135,12 +1325,22 @@ packages: '@types/hammerjs@2.0.45': resolution: {integrity: sha512-qkcUlZmX6c4J8q45taBKTL3p+LbITgyx7qhlPYOdOHZB7B31K0mXbP5YA7i7SgDeEGuI9MnumiKPEMrxg8j3KQ==} + '@types/node-forge@1.3.11': + resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} + + '@types/node@20.14.10': + resolution: {integrity: sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==} + '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + acorn-walk@8.3.3: + resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} + engines: {node: '>=0.4.0'} + acorn@8.12.0: resolution: {integrity: sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==} engines: {node: '>=0.4.0'} @@ -1169,6 +1369,9 @@ packages: resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} engines: {node: '>= 0.4'} + as-table@1.0.55: + resolution: {integrity: sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==} + async@3.2.5: resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} @@ -1212,6 +1415,9 @@ packages: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} + blake3-wasm@2.1.5: + resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} + blurhash@2.0.5: resolution: {integrity: sha512-cRygWd7kGBQO3VEhPiTgq4Wc43ctsM+o46urrmPOiuAe+07fzlSB9OJVdpgDL0jPqXUVQ9ht7aq7kxOeJHRK+w==} @@ -1250,6 +1456,9 @@ packages: capital-case@1.0.4: resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} + capnp-ts@0.7.0: + resolution: {integrity: sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==} + chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -1292,12 +1501,20 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + consola@3.2.3: + resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} + engines: {node: ^14.18.0 || >=16.10.0} + constant-case@3.0.4: resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + cookie@0.5.0: + resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + engines: {node: '>= 0.6'} + core-js-compat@3.37.1: resolution: {integrity: sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==} @@ -1312,6 +1529,9 @@ packages: csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + data-uri-to-buffer@2.0.2: + resolution: {integrity: sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==} + data-view-buffer@1.0.1: resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} engines: {node: '>= 0.4'} @@ -1348,6 +1568,9 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} + defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + detect-libc@1.0.3: resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} engines: {node: '>=0.10'} @@ -1388,6 +1611,11 @@ packages: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} + esbuild@0.17.19: + resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} + engines: {node: '>=12'} + hasBin: true + esbuild@0.21.5: resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} engines: {node: '>=12'} @@ -1401,6 +1629,13 @@ packages: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + estree-walker@0.6.1: + resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==} + estree-walker@1.0.1: resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} @@ -1414,6 +1649,10 @@ packages: events-to-async@2.0.1: resolution: {integrity: sha512-RtnLYrMbXp4JkZIoZu+3VTqV21bNVBlJBZ4NmtwvMNqSE3qouhxv2gvLE4JJDaQc54ioPkrX74V6x+hp/hqjkQ==} + exit-hook@2.2.1: + resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==} + engines: {node: '>=6'} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -1473,6 +1712,9 @@ packages: get-own-enumerable-property-symbols@3.0.2: resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} + get-source@2.0.12: + resolution: {integrity: sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==} + get-symbol-description@1.0.2: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} @@ -1481,6 +1723,9 @@ packages: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} + glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported @@ -1791,6 +2036,16 @@ packages: resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} engines: {node: '>=8.6'} + mime@3.0.0: + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} + hasBin: true + + miniflare@3.20240701.0: + resolution: {integrity: sha512-m9+I+7JNyqDGftCMKp9cK9pCZkK72hAL2mM9IWwhct+ZmucLBA8Uu6+rHQqA5iod86cpwOkrB2PrPA3wx9YNgw==} + engines: {node: '>=16.13'} + hasBin: true + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -1801,6 +2056,10 @@ packages: ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + mustache@4.2.0: + resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} + hasBin: true + nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -1813,6 +2072,13 @@ packages: no-case@3.0.4: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + node-fetch-native@1.6.4: + resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==} + + node-forge@1.3.1: + resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + engines: {node: '>= 6.13.0'} + node-releases@2.0.14: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} @@ -1851,6 +2117,12 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + path-to-regexp@6.2.2: + resolution: {integrity: sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==} + + pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + picocolors@1.0.1: resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} @@ -1879,6 +2151,9 @@ packages: resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} engines: {node: ^14.13.1 || >=16.0.0} + printable-characters@1.0.42: + resolution: {integrity: sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -1922,6 +2197,10 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} + resolve.exports@2.0.2: + resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} + engines: {node: '>=10'} + resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true @@ -1930,6 +2209,16 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + rollup-plugin-inject@3.0.2: + resolution: {integrity: sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==} + deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject. + + rollup-plugin-node-polyfills@0.2.1: + resolution: {integrity: sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==} + + rollup-pluginutils@2.8.2: + resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} + rollup@2.79.1: resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} engines: {node: '>=10.0.0'} @@ -1954,6 +2243,10 @@ packages: resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} engines: {node: '>= 0.4'} + selfsigned@2.4.1: + resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} + engines: {node: '>=10'} + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -2025,6 +2318,13 @@ packages: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} deprecated: Please use @jridgewell/sourcemap-codec instead + stacktracey@2.1.8: + resolution: {integrity: sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==} + + stoppable@1.1.0: + resolution: {integrity: sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==} + engines: {node: '>=4', npm: '>=6'} + string.prototype.matchall@4.0.11: resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} engines: {node: '>= 0.4'} @@ -2116,9 +2416,22 @@ packages: engines: {node: '>=14.17'} hasBin: true + ufo@1.5.3: + resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} + unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + undici@5.28.4: + resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} + engines: {node: '>=14.0'} + + unenv-nightly@1.10.0-1717606461.a117952: + resolution: {integrity: sha512-u3TfBX02WzbHTpaEfWEKwDijDSFAHcgXkayUZ+MVDrjhLFvgAJzFGTSTmwlEhwWi2exyRQey23ah9wELMM6etg==} + unicode-canonical-property-names-ecmascript@2.0.0: resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} engines: {node: '>=4'} @@ -2310,6 +2623,21 @@ packages: workbox-window@7.1.0: resolution: {integrity: sha512-ZHeROyqR+AS5UPzholQRDttLFqGMwP0Np8MKWAdyxsDETxq3qOAyXvqessc3GniohG6e0mAqSQyKOHmT8zPF7g==} + workerd@1.20240701.0: + resolution: {integrity: sha512-qSgNVqauqzNCij9MaJLF2c2ko3AnFioVSIxMSryGbRK+LvtGr9BKBt6JOxCb24DoJASoJDx3pe3DJHBVydUiBg==} + engines: {node: '>=16'} + hasBin: true + + wrangler@3.64.0: + resolution: {integrity: sha512-q2VQADJXzuOkXs9KIfPSx7UCZHBoxsqSNbJDLkc2pHpGmsyNQXsJRqjMoTg/Kls7O3K9A7EGnzGr7+Io2vE6AQ==} + engines: {node: '>=16.17.0'} + hasBin: true + peerDependencies: + '@cloudflare/workers-types': ^4.20240620.0 + peerDependenciesMeta: + '@cloudflare/workers-types': + optional: true + wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -2325,9 +2653,18 @@ packages: utf-8-validate: optional: true + xxhash-wasm@1.0.2: + resolution: {integrity: sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A==} + yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + youch@3.3.3: + resolution: {integrity: sha512-qSFXUk3UZBLfggAW3dJKg0BMblG5biqSF8M34E06o5CSsZtH92u9Hqmj2RzGiHDi64fhe83+4tENFP2DB6t6ZA==} + + zod@3.23.8: + resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} + snapshots: '@ampproject/remapping@2.3.0': @@ -2387,12 +2724,12 @@ snapshots: '@babel/helper-annotate-as-pure@7.24.7': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.24.8 '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7': dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/traverse': 7.24.8 + '@babel/types': 7.24.8 transitivePeerDependencies: - supports-color @@ -2500,7 +2837,7 @@ snapshots: '@babel/helper-optimise-call-expression@7.24.7': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.24.8 '@babel/helper-plugin-utils@7.24.7': {} @@ -2533,8 +2870,8 @@ snapshots: '@babel/helper-skip-transparent-expression-wrappers@7.24.7': dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/traverse': 7.24.8 + '@babel/types': 7.24.8 transitivePeerDependencies: - supports-color @@ -2556,8 +2893,8 @@ snapshots: dependencies: '@babel/helper-function-name': 7.24.7 '@babel/template': 7.24.7 - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/traverse': 7.24.8 + '@babel/types': 7.24.8 transitivePeerDependencies: - supports-color @@ -2854,7 +3191,7 @@ snapshots: '@babel/plugin-transform-modules-amd@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) + '@babel/helper-module-transforms': 7.24.8(@babel/core@7.24.7) '@babel/helper-plugin-utils': 7.24.8 transitivePeerDependencies: - supports-color @@ -2872,7 +3209,7 @@ snapshots: dependencies: '@babel/core': 7.24.7 '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) + '@babel/helper-module-transforms': 7.24.8(@babel/core@7.24.7) '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-validator-identifier': 7.24.7 transitivePeerDependencies: @@ -2881,7 +3218,7 @@ snapshots: '@babel/plugin-transform-modules-umd@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) + '@babel/helper-module-transforms': 7.24.8(@babel/core@7.24.7) '@babel/helper-plugin-utils': 7.24.8 transitivePeerDependencies: - supports-color @@ -3121,7 +3458,7 @@ snapshots: dependencies: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.24.8 - '@babel/types': 7.24.7 + '@babel/types': 7.24.8 esutils: 2.0.3 '@babel/regjsgen@0.8.0': {} @@ -3178,75 +3515,176 @@ snapshots: '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 + '@cloudflare/kv-asset-handler@0.3.4': + dependencies: + mime: 3.0.0 + + '@cloudflare/workerd-darwin-64@1.20240701.0': + optional: true + + '@cloudflare/workerd-darwin-arm64@1.20240701.0': + optional: true + + '@cloudflare/workerd-linux-64@1.20240701.0': + optional: true + + '@cloudflare/workerd-linux-arm64@1.20240701.0': + optional: true + + '@cloudflare/workerd-windows-64@1.20240701.0': + optional: true + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@esbuild-plugins/node-globals-polyfill@0.2.3(esbuild@0.17.19)': + dependencies: + esbuild: 0.17.19 + + '@esbuild-plugins/node-modules-polyfill@0.2.2(esbuild@0.17.19)': + dependencies: + esbuild: 0.17.19 + escape-string-regexp: 4.0.0 + rollup-plugin-node-polyfills: 0.2.1 + '@esbuild/aix-ppc64@0.21.5': optional: true + '@esbuild/android-arm64@0.17.19': + optional: true + '@esbuild/android-arm64@0.21.5': optional: true + '@esbuild/android-arm@0.17.19': + optional: true + '@esbuild/android-arm@0.21.5': optional: true + '@esbuild/android-x64@0.17.19': + optional: true + '@esbuild/android-x64@0.21.5': optional: true + '@esbuild/darwin-arm64@0.17.19': + optional: true + '@esbuild/darwin-arm64@0.21.5': optional: true + '@esbuild/darwin-x64@0.17.19': + optional: true + '@esbuild/darwin-x64@0.21.5': optional: true + '@esbuild/freebsd-arm64@0.17.19': + optional: true + '@esbuild/freebsd-arm64@0.21.5': optional: true + '@esbuild/freebsd-x64@0.17.19': + optional: true + '@esbuild/freebsd-x64@0.21.5': optional: true + '@esbuild/linux-arm64@0.17.19': + optional: true + '@esbuild/linux-arm64@0.21.5': optional: true + '@esbuild/linux-arm@0.17.19': + optional: true + '@esbuild/linux-arm@0.21.5': optional: true + '@esbuild/linux-ia32@0.17.19': + optional: true + '@esbuild/linux-ia32@0.21.5': optional: true + '@esbuild/linux-loong64@0.17.19': + optional: true + '@esbuild/linux-loong64@0.21.5': optional: true + '@esbuild/linux-mips64el@0.17.19': + optional: true + '@esbuild/linux-mips64el@0.21.5': optional: true + '@esbuild/linux-ppc64@0.17.19': + optional: true + '@esbuild/linux-ppc64@0.21.5': optional: true + '@esbuild/linux-riscv64@0.17.19': + optional: true + '@esbuild/linux-riscv64@0.21.5': optional: true + '@esbuild/linux-s390x@0.17.19': + optional: true + '@esbuild/linux-s390x@0.21.5': optional: true + '@esbuild/linux-x64@0.17.19': + optional: true + '@esbuild/linux-x64@0.21.5': optional: true + '@esbuild/netbsd-x64@0.17.19': + optional: true + '@esbuild/netbsd-x64@0.21.5': optional: true + '@esbuild/openbsd-x64@0.17.19': + optional: true + '@esbuild/openbsd-x64@0.21.5': optional: true + '@esbuild/sunos-x64@0.17.19': + optional: true + '@esbuild/sunos-x64@0.21.5': optional: true + '@esbuild/win32-arm64@0.17.19': + optional: true + '@esbuild/win32-arm64@0.21.5': optional: true + '@esbuild/win32-ia32@0.17.19': + optional: true + '@esbuild/win32-ia32@0.21.5': optional: true + '@esbuild/win32-x64@0.17.19': + optional: true + '@esbuild/win32-x64@0.21.5': optional: true + '@fastify/busboy@2.1.1': {} + '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 @@ -3269,6 +3707,11 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@nanostores/persistent@0.9.1(nanostores@0.9.5)': dependencies: nanostores: 0.9.5 @@ -3474,7 +3917,7 @@ snapshots: '@suid/types': 0.6.0(solid-js@1.8.18) solid-js: 1.8.18 - '@suid/vite-plugin@0.2.0(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2))': + '@suid/vite-plugin@0.2.0(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2))': dependencies: '@babel/generator': 7.24.7 '@babel/parser': 7.24.7 @@ -3482,7 +3925,7 @@ snapshots: '@babel/types': 7.24.7 '@types/babel__generator': 7.6.8 '@types/babel__traverse': 7.20.6 - vite: 5.3.2(lightningcss@1.25.1)(terser@5.31.2) + vite: 5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2) transitivePeerDependencies: - supports-color @@ -3522,10 +3965,22 @@ snapshots: '@types/hammerjs@2.0.45': {} + '@types/node-forge@1.3.11': + dependencies: + '@types/node': 20.14.10 + + '@types/node@20.14.10': + dependencies: + undici-types: 5.26.5 + '@types/resolve@1.20.2': {} '@types/trusted-types@2.0.7': {} + acorn-walk@8.3.3: + dependencies: + acorn: 8.12.0 + acorn@8.12.0: {} ajv@8.17.1: @@ -3564,6 +4019,10 @@ snapshots: is-array-buffer: 3.0.4 is-shared-array-buffer: 1.0.3 + as-table@1.0.55: + dependencies: + printable-characters: 1.0.42 + async@3.2.5: {} at-least-node@1.0.0: {} @@ -3614,6 +4073,8 @@ snapshots: binary-extensions@2.3.0: {} + blake3-wasm@2.1.5: {} + blurhash@2.0.5: {} brace-expansion@1.1.11: @@ -3661,6 +4122,13 @@ snapshots: tslib: 2.6.3 upper-case-first: 2.0.2 + capnp-ts@0.7.0: + dependencies: + debug: 4.3.5 + tslib: 2.6.3 + transitivePeerDependencies: + - supports-color + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 @@ -3719,6 +4187,8 @@ snapshots: concat-map@0.0.1: {} + consola@3.2.3: {} + constant-case@3.0.4: dependencies: no-case: 3.0.4 @@ -3727,6 +4197,8 @@ snapshots: convert-source-map@2.0.0: {} + cookie@0.5.0: {} + core-js-compat@3.37.1: dependencies: browserslist: 4.23.1 @@ -3740,6 +4212,8 @@ snapshots: csstype@3.1.3: {} + data-uri-to-buffer@2.0.2: {} + data-view-buffer@1.0.1: dependencies: call-bind: 1.0.7 @@ -3778,6 +4252,8 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 + defu@6.1.4: {} + detect-libc@1.0.3: {} dot-case@3.0.4: @@ -3862,6 +4338,31 @@ snapshots: is-date-object: 1.0.5 is-symbol: 1.0.4 + esbuild@0.17.19: + optionalDependencies: + '@esbuild/android-arm': 0.17.19 + '@esbuild/android-arm64': 0.17.19 + '@esbuild/android-x64': 0.17.19 + '@esbuild/darwin-arm64': 0.17.19 + '@esbuild/darwin-x64': 0.17.19 + '@esbuild/freebsd-arm64': 0.17.19 + '@esbuild/freebsd-x64': 0.17.19 + '@esbuild/linux-arm': 0.17.19 + '@esbuild/linux-arm64': 0.17.19 + '@esbuild/linux-ia32': 0.17.19 + '@esbuild/linux-loong64': 0.17.19 + '@esbuild/linux-mips64el': 0.17.19 + '@esbuild/linux-ppc64': 0.17.19 + '@esbuild/linux-riscv64': 0.17.19 + '@esbuild/linux-s390x': 0.17.19 + '@esbuild/linux-x64': 0.17.19 + '@esbuild/netbsd-x64': 0.17.19 + '@esbuild/openbsd-x64': 0.17.19 + '@esbuild/sunos-x64': 0.17.19 + '@esbuild/win32-arm64': 0.17.19 + '@esbuild/win32-ia32': 0.17.19 + '@esbuild/win32-x64': 0.17.19 + esbuild@0.21.5: optionalDependencies: '@esbuild/aix-ppc64': 0.21.5 @@ -3892,6 +4393,10 @@ snapshots: escape-string-regexp@1.0.5: {} + escape-string-regexp@4.0.0: {} + + estree-walker@0.6.1: {} + estree-walker@1.0.1: {} estree-walker@2.0.2: {} @@ -3900,6 +4405,8 @@ snapshots: events-to-async@2.0.1: {} + exit-hook@2.2.1: {} + fast-deep-equal@3.1.3: {} fast-glob@3.3.2: @@ -3965,6 +4472,11 @@ snapshots: get-own-enumerable-property-symbols@3.0.2: {} + get-source@2.0.12: + dependencies: + data-uri-to-buffer: 2.0.2 + source-map: 0.6.1 + get-symbol-description@1.0.2: dependencies: call-bind: 1.0.7 @@ -3975,6 +4487,8 @@ snapshots: dependencies: is-glob: 4.0.3 + glob-to-regexp@0.4.1: {} + glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -4246,6 +4760,27 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 + mime@3.0.0: {} + + miniflare@3.20240701.0: + dependencies: + '@cspotcode/source-map-support': 0.8.1 + acorn: 8.12.0 + acorn-walk: 8.3.3 + capnp-ts: 0.7.0 + exit-hook: 2.2.1 + glob-to-regexp: 0.4.1 + stoppable: 1.1.0 + undici: 5.28.4 + workerd: 1.20240701.0 + ws: 8.17.1 + youch: 3.3.3 + zod: 3.23.8 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -4256,6 +4791,8 @@ snapshots: ms@2.1.2: {} + mustache@4.2.0: {} + nanoid@3.3.7: {} nanostores@0.9.5: {} @@ -4265,6 +4802,10 @@ snapshots: lower-case: 2.0.2 tslib: 2.6.3 + node-fetch-native@1.6.4: {} + + node-forge@1.3.1: {} + node-releases@2.0.14: {} normalize-path@3.0.0: {} @@ -4303,6 +4844,10 @@ snapshots: path-parse@1.0.7: {} + path-to-regexp@6.2.2: {} + + pathe@1.1.2: {} + picocolors@1.0.1: {} picomatch@2.3.1: {} @@ -4321,6 +4866,8 @@ snapshots: pretty-bytes@6.1.1: {} + printable-characters@1.0.42: {} + punycode@2.3.1: {} queue-microtask@1.2.3: {} @@ -4367,6 +4914,8 @@ snapshots: require-from-string@2.0.2: {} + resolve.exports@2.0.2: {} + resolve@1.22.8: dependencies: is-core-module: 2.14.0 @@ -4375,6 +4924,20 @@ snapshots: reusify@1.0.4: {} + rollup-plugin-inject@3.0.2: + dependencies: + estree-walker: 0.6.1 + magic-string: 0.25.9 + rollup-pluginutils: 2.8.2 + + rollup-plugin-node-polyfills@0.2.1: + dependencies: + rollup-plugin-inject: 3.0.2 + + rollup-pluginutils@2.8.2: + dependencies: + estree-walker: 0.6.1 + rollup@2.79.1: optionalDependencies: fsevents: 2.3.3 @@ -4420,6 +4983,11 @@ snapshots: es-errors: 1.3.0 is-regex: 1.1.4 + selfsigned@2.4.1: + dependencies: + '@types/node-forge': 1.3.11 + node-forge: 1.3.1 + semver@6.3.1: {} sentence-case@3.0.4: @@ -4511,6 +5079,13 @@ snapshots: sourcemap-codec@1.4.8: {} + stacktracey@2.1.8: + dependencies: + as-table: 1.0.55 + get-source: 2.0.12 + + stoppable@1.1.0: {} + string.prototype.matchall@4.0.11: dependencies: call-bind: 1.0.7 @@ -4629,6 +5204,8 @@ snapshots: typescript@5.5.2: {} + ufo@1.5.3: {} + unbox-primitive@1.0.2: dependencies: call-bind: 1.0.7 @@ -4636,6 +5213,21 @@ snapshots: has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 + undici-types@5.26.5: {} + + undici@5.28.4: + dependencies: + '@fastify/busboy': 2.1.1 + + unenv-nightly@1.10.0-1717606461.a117952: + dependencies: + consola: 3.2.3 + defu: 6.1.4 + mime: 3.0.0 + node-fetch-native: 1.6.4 + pathe: 1.1.2 + ufo: 1.5.3 + unicode-canonical-property-names-ecmascript@2.0.0: {} unicode-match-property-ecmascript@2.0.0: @@ -4653,13 +5245,13 @@ snapshots: universalify@2.0.1: {} - unplugin-solid-styled@0.11.1(rollup@2.79.1)(solid-styled@0.11.1(solid-js@1.8.18))(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2)): + unplugin-solid-styled@0.11.1(rollup@2.79.1)(solid-styled@0.11.1(solid-js@1.8.18))(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)): dependencies: '@rollup/pluginutils': 5.1.0(rollup@2.79.1) solid-styled: 0.11.1(solid-js@1.8.18) unplugin: 1.11.0 optionalDependencies: - vite: 5.3.2(lightningcss@1.25.1)(terser@5.31.2) + vite: 5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2) transitivePeerDependencies: - rollup @@ -4688,26 +5280,26 @@ snapshots: validate-html-nesting@1.2.2: {} - vite-plugin-pwa@0.20.0(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.1.0): + vite-plugin-pwa@0.20.0(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.1.0): dependencies: debug: 4.3.5 fast-glob: 3.3.2 pretty-bytes: 6.1.1 - vite: 5.3.2(lightningcss@1.25.1)(terser@5.31.2) + vite: 5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2) workbox-build: 7.1.1(@types/babel__core@7.20.5) workbox-window: 7.1.0 transitivePeerDependencies: - supports-color - vite-plugin-solid-styled@0.11.1(rollup@2.79.1)(solid-styled@0.11.1(solid-js@1.8.18))(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2)): + vite-plugin-solid-styled@0.11.1(rollup@2.79.1)(solid-styled@0.11.1(solid-js@1.8.18))(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)): dependencies: solid-styled: 0.11.1(solid-js@1.8.18) - unplugin-solid-styled: 0.11.1(rollup@2.79.1)(solid-styled@0.11.1(solid-js@1.8.18))(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2)) - vite: 5.3.2(lightningcss@1.25.1)(terser@5.31.2) + unplugin-solid-styled: 0.11.1(rollup@2.79.1)(solid-styled@0.11.1(solid-js@1.8.18))(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)) + vite: 5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2) transitivePeerDependencies: - rollup - vite-plugin-solid@2.10.2(solid-js@1.8.18)(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2)): + vite-plugin-solid@2.10.2(solid-js@1.8.18)(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)): dependencies: '@babel/core': 7.24.7 '@types/babel__core': 7.20.5 @@ -4715,24 +5307,25 @@ snapshots: merge-anything: 5.1.7 solid-js: 1.8.18 solid-refresh: 0.6.3(solid-js@1.8.18) - vite: 5.3.2(lightningcss@1.25.1)(terser@5.31.2) - vitefu: 0.2.5(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2)) + vite: 5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2) + vitefu: 0.2.5(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)) transitivePeerDependencies: - supports-color - vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2): + vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2): dependencies: esbuild: 0.21.5 postcss: 8.4.39 rollup: 4.18.0 optionalDependencies: + '@types/node': 20.14.10 fsevents: 2.3.3 lightningcss: 1.25.1 terser: 5.31.2 - vitefu@0.2.5(vite@5.3.2(lightningcss@1.25.1)(terser@5.31.2)): + vitefu@0.2.5(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)): optionalDependencies: - vite: 5.3.2(lightningcss@1.25.1)(terser@5.31.2) + vite: 5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2) webidl-conversions@4.0.2: {} @@ -4875,8 +5468,51 @@ snapshots: '@types/trusted-types': 2.0.7 workbox-core: 7.1.0 + workerd@1.20240701.0: + optionalDependencies: + '@cloudflare/workerd-darwin-64': 1.20240701.0 + '@cloudflare/workerd-darwin-arm64': 1.20240701.0 + '@cloudflare/workerd-linux-64': 1.20240701.0 + '@cloudflare/workerd-linux-arm64': 1.20240701.0 + '@cloudflare/workerd-windows-64': 1.20240701.0 + + wrangler@3.64.0: + dependencies: + '@cloudflare/kv-asset-handler': 0.3.4 + '@esbuild-plugins/node-globals-polyfill': 0.2.3(esbuild@0.17.19) + '@esbuild-plugins/node-modules-polyfill': 0.2.2(esbuild@0.17.19) + blake3-wasm: 2.1.5 + chokidar: 3.6.0 + date-fns: 3.6.0 + esbuild: 0.17.19 + miniflare: 3.20240701.0 + nanoid: 3.3.7 + path-to-regexp: 6.2.2 + resolve: 1.22.8 + resolve.exports: 2.0.2 + selfsigned: 2.4.1 + source-map: 0.6.1 + unenv: unenv-nightly@1.10.0-1717606461.a117952 + xxhash-wasm: 1.0.2 + optionalDependencies: + fsevents: 2.3.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + wrappy@1.0.2: {} ws@8.17.1: {} + xxhash-wasm@1.0.2: {} + yallist@3.1.1: {} + + youch@3.3.3: + dependencies: + cookie: 0.5.0 + mustache: 4.2.0 + stacktracey: 2.1.8 + + zod@3.23.8: {} From 149aa56cb82ea04340368623e7ead3f575994ad2 Mon Sep 17 00:00:00 2001 From: thislight Date: Sun, 14 Jul 2024 21:18:28 +0800 Subject: [PATCH 005/300] ci/depoly: use new workflow --- .forgejo/workflows/depoly.yml | 10 +++++----- package.json | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.forgejo/workflows/depoly.yml b/.forgejo/workflows/depoly.yml index bf3bfc3..a367480 100644 --- a/.forgejo/workflows/depoly.yml +++ b/.forgejo/workflows/depoly.yml @@ -3,17 +3,14 @@ on: ['push'] jobs: depoly: - runs-on: linux - container: - image: code.lightstands.xyz/standcoded/fedora:40 + runs-on: fedora-40 steps: - name: Checkout uses: actions/checkout@v4 - name: Setup pnpm run: | - corepack enable - corepack prepare pnpm@latest-9 --activate + corepack install pnpm config set store-dir /tmp/pnpm-store - name: Cache Dependencies @@ -26,6 +23,9 @@ jobs: - name: Install Dependencies run: pnpm i + - name: Build Dist + run: pnpm dist + - name: Depoly to Cloudflare uses: https://github.com/cloudflare/wrangler-action@v3 with: diff --git a/package.json b/package.json index a1ec53e..cef961e 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "scripts": { "dev": "vite --host 0.0.0.0", "preview": "vite preview", - "prepare": "vite build" + "dist": "vite build" }, "keywords": [], "author": "Rubicon", From b9697a684db7b5268f7346c2ed9149d06dd893bf Mon Sep 17 00:00:00 2001 From: thislight Date: Sun, 14 Jul 2024 21:18:28 +0800 Subject: [PATCH 006/300] ci/depoly: use new workflow --- .forgejo/workflows/depoly.yml | 10 +++++----- package.json | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.forgejo/workflows/depoly.yml b/.forgejo/workflows/depoly.yml index bf3bfc3..a367480 100644 --- a/.forgejo/workflows/depoly.yml +++ b/.forgejo/workflows/depoly.yml @@ -3,17 +3,14 @@ on: ['push'] jobs: depoly: - runs-on: linux - container: - image: code.lightstands.xyz/standcoded/fedora:40 + runs-on: fedora-40 steps: - name: Checkout uses: actions/checkout@v4 - name: Setup pnpm run: | - corepack enable - corepack prepare pnpm@latest-9 --activate + corepack install pnpm config set store-dir /tmp/pnpm-store - name: Cache Dependencies @@ -26,6 +23,9 @@ jobs: - name: Install Dependencies run: pnpm i + - name: Build Dist + run: pnpm dist + - name: Depoly to Cloudflare uses: https://github.com/cloudflare/wrangler-action@v3 with: diff --git a/package.json b/package.json index a1ec53e..cef961e 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "scripts": { "dev": "vite --host 0.0.0.0", "preview": "vite preview", - "prepare": "vite build" + "dist": "vite build" }, "keywords": [], "author": "Rubicon", From a0432af9826212345005cf0478bee78d200349a3 Mon Sep 17 00:00:00 2001 From: thislight Date: Sun, 14 Jul 2024 21:26:55 +0800 Subject: [PATCH 007/300] vite: sourcemap always enabled --- vite.config.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/vite.config.ts b/vite.config.ts index 7612cee..96cb481 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -23,5 +23,6 @@ export default defineConfig(({ mode }) => ({ }, build: { target: ["firefox98", "safari15.4", "ios15.4", "chrome84", "edge87"], + sourcemap: true, }, })); From 9f83b223c4464583c94d6b76d5b3397ade202df2 Mon Sep 17 00:00:00 2001 From: thislight Date: Sun, 14 Jul 2024 21:26:55 +0800 Subject: [PATCH 008/300] vite: sourcemap always enabled --- vite.config.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/vite.config.ts b/vite.config.ts index 7612cee..96cb481 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -23,5 +23,6 @@ export default defineConfig(({ mode }) => ({ }, build: { target: ["firefox98", "safari15.4", "ios15.4", "chrome84", "edge87"], + sourcemap: true, }, })); From e882a8c0e80168ad301aa4d515b17c2b33ef84d9 Mon Sep 17 00:00:00 2001 From: thislight Date: Sun, 14 Jul 2024 21:36:41 +0800 Subject: [PATCH 009/300] accounts/stores: added useAccts --- src/accounts/stores.ts | 19 +++++++++++++++++-- src/timelines/Home.tsx | 4 ++-- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/accounts/stores.ts b/src/accounts/stores.ts index a990fc7..96c6499 100644 --- a/src/accounts/stores.ts +++ b/src/accounts/stores.ts @@ -1,6 +1,9 @@ import { persistentAtom } from "@nanostores/persistent"; +import { useStore } from "@nanostores/solid"; +import { useNavigate } from "@solidjs/router"; import { createOAuthAPIClient, createRestAPIClient } from "masto"; import { action } from "nanostores"; +import { createRenderEffect } from "solid-js"; export type Account = { site: string; @@ -25,7 +28,7 @@ interface OAuth2AccessToken { async function oauth2TokenViaAuthCode(app: RegisteredApp, authCode: string) { const resp = await fetch(new URL("./oauth/token", app.site), { - method: 'post', + method: "post", body: JSON.stringify({ grant_type: "authorization_code", code: authCode, @@ -97,7 +100,7 @@ export const $registeredApps = persistentAtom<{ async function getAppAccessToken(app: RegisteredApp) { const resp = await fetch(new URL("./oauth/token", app.site), { - method: 'post', + method: "post", headers: { "Content-Type": "application/json", }, @@ -172,3 +175,15 @@ export const getOrRegisterApp = action( return all[site]; }, ); + +export function useAccts() { + const accts = useStore($accounts); + const naviagte = useNavigate(); + + createRenderEffect(() => { + if (accts().length > 0) return; + naviagte("/accounts/sign-in"); + }); + + return accts; +} diff --git a/src/timelines/Home.tsx b/src/timelines/Home.tsx index 743b5af..696c0a2 100644 --- a/src/timelines/Home.tsx +++ b/src/timelines/Home.tsx @@ -8,7 +8,7 @@ import { untrack, onMount, } from "solid-js"; -import { $accounts } from "../accounts/stores"; +import { $accounts, useAccts } from "../accounts/stores"; import { useDocumentTitle } from "../utils"; import { useStore } from "@nanostores/solid"; import { useMastoClientFor } from "../masto/clients"; @@ -152,7 +152,7 @@ const TimelinePanel: Component<{ const Home: Component = () => { let panelList: HTMLDivElement; useDocumentTitle("Timelines"); - const accounts = useStore($accounts); + const accounts = useAccts(); const now = createTimeSource(); const client = useMastoClientFor(() => accounts()[0]); From 8ae0768c420ce79004d61364a1c69d6f14ab8439 Mon Sep 17 00:00:00 2001 From: thislight Date: Sun, 14 Jul 2024 21:36:41 +0800 Subject: [PATCH 010/300] accounts/stores: added useAccts --- src/accounts/stores.ts | 19 +++++++++++++++++-- src/timelines/Home.tsx | 4 ++-- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/accounts/stores.ts b/src/accounts/stores.ts index a990fc7..96c6499 100644 --- a/src/accounts/stores.ts +++ b/src/accounts/stores.ts @@ -1,6 +1,9 @@ import { persistentAtom } from "@nanostores/persistent"; +import { useStore } from "@nanostores/solid"; +import { useNavigate } from "@solidjs/router"; import { createOAuthAPIClient, createRestAPIClient } from "masto"; import { action } from "nanostores"; +import { createRenderEffect } from "solid-js"; export type Account = { site: string; @@ -25,7 +28,7 @@ interface OAuth2AccessToken { async function oauth2TokenViaAuthCode(app: RegisteredApp, authCode: string) { const resp = await fetch(new URL("./oauth/token", app.site), { - method: 'post', + method: "post", body: JSON.stringify({ grant_type: "authorization_code", code: authCode, @@ -97,7 +100,7 @@ export const $registeredApps = persistentAtom<{ async function getAppAccessToken(app: RegisteredApp) { const resp = await fetch(new URL("./oauth/token", app.site), { - method: 'post', + method: "post", headers: { "Content-Type": "application/json", }, @@ -172,3 +175,15 @@ export const getOrRegisterApp = action( return all[site]; }, ); + +export function useAccts() { + const accts = useStore($accounts); + const naviagte = useNavigate(); + + createRenderEffect(() => { + if (accts().length > 0) return; + naviagte("/accounts/sign-in"); + }); + + return accts; +} diff --git a/src/timelines/Home.tsx b/src/timelines/Home.tsx index 743b5af..696c0a2 100644 --- a/src/timelines/Home.tsx +++ b/src/timelines/Home.tsx @@ -8,7 +8,7 @@ import { untrack, onMount, } from "solid-js"; -import { $accounts } from "../accounts/stores"; +import { $accounts, useAccts } from "../accounts/stores"; import { useDocumentTitle } from "../utils"; import { useStore } from "@nanostores/solid"; import { useMastoClientFor } from "../masto/clients"; @@ -152,7 +152,7 @@ const TimelinePanel: Component<{ const Home: Component = () => { let panelList: HTMLDivElement; useDocumentTitle("Timelines"); - const accounts = useStore($accounts); + const accounts = useAccts(); const now = createTimeSource(); const client = useMastoClientFor(() => accounts()[0]); From dd1fca7691e5d44e7889a5ebabf946b8ac6e314a Mon Sep 17 00:00:00 2001 From: thislight Date: Sun, 14 Jul 2024 22:05:12 +0800 Subject: [PATCH 011/300] ci/depoly: depoly to production if tagging version --- .forgejo/workflows/depoly.yml | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/.forgejo/workflows/depoly.yml b/.forgejo/workflows/depoly.yml index a367480..a64b095 100644 --- a/.forgejo/workflows/depoly.yml +++ b/.forgejo/workflows/depoly.yml @@ -1,5 +1,10 @@ -on: ['push'] +on: + push: + branches: + - master + tags: + - "v*" jobs: depoly: @@ -26,11 +31,19 @@ jobs: - name: Build Dist run: pnpm dist - - name: Depoly to Cloudflare + - name: Depoly to Preview uses: https://github.com/cloudflare/wrangler-action@v3 with: apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} command: pages deploy --project-name=tututheapp dist - if: "env.GITHUB_REF_NAME == 'master'" + if: github.event.ref_type == 'branch' + + - name: Depoly to Production + uses: https://github.com/cloudflare/wrangler-action@v3 + with: + apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} + accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} + command: pages deploy --project-name=tututheapp dist --branch=production + if: github.event.ref_type == 'tag' From 51ad463562fd0e34a9068f8c7fd651dcc1410c06 Mon Sep 17 00:00:00 2001 From: thislight Date: Sun, 14 Jul 2024 22:05:12 +0800 Subject: [PATCH 012/300] ci/depoly: depoly to production if tagging version --- .forgejo/workflows/depoly.yml | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/.forgejo/workflows/depoly.yml b/.forgejo/workflows/depoly.yml index a367480..a64b095 100644 --- a/.forgejo/workflows/depoly.yml +++ b/.forgejo/workflows/depoly.yml @@ -1,5 +1,10 @@ -on: ['push'] +on: + push: + branches: + - master + tags: + - "v*" jobs: depoly: @@ -26,11 +31,19 @@ jobs: - name: Build Dist run: pnpm dist - - name: Depoly to Cloudflare + - name: Depoly to Preview uses: https://github.com/cloudflare/wrangler-action@v3 with: apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} command: pages deploy --project-name=tututheapp dist - if: "env.GITHUB_REF_NAME == 'master'" + if: github.event.ref_type == 'branch' + + - name: Depoly to Production + uses: https://github.com/cloudflare/wrangler-action@v3 + with: + apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} + accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} + command: pages deploy --project-name=tututheapp dist --branch=production + if: github.event.ref_type == 'tag' From cac01f1dab087b8946b969d5783a5f4700b4ea2b Mon Sep 17 00:00:00 2001 From: thislight Date: Sun, 14 Jul 2024 22:06:12 +0800 Subject: [PATCH 013/300] start the first version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cef961e..2e4f1f3 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package", "name": "tutu", - "version": "0.1.0", + "version": "1.0.0", "description": "", "private": true, "type": "module", From d206bfaedd9e5bdaad5e2c2adade79a55e96c5e9 Mon Sep 17 00:00:00 2001 From: thislight Date: Sun, 14 Jul 2024 22:06:12 +0800 Subject: [PATCH 014/300] start the first version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cef961e..2e4f1f3 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package", "name": "tutu", - "version": "0.1.0", + "version": "1.0.0", "description": "", "private": true, "type": "module", From f82788495f33309332b00d7f6cad3d1d638b007d Mon Sep 17 00:00:00 2001 From: thislight Date: Sun, 14 Jul 2024 22:15:02 +0800 Subject: [PATCH 015/300] ci/depoly: try to fix depoly condition --- .forgejo/workflows/depoly.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.forgejo/workflows/depoly.yml b/.forgejo/workflows/depoly.yml index a64b095..a340d9d 100644 --- a/.forgejo/workflows/depoly.yml +++ b/.forgejo/workflows/depoly.yml @@ -37,7 +37,7 @@ jobs: apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} command: pages deploy --project-name=tututheapp dist - if: github.event.ref_type == 'branch' + if: env.GITHUB_REF_NAME == 'master' - name: Depoly to Production uses: https://github.com/cloudflare/wrangler-action@v3 @@ -45,5 +45,5 @@ jobs: apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} command: pages deploy --project-name=tututheapp dist --branch=production - if: github.event.ref_type == 'tag' + if: env.GITHUB_REF_NAME != 'master' From 942b9dcce848f96b26a7cfd97336296c1b161129 Mon Sep 17 00:00:00 2001 From: thislight Date: Sun, 14 Jul 2024 22:15:02 +0800 Subject: [PATCH 016/300] ci/depoly: try to fix depoly condition --- .forgejo/workflows/depoly.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.forgejo/workflows/depoly.yml b/.forgejo/workflows/depoly.yml index a64b095..a340d9d 100644 --- a/.forgejo/workflows/depoly.yml +++ b/.forgejo/workflows/depoly.yml @@ -37,7 +37,7 @@ jobs: apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} command: pages deploy --project-name=tututheapp dist - if: github.event.ref_type == 'branch' + if: env.GITHUB_REF_NAME == 'master' - name: Depoly to Production uses: https://github.com/cloudflare/wrangler-action@v3 @@ -45,5 +45,5 @@ jobs: apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} command: pages deploy --project-name=tututheapp dist --branch=production - if: github.event.ref_type == 'tag' + if: env.GITHUB_REF_NAME != 'master' From 00fa334d42f20c210d00a2b8287c1a4f691c287c Mon Sep 17 00:00:00 2001 From: thislight Date: Mon, 15 Jul 2024 13:59:10 +0800 Subject: [PATCH 017/300] rewrite client providing & fix sign in redirect --- src/App.tsx | 53 +++++++++++++++++++++++++----- src/accounts/stores.ts | 15 --------- src/masto/acct.ts | 6 ++-- src/masto/clients.ts | 73 +++++++++++++++++++++++++++++++----------- src/timelines/Home.tsx | 12 +++---- 5 files changed, 106 insertions(+), 53 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index c5fa9fd..4a36e23 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,12 +1,27 @@ import { Route, Router } from "@solidjs/router"; import { ThemeProvider } from "@suid/material"; -import { Component, lazy } from "solid-js"; +import { + Component, + createRenderEffect, + createSignal, + ErrorBoundary, + lazy, +} from "solid-js"; import { useRootTheme } from "./material/mui.js"; -import "./App.css" +import { + Provider as ClientProvider, + createMastoClientFor, + type Session, +} from "./masto/clients.js"; +import "./App.css"; +import { $accounts } from "./accounts/stores.js"; +import { useStore } from "@nanostores/solid"; const AccountSignIn = lazy(() => import("./accounts/SignIn.js")); -const AccountMastodonOAuth2Callback = lazy(() => import("./accounts/MastodonOAuth2Callback.js")) -const TimelineHome = lazy(() => import("./timelines/Home.js")) +const AccountMastodonOAuth2Callback = lazy( + () => import("./accounts/MastodonOAuth2Callback.js"), +); +const TimelineHome = lazy(() => import("./timelines/Home.js")); const Routing: Component = () => { return ( @@ -14,7 +29,10 @@ const Routing: Component = () => { - + ); @@ -22,10 +40,29 @@ const Routing: Component = () => { const App: Component = () => { const theme = useRootTheme(); + const accts = useStore($accounts); + const clientStore = createSignal([]); + + createRenderEffect(() => { + const [, setClients] = clientStore; + setClients( + accts().map((x) => ({ account: x, client: createMastoClientFor(x) })), + ); + }); + return ( - - - + { + console.error(err); + return <>; + }} + > + + + + + + ); }; diff --git a/src/accounts/stores.ts b/src/accounts/stores.ts index 96c6499..fe408f9 100644 --- a/src/accounts/stores.ts +++ b/src/accounts/stores.ts @@ -1,9 +1,6 @@ import { persistentAtom } from "@nanostores/persistent"; -import { useStore } from "@nanostores/solid"; -import { useNavigate } from "@solidjs/router"; import { createOAuthAPIClient, createRestAPIClient } from "masto"; import { action } from "nanostores"; -import { createRenderEffect } from "solid-js"; export type Account = { site: string; @@ -175,15 +172,3 @@ export const getOrRegisterApp = action( return all[site]; }, ); - -export function useAccts() { - const accts = useStore($accounts); - const naviagte = useNavigate(); - - createRenderEffect(() => { - if (accts().length > 0) return; - naviagte("/accounts/sign-in"); - }); - - return accts; -} diff --git a/src/masto/acct.ts b/src/masto/acct.ts index 51c8ea2..eafd297 100644 --- a/src/masto/acct.ts +++ b/src/masto/acct.ts @@ -1,9 +1,7 @@ import { Accessor, createResource } from "solid-js"; -import { Account } from "../accounts/stores"; -import { useMastoClientFor } from "./clients"; +import type { mastodon } from "masto"; -export function useAcctProfile(account: Accessor) { - const client = useMastoClientFor(account) +export function useAcctProfile(client: Accessor) { return createResource(client, (client) => { return client.v1.accounts.verifyCredentials() }, { diff --git a/src/masto/clients.ts b/src/masto/clients.ts index 3ff1be6..9e71b8c 100644 --- a/src/masto/clients.ts +++ b/src/masto/clients.ts @@ -1,41 +1,78 @@ -import { Accessor, createMemo, createResource } from "solid-js"; +import { + Accessor, + createContext, + createRenderEffect, + createResource, + Signal, + useContext, +} from "solid-js"; import { Account } from "../accounts/stores"; import { createRestAPIClient, mastodon } from "masto"; +import { useLocation, useNavigate } from "@solidjs/router"; -const restfulCache: Record = {} +const restfulCache: Record = {}; export function createMastoClientFor(account: Account) { - const cacheKey = [account.site, account.accessToken].join('') - const cache = restfulCache[cacheKey] + const cacheKey = [account.site, account.accessToken].join(""); + const cache = restfulCache[cacheKey]; if (cache) return cache; const client = createRestAPIClient({ url: account.site, accessToken: account.accessToken, - }) - restfulCache[cacheKey] = client + }); + restfulCache[cacheKey] = client; - return client -} - -export function useMastoClientFor(account: Accessor) { - return createMemo(() => createMastoClientFor(account())) + return client; } export function createUnauthorizedClient(site: string) { - const cache = restfulCache[site] + const cache = restfulCache[site]; if (cache) return cache; const client = createRestAPIClient({ - url: site - }) - restfulCache[site] = client + url: site, + }); + restfulCache[site] = client; - return client + return client; } export function useInstance(client: Accessor) { return createResource(client, async (client) => { - return await client.v2.instance.fetch() - }) + return await client.v2.instance.fetch(); + }); +} + +export type Session = { + account: Account; + client: mastodon.rest.Client; +}; + +const Context = /* @__PURE__ */ createContext>(); + +export const Provider = Context.Provider; + +export function useSessions() { + const [sessions] = useSessionsRw(); + const navigate = useNavigate(); + const location = useLocation(); + + createRenderEffect(() => { + if (sessions().length > 0) return; + navigate( + "/accounts/sign-in?back=" + encodeURIComponent(location.pathname), + { replace: true }, + ); + }); + + return sessions; +} + +export function useSessionsRw() { + const store = useContext(Context); + if (!store) { + throw new TypeError("sessions are not provided"); + } + return store; } diff --git a/src/timelines/Home.tsx b/src/timelines/Home.tsx index 696c0a2..16fa2e1 100644 --- a/src/timelines/Home.tsx +++ b/src/timelines/Home.tsx @@ -3,15 +3,12 @@ import { For, onCleanup, createSignal, - createEffect, Show, untrack, onMount, } from "solid-js"; -import { $accounts, useAccts } from "../accounts/stores"; import { useDocumentTitle } from "../utils"; -import { useStore } from "@nanostores/solid"; -import { useMastoClientFor } from "../masto/clients"; +import { useSessions } from "../masto/clients"; import { type mastodon } from "masto"; import Scaffold from "../material/Scaffold"; import { @@ -24,7 +21,6 @@ import { MenuItem, Switch, Toolbar, - Typography, } from "@suid/material"; import { css } from "solid-styled"; import { TimeSourceProvider, createTimeSource } from "../platform/timesrc"; @@ -152,11 +148,11 @@ const TimelinePanel: Component<{ const Home: Component = () => { let panelList: HTMLDivElement; useDocumentTitle("Timelines"); - const accounts = useAccts(); const now = createTimeSource(); - const client = useMastoClientFor(() => accounts()[0]); - const [profile] = useAcctProfile(() => accounts()[0]); + const sessions = useSessions(); + const client = () => sessions()[0].client; + const [profile] = useAcctProfile(client); const [panelOffset, setPanelOffset] = createSignal(0); const [prefetching, setPrefetching] = createSignal(true); From 0caa9aab889008e85ffad27d3586b9781958019c Mon Sep 17 00:00:00 2001 From: thislight Date: Mon, 15 Jul 2024 13:59:10 +0800 Subject: [PATCH 018/300] rewrite client providing & fix sign in redirect --- src/App.tsx | 53 +++++++++++++++++++++++++----- src/accounts/stores.ts | 15 --------- src/masto/acct.ts | 6 ++-- src/masto/clients.ts | 73 +++++++++++++++++++++++++++++++----------- src/timelines/Home.tsx | 12 +++---- 5 files changed, 106 insertions(+), 53 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index c5fa9fd..4a36e23 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,12 +1,27 @@ import { Route, Router } from "@solidjs/router"; import { ThemeProvider } from "@suid/material"; -import { Component, lazy } from "solid-js"; +import { + Component, + createRenderEffect, + createSignal, + ErrorBoundary, + lazy, +} from "solid-js"; import { useRootTheme } from "./material/mui.js"; -import "./App.css" +import { + Provider as ClientProvider, + createMastoClientFor, + type Session, +} from "./masto/clients.js"; +import "./App.css"; +import { $accounts } from "./accounts/stores.js"; +import { useStore } from "@nanostores/solid"; const AccountSignIn = lazy(() => import("./accounts/SignIn.js")); -const AccountMastodonOAuth2Callback = lazy(() => import("./accounts/MastodonOAuth2Callback.js")) -const TimelineHome = lazy(() => import("./timelines/Home.js")) +const AccountMastodonOAuth2Callback = lazy( + () => import("./accounts/MastodonOAuth2Callback.js"), +); +const TimelineHome = lazy(() => import("./timelines/Home.js")); const Routing: Component = () => { return ( @@ -14,7 +29,10 @@ const Routing: Component = () => { - + ); @@ -22,10 +40,29 @@ const Routing: Component = () => { const App: Component = () => { const theme = useRootTheme(); + const accts = useStore($accounts); + const clientStore = createSignal([]); + + createRenderEffect(() => { + const [, setClients] = clientStore; + setClients( + accts().map((x) => ({ account: x, client: createMastoClientFor(x) })), + ); + }); + return ( - - - + { + console.error(err); + return <>; + }} + > + + + + + + ); }; diff --git a/src/accounts/stores.ts b/src/accounts/stores.ts index 96c6499..fe408f9 100644 --- a/src/accounts/stores.ts +++ b/src/accounts/stores.ts @@ -1,9 +1,6 @@ import { persistentAtom } from "@nanostores/persistent"; -import { useStore } from "@nanostores/solid"; -import { useNavigate } from "@solidjs/router"; import { createOAuthAPIClient, createRestAPIClient } from "masto"; import { action } from "nanostores"; -import { createRenderEffect } from "solid-js"; export type Account = { site: string; @@ -175,15 +172,3 @@ export const getOrRegisterApp = action( return all[site]; }, ); - -export function useAccts() { - const accts = useStore($accounts); - const naviagte = useNavigate(); - - createRenderEffect(() => { - if (accts().length > 0) return; - naviagte("/accounts/sign-in"); - }); - - return accts; -} diff --git a/src/masto/acct.ts b/src/masto/acct.ts index 51c8ea2..eafd297 100644 --- a/src/masto/acct.ts +++ b/src/masto/acct.ts @@ -1,9 +1,7 @@ import { Accessor, createResource } from "solid-js"; -import { Account } from "../accounts/stores"; -import { useMastoClientFor } from "./clients"; +import type { mastodon } from "masto"; -export function useAcctProfile(account: Accessor) { - const client = useMastoClientFor(account) +export function useAcctProfile(client: Accessor) { return createResource(client, (client) => { return client.v1.accounts.verifyCredentials() }, { diff --git a/src/masto/clients.ts b/src/masto/clients.ts index 3ff1be6..9e71b8c 100644 --- a/src/masto/clients.ts +++ b/src/masto/clients.ts @@ -1,41 +1,78 @@ -import { Accessor, createMemo, createResource } from "solid-js"; +import { + Accessor, + createContext, + createRenderEffect, + createResource, + Signal, + useContext, +} from "solid-js"; import { Account } from "../accounts/stores"; import { createRestAPIClient, mastodon } from "masto"; +import { useLocation, useNavigate } from "@solidjs/router"; -const restfulCache: Record = {} +const restfulCache: Record = {}; export function createMastoClientFor(account: Account) { - const cacheKey = [account.site, account.accessToken].join('') - const cache = restfulCache[cacheKey] + const cacheKey = [account.site, account.accessToken].join(""); + const cache = restfulCache[cacheKey]; if (cache) return cache; const client = createRestAPIClient({ url: account.site, accessToken: account.accessToken, - }) - restfulCache[cacheKey] = client + }); + restfulCache[cacheKey] = client; - return client -} - -export function useMastoClientFor(account: Accessor) { - return createMemo(() => createMastoClientFor(account())) + return client; } export function createUnauthorizedClient(site: string) { - const cache = restfulCache[site] + const cache = restfulCache[site]; if (cache) return cache; const client = createRestAPIClient({ - url: site - }) - restfulCache[site] = client + url: site, + }); + restfulCache[site] = client; - return client + return client; } export function useInstance(client: Accessor) { return createResource(client, async (client) => { - return await client.v2.instance.fetch() - }) + return await client.v2.instance.fetch(); + }); +} + +export type Session = { + account: Account; + client: mastodon.rest.Client; +}; + +const Context = /* @__PURE__ */ createContext>(); + +export const Provider = Context.Provider; + +export function useSessions() { + const [sessions] = useSessionsRw(); + const navigate = useNavigate(); + const location = useLocation(); + + createRenderEffect(() => { + if (sessions().length > 0) return; + navigate( + "/accounts/sign-in?back=" + encodeURIComponent(location.pathname), + { replace: true }, + ); + }); + + return sessions; +} + +export function useSessionsRw() { + const store = useContext(Context); + if (!store) { + throw new TypeError("sessions are not provided"); + } + return store; } diff --git a/src/timelines/Home.tsx b/src/timelines/Home.tsx index 696c0a2..16fa2e1 100644 --- a/src/timelines/Home.tsx +++ b/src/timelines/Home.tsx @@ -3,15 +3,12 @@ import { For, onCleanup, createSignal, - createEffect, Show, untrack, onMount, } from "solid-js"; -import { $accounts, useAccts } from "../accounts/stores"; import { useDocumentTitle } from "../utils"; -import { useStore } from "@nanostores/solid"; -import { useMastoClientFor } from "../masto/clients"; +import { useSessions } from "../masto/clients"; import { type mastodon } from "masto"; import Scaffold from "../material/Scaffold"; import { @@ -24,7 +21,6 @@ import { MenuItem, Switch, Toolbar, - Typography, } from "@suid/material"; import { css } from "solid-styled"; import { TimeSourceProvider, createTimeSource } from "../platform/timesrc"; @@ -152,11 +148,11 @@ const TimelinePanel: Component<{ const Home: Component = () => { let panelList: HTMLDivElement; useDocumentTitle("Timelines"); - const accounts = useAccts(); const now = createTimeSource(); - const client = useMastoClientFor(() => accounts()[0]); - const [profile] = useAcctProfile(() => accounts()[0]); + const sessions = useSessions(); + const client = () => sessions()[0].client; + const [profile] = useAcctProfile(client); const [panelOffset, setPanelOffset] = createSignal(0); const [prefetching, setPrefetching] = createSignal(true); From b8340aecd68f5696f55e18692532d44ed504a755 Mon Sep 17 00:00:00 2001 From: thislight Date: Mon, 15 Jul 2024 14:00:12 +0800 Subject: [PATCH 019/300] bump version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2e4f1f3..a61c09e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package", "name": "tutu", - "version": "1.0.0", + "version": "1.0.1", "description": "", "private": true, "type": "module", From 374a41c6d96579f75083a30e7a947dccda22d590 Mon Sep 17 00:00:00 2001 From: thislight Date: Mon, 15 Jul 2024 14:00:12 +0800 Subject: [PATCH 020/300] bump version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2e4f1f3..a61c09e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package", "name": "tutu", - "version": "1.0.0", + "version": "1.0.1", "description": "", "private": true, "type": "module", From b4f7a863a2abf08b906594a4ed64032fa588dfbd Mon Sep 17 00:00:00 2001 From: thislight Date: Mon, 15 Jul 2024 14:00:58 +0800 Subject: [PATCH 021/300] start of v1.0.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a61c09e..63fe582 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package", "name": "tutu", - "version": "1.0.1", + "version": "1.0.2", "description": "", "private": true, "type": "module", From 5ec00d4999bde38884e2c03381391ee6f3cd7144 Mon Sep 17 00:00:00 2001 From: thislight Date: Mon, 15 Jul 2024 14:00:58 +0800 Subject: [PATCH 022/300] start of v1.0.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a61c09e..63fe582 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package", "name": "tutu", - "version": "1.0.1", + "version": "1.0.2", "description": "", "private": true, "type": "module", From 71b9a60b35be6c4852d3391f27b8eadb97c951a5 Mon Sep 17 00:00:00 2001 From: thislight Date: Mon, 22 Jul 2024 21:57:04 +0800 Subject: [PATCH 023/300] added settings --- package.json | 1 + pnpm-lock.yaml | 12 +++ src/App.css | 12 +-- src/App.tsx | 6 +- src/accounts/stores.ts | 26 +++++- src/masto/acct.ts | 35 ++++++- src/masto/clients.ts | 2 +- src/material/BottomSheet.module.css | 32 +++++++ src/material/BottomSheet.tsx | 26 ++++++ src/material/Scaffold.tsx | 3 - src/overrides.d.ts | 10 ++ src/settings/Settings.tsx | 137 +++++++++++++++++++++++++++ src/timelines/Home.tsx | 140 ++++++++++++++-------------- src/timelines/ProfileMenuButton.tsx | 3 +- vite.config.ts | 5 + 15 files changed, 359 insertions(+), 91 deletions(-) create mode 100644 src/material/BottomSheet.module.css create mode 100644 src/material/BottomSheet.tsx create mode 100644 src/overrides.d.ts create mode 100644 src/settings/Settings.tsx diff --git a/package.json b/package.json index 63fe582..8b98434 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "prettier": "^3.3.2", "typescript": "^5.5.2", "vite": "^5.3.2", + "vite-plugin-package-version": "^1.1.0", "vite-plugin-pwa": "^0.20.0", "vite-plugin-solid": "^2.10.2", "vite-plugin-solid-styled": "^0.11.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index acc4341..9651bfd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -69,6 +69,9 @@ importers: vite: specifier: ^5.3.2 version: 5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2) + vite-plugin-package-version: + specifier: ^1.1.0 + version: 1.1.0(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)) vite-plugin-pwa: specifier: ^0.20.0 version: 0.20.0(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.1.0) @@ -2489,6 +2492,11 @@ packages: validate-html-nesting@1.2.2: resolution: {integrity: sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg==} + vite-plugin-package-version@1.1.0: + resolution: {integrity: sha512-TPoFZXNanzcaKCIrC3e2L/TVRkkRLB6l4RPN/S7KbG7rWfyLcCEGsnXvxn6qR7fyZwXalnnSN/I9d6pSFjHpEA==} + peerDependencies: + vite: '>=2.0.0-beta.69' + vite-plugin-pwa@0.20.0: resolution: {integrity: sha512-/kDZyqF8KqoXRpMUQtR5Atri/7BWayW8Gp7Kz/4bfstsV6zSFTxjREbXZYL7zSuRL40HGA+o2hvUAFRmC+bL7g==} engines: {node: '>=16.0.0'} @@ -5280,6 +5288,10 @@ snapshots: validate-html-nesting@1.2.2: {} + vite-plugin-package-version@1.1.0(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)): + dependencies: + vite: 5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2) + vite-plugin-pwa@0.20.0(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.1.0): dependencies: debug: 4.3.5 diff --git a/src/App.css b/src/App.css index c04a937..26dd292 100644 --- a/src/App.css +++ b/src/App.css @@ -1,14 +1,4 @@ -html, -body { - overflow: hidden; - height: 100vh; - height: 100dvh; -} - -#root { - overflow: hidden hidden; - height: 100vh; - height: 100dvh; +:root { background-color: var(--tutu-color-surface, transparent); } diff --git a/src/App.tsx b/src/App.tsx index 4a36e23..8a711e1 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -22,11 +22,15 @@ const AccountMastodonOAuth2Callback = lazy( () => import("./accounts/MastodonOAuth2Callback.js"), ); const TimelineHome = lazy(() => import("./timelines/Home.js")); +const Settings = lazy(() => import("./settings/Settings.js")); const Routing: Component = () => { return ( - + + + + ("accounts", [], { @@ -75,6 +82,23 @@ export const acceptAccountViaAuthCode = action( }, ); +export const updateAcctInf = action( + $accounts, + "updateAcctInf", + async ($store, idx: number) => { + const o = $store.get(); + const client = createMastoClientFor(o[idx]); + const inf = await client.v1.accounts.verifyCredentials(); + o[idx].inf = inf; + $store.set(o); + return inf; + }, +); + +export const signOut = action($accounts, "signOut", ($store, predicate: (acct: Account) => boolean) => { + $store.set($store.get().filter(a => !predicate(a))); +}); + export type RegisteredApp = { site: string; clientId: string; diff --git a/src/masto/acct.ts b/src/masto/acct.ts index eafd297..b1a2a28 100644 --- a/src/masto/acct.ts +++ b/src/masto/acct.ts @@ -1,10 +1,35 @@ import { Accessor, createResource } from "solid-js"; import type { mastodon } from "masto"; +import { useSessions } from "./clients"; +import { updateAcctInf } from "../accounts/stores"; export function useAcctProfile(client: Accessor) { - return createResource(client, (client) => { - return client.v1.accounts.verifyCredentials() - }, { - name: "MastodonAccountProfile" - }) + return createResource( + client, + (client) => { + return client.v1.accounts.verifyCredentials(); + }, + { + name: "MastodonAccountProfile", + }, + ); +} + +export function useSignedInProfiles() { + const sessions = useSessions(); + const [accessor, tools] = createResource(sessions, async (all) => { + return Promise.all( + all.map(async (x, i) => ({ ...x, inf: await updateAcctInf(i) })), + ); + }); + return [ + () => { + if (accessor.loading) { + accessor(); + return sessions().map((x) => ({ ...x, inf: x.account.inf })); + } + return accessor(); + }, + tools, + ] as const; } diff --git a/src/masto/clients.ts b/src/masto/clients.ts index 9e71b8c..f100779 100644 --- a/src/masto/clients.ts +++ b/src/masto/clients.ts @@ -69,7 +69,7 @@ export function useSessions() { return sessions; } -export function useSessionsRw() { +function useSessionsRw() { const store = useContext(Context); if (!store) { throw new TypeError("sessions are not provided"); diff --git a/src/material/BottomSheet.module.css b/src/material/BottomSheet.module.css new file mode 100644 index 0000000..1a15849 --- /dev/null +++ b/src/material/BottomSheet.module.css @@ -0,0 +1,32 @@ +.bottomSheet { + composes: surface from 'material.module.css'; + border: none; + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + padding: 0; + width: 100%; + max-width: 560px; + border-radius: 2px; + overscroll-behavior: contain; + + box-shadow: var(--tutu-shadow-e16); + + :global(.MuiToolbar-root) > :global(.MuiButtonBase-root):first-child { + color: white; + margin-left: -0.5em; + margin-right: 24px; + } + + @media (max-width: 560px) { + & { + left: 0; + top: 0; + transform: none; + bottom: 0; + height: 100vh; + height: 100dvh; + } + } +} \ No newline at end of file diff --git a/src/material/BottomSheet.tsx b/src/material/BottomSheet.tsx new file mode 100644 index 0000000..112a17e --- /dev/null +++ b/src/material/BottomSheet.tsx @@ -0,0 +1,26 @@ +import { createEffect, type ParentComponent } from "solid-js"; +import styles from './BottomSheet.module.css' + +export type BottomSheetProps = { + open?: boolean; +}; + +const BottomSheet: ParentComponent = (props) => { + let element: HTMLDialogElement; + + createEffect(() => { + if (props.open) { + if (!element.open) { + element.showModal(); + } + } else { + if (element.open) { + element.close(); + } + } + }); + + return {props.children}; +}; + +export default BottomSheet; diff --git a/src/material/Scaffold.tsx b/src/material/Scaffold.tsx index d7a1344..f1f9d34 100644 --- a/src/material/Scaffold.tsx +++ b/src/material/Scaffold.tsx @@ -22,9 +22,6 @@ const Scaffold: ParentComponent = (props) => { css` .scaffold-content { --scaffold-topbar-height: ${(topbarSize.height?.toString() ?? 0) + "px"}; - - height: 100%; - width: 100%; } .topbar { diff --git a/src/overrides.d.ts b/src/overrides.d.ts new file mode 100644 index 0000000..fc32e50 --- /dev/null +++ b/src/overrides.d.ts @@ -0,0 +1,10 @@ +/// + +interface ImportMetaEnv { + readonly BUILT_AT: string; + readonly PACKAGE_VERSION: string; +} + +interface ImportMeta { + readonly env: ImportMetaEnv; +} diff --git a/src/settings/Settings.tsx b/src/settings/Settings.tsx new file mode 100644 index 0000000..e93de43 --- /dev/null +++ b/src/settings/Settings.tsx @@ -0,0 +1,137 @@ +import { createResource, For, type ParentComponent } from "solid-js"; +import Scaffold from "../material/Scaffold.js"; +import { + AppBar, + Divider, + IconButton, + List, + ListItem, + ListItemButton, + ListItemSecondaryAction, + ListItemText, + ListSubheader, + NativeSelect, + Select, + Switch, + Toolbar, +} from "@suid/material"; +import { Close as CloseIcon } from "@suid/icons-material"; +import { useNavigate } from "@solidjs/router"; +import { Title } from "../material/typography.jsx"; +import { useSessions } from "../masto/clients.js"; +import { css } from "solid-styled"; +import { useSignedInProfiles } from "../masto/acct.js"; +import { signOut, type Account } from "../accounts/stores.js"; +import { intlFormat } from "date-fns"; + +const Settings: ParentComponent = () => { + const navigate = useNavigate(); + + const [profiles] = useSignedInProfiles(); + + const doSignOut = (acct: Account) => { + signOut((a) => a.site === acct.site && a.accessToken === acct.accessToken); + }; + + css` + ul { + padding: 0; + } + + .setting-list { + padding-bottom: calc(env(safe-area-inset-bottom, 0px) + 16px); + } + `; + return ( + + + + + + Settings + + + } + > + +
  • +
      + Accounts + + All Notifications + + + + + + Sign in... + +
    + + {({ account: acct, inf }) => ( +
      + {`@${inf?.username ?? "..."}@${new URL(acct.site).host}`} + + Notifications + + + + + + Sign out + +
    + )} +
    +
  • +
  • + Reading + + Fonts + + + + Prefetch Toots + + + + + +
  • +
  • + Controls + + Optimized UI + + + + + + + + + +
  • +
  • + This Application + + + About Tutu + + + + + No updates + + +
  • +
    +
    + ); +}; + +export default Settings; diff --git a/src/timelines/Home.tsx b/src/timelines/Home.tsx index 16fa2e1..0738a37 100644 --- a/src/timelines/Home.tsx +++ b/src/timelines/Home.tsx @@ -6,9 +6,11 @@ import { Show, untrack, onMount, + type ParentComponent, + children, } from "solid-js"; import { useDocumentTitle } from "../utils"; -import { useSessions } from "../masto/clients"; +import { useSessions } from "../masto/clients"; import { type mastodon } from "masto"; import Scaffold from "../material/Scaffold"; import { @@ -32,6 +34,7 @@ import Tab from "../material/Tab"; import { Create as CreateTootIcon } from "@suid/icons-material"; import { useTimeline } from "../masto/timelines"; import { makeEventListener } from "@solid-primitives/event-listener"; +import BottomSheet from "../material/BottomSheet"; const TimelinePanel: Component<{ client: mastodon.rest.Client; @@ -145,7 +148,7 @@ const TimelinePanel: Component<{ ); }; -const Home: Component = () => { +const Home: ParentComponent = (props) => { let panelList: HTMLDivElement; useDocumentTitle("Timelines"); const now = createTimeSource(); @@ -162,6 +165,8 @@ const Home: Component = () => { number, ]); + const child = children(() => props.children) + let scrollEventLockReleased = true; const recalculateTabIndicator = () => { @@ -221,7 +226,7 @@ const Home: Component = () => { const onTabClick = (idx: number) => { const items = panelList.querySelectorAll(".tab-panel"); if (items.length > idx) { - items.item(idx).scrollIntoView({ behavior: "smooth" }); + items.item(idx).scrollIntoView({ block: "nearest", behavior: "smooth" }); } }; @@ -235,10 +240,6 @@ const Home: Component = () => { max-height: calc(100dvh - var(--scaffold-topbar-height, 0px)); scroll-snap-align: center; - &:not(.active) { - overflow: hidden; - } - @media (max-width: 600px) { padding: 0; } @@ -261,71 +262,74 @@ const Home: Component = () => { `; return ( - - - - - Home - - - Trending - - - Public - - - - setPrefetching((x) => !x)}> - Prefetch Toots - - - - - - - - } - fab={ - - - - } - > - -
    -
    -
    - + <> + + + + + Home + + + Trending + + + Public + + + + setPrefetching((x) => !x)}> + Prefetch Toots + + + + + + + + } + fab={ + + + + } + > + +
    +
    +
    + +
    -
    -
    -
    - +
    +
    + +
    -
    -
    -
    - +
    +
    + +
    +
    -
    -
    - - + + {child()} + + ); }; diff --git a/src/timelines/ProfileMenuButton.tsx b/src/timelines/ProfileMenuButton.tsx index 1d61553..b997041 100644 --- a/src/timelines/ProfileMenuButton.tsx +++ b/src/timelines/ProfileMenuButton.tsx @@ -15,6 +15,7 @@ import { Star as LikeIcon, FeaturedPlayList as ListIcon, } from "@suid/icons-material"; +import { A } from "@solidjs/router"; const ProfileMenuButton: ParentComponent<{ profile?: { displayName: string; avatar: string; username: string }; @@ -107,7 +108,7 @@ const ProfileMenuButton: ParentComponent<{ {props.children} - + diff --git a/vite.config.ts b/vite.config.ts index 96cb481..26d01b6 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -3,6 +3,7 @@ import solid from "vite-plugin-solid"; import solidStyled from "vite-plugin-solid-styled"; import suid from "@suid/vite-plugin"; import { VitePWA } from "vite-plugin-pwa"; +import version from "vite-plugin-package-version"; export default defineConfig(({ mode }) => ({ plugins: [ @@ -17,7 +18,11 @@ export default defineConfig(({ mode }) => ({ VitePWA({ registerType: "autoUpdate", }), + version(), ], + define: { + "import.meta.env.BUILT_AT": `"${new Date().toISOString()}"`, + }, css: { devSourcemap: true, }, From 5833e5a76b4dd353e0506c02ab05a3a818bec70a Mon Sep 17 00:00:00 2001 From: thislight Date: Mon, 22 Jul 2024 21:57:04 +0800 Subject: [PATCH 024/300] added settings --- package.json | 1 + pnpm-lock.yaml | 12 +++ src/App.css | 12 +-- src/App.tsx | 6 +- src/accounts/stores.ts | 26 +++++- src/masto/acct.ts | 35 ++++++- src/masto/clients.ts | 2 +- src/material/BottomSheet.module.css | 32 +++++++ src/material/BottomSheet.tsx | 26 ++++++ src/material/Scaffold.tsx | 3 - src/overrides.d.ts | 10 ++ src/settings/Settings.tsx | 137 +++++++++++++++++++++++++++ src/timelines/Home.tsx | 140 ++++++++++++++-------------- src/timelines/ProfileMenuButton.tsx | 3 +- vite.config.ts | 5 + 15 files changed, 359 insertions(+), 91 deletions(-) create mode 100644 src/material/BottomSheet.module.css create mode 100644 src/material/BottomSheet.tsx create mode 100644 src/overrides.d.ts create mode 100644 src/settings/Settings.tsx diff --git a/package.json b/package.json index 63fe582..8b98434 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "prettier": "^3.3.2", "typescript": "^5.5.2", "vite": "^5.3.2", + "vite-plugin-package-version": "^1.1.0", "vite-plugin-pwa": "^0.20.0", "vite-plugin-solid": "^2.10.2", "vite-plugin-solid-styled": "^0.11.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index acc4341..9651bfd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -69,6 +69,9 @@ importers: vite: specifier: ^5.3.2 version: 5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2) + vite-plugin-package-version: + specifier: ^1.1.0 + version: 1.1.0(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)) vite-plugin-pwa: specifier: ^0.20.0 version: 0.20.0(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.1.0) @@ -2489,6 +2492,11 @@ packages: validate-html-nesting@1.2.2: resolution: {integrity: sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg==} + vite-plugin-package-version@1.1.0: + resolution: {integrity: sha512-TPoFZXNanzcaKCIrC3e2L/TVRkkRLB6l4RPN/S7KbG7rWfyLcCEGsnXvxn6qR7fyZwXalnnSN/I9d6pSFjHpEA==} + peerDependencies: + vite: '>=2.0.0-beta.69' + vite-plugin-pwa@0.20.0: resolution: {integrity: sha512-/kDZyqF8KqoXRpMUQtR5Atri/7BWayW8Gp7Kz/4bfstsV6zSFTxjREbXZYL7zSuRL40HGA+o2hvUAFRmC+bL7g==} engines: {node: '>=16.0.0'} @@ -5280,6 +5288,10 @@ snapshots: validate-html-nesting@1.2.2: {} + vite-plugin-package-version@1.1.0(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)): + dependencies: + vite: 5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2) + vite-plugin-pwa@0.20.0(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.1.0): dependencies: debug: 4.3.5 diff --git a/src/App.css b/src/App.css index c04a937..26dd292 100644 --- a/src/App.css +++ b/src/App.css @@ -1,14 +1,4 @@ -html, -body { - overflow: hidden; - height: 100vh; - height: 100dvh; -} - -#root { - overflow: hidden hidden; - height: 100vh; - height: 100dvh; +:root { background-color: var(--tutu-color-surface, transparent); } diff --git a/src/App.tsx b/src/App.tsx index 4a36e23..8a711e1 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -22,11 +22,15 @@ const AccountMastodonOAuth2Callback = lazy( () => import("./accounts/MastodonOAuth2Callback.js"), ); const TimelineHome = lazy(() => import("./timelines/Home.js")); +const Settings = lazy(() => import("./settings/Settings.js")); const Routing: Component = () => { return ( - + + + + ("accounts", [], { @@ -75,6 +82,23 @@ export const acceptAccountViaAuthCode = action( }, ); +export const updateAcctInf = action( + $accounts, + "updateAcctInf", + async ($store, idx: number) => { + const o = $store.get(); + const client = createMastoClientFor(o[idx]); + const inf = await client.v1.accounts.verifyCredentials(); + o[idx].inf = inf; + $store.set(o); + return inf; + }, +); + +export const signOut = action($accounts, "signOut", ($store, predicate: (acct: Account) => boolean) => { + $store.set($store.get().filter(a => !predicate(a))); +}); + export type RegisteredApp = { site: string; clientId: string; diff --git a/src/masto/acct.ts b/src/masto/acct.ts index eafd297..b1a2a28 100644 --- a/src/masto/acct.ts +++ b/src/masto/acct.ts @@ -1,10 +1,35 @@ import { Accessor, createResource } from "solid-js"; import type { mastodon } from "masto"; +import { useSessions } from "./clients"; +import { updateAcctInf } from "../accounts/stores"; export function useAcctProfile(client: Accessor) { - return createResource(client, (client) => { - return client.v1.accounts.verifyCredentials() - }, { - name: "MastodonAccountProfile" - }) + return createResource( + client, + (client) => { + return client.v1.accounts.verifyCredentials(); + }, + { + name: "MastodonAccountProfile", + }, + ); +} + +export function useSignedInProfiles() { + const sessions = useSessions(); + const [accessor, tools] = createResource(sessions, async (all) => { + return Promise.all( + all.map(async (x, i) => ({ ...x, inf: await updateAcctInf(i) })), + ); + }); + return [ + () => { + if (accessor.loading) { + accessor(); + return sessions().map((x) => ({ ...x, inf: x.account.inf })); + } + return accessor(); + }, + tools, + ] as const; } diff --git a/src/masto/clients.ts b/src/masto/clients.ts index 9e71b8c..f100779 100644 --- a/src/masto/clients.ts +++ b/src/masto/clients.ts @@ -69,7 +69,7 @@ export function useSessions() { return sessions; } -export function useSessionsRw() { +function useSessionsRw() { const store = useContext(Context); if (!store) { throw new TypeError("sessions are not provided"); diff --git a/src/material/BottomSheet.module.css b/src/material/BottomSheet.module.css new file mode 100644 index 0000000..1a15849 --- /dev/null +++ b/src/material/BottomSheet.module.css @@ -0,0 +1,32 @@ +.bottomSheet { + composes: surface from 'material.module.css'; + border: none; + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + padding: 0; + width: 100%; + max-width: 560px; + border-radius: 2px; + overscroll-behavior: contain; + + box-shadow: var(--tutu-shadow-e16); + + :global(.MuiToolbar-root) > :global(.MuiButtonBase-root):first-child { + color: white; + margin-left: -0.5em; + margin-right: 24px; + } + + @media (max-width: 560px) { + & { + left: 0; + top: 0; + transform: none; + bottom: 0; + height: 100vh; + height: 100dvh; + } + } +} \ No newline at end of file diff --git a/src/material/BottomSheet.tsx b/src/material/BottomSheet.tsx new file mode 100644 index 0000000..112a17e --- /dev/null +++ b/src/material/BottomSheet.tsx @@ -0,0 +1,26 @@ +import { createEffect, type ParentComponent } from "solid-js"; +import styles from './BottomSheet.module.css' + +export type BottomSheetProps = { + open?: boolean; +}; + +const BottomSheet: ParentComponent = (props) => { + let element: HTMLDialogElement; + + createEffect(() => { + if (props.open) { + if (!element.open) { + element.showModal(); + } + } else { + if (element.open) { + element.close(); + } + } + }); + + return {props.children}; +}; + +export default BottomSheet; diff --git a/src/material/Scaffold.tsx b/src/material/Scaffold.tsx index d7a1344..f1f9d34 100644 --- a/src/material/Scaffold.tsx +++ b/src/material/Scaffold.tsx @@ -22,9 +22,6 @@ const Scaffold: ParentComponent = (props) => { css` .scaffold-content { --scaffold-topbar-height: ${(topbarSize.height?.toString() ?? 0) + "px"}; - - height: 100%; - width: 100%; } .topbar { diff --git a/src/overrides.d.ts b/src/overrides.d.ts new file mode 100644 index 0000000..fc32e50 --- /dev/null +++ b/src/overrides.d.ts @@ -0,0 +1,10 @@ +/// + +interface ImportMetaEnv { + readonly BUILT_AT: string; + readonly PACKAGE_VERSION: string; +} + +interface ImportMeta { + readonly env: ImportMetaEnv; +} diff --git a/src/settings/Settings.tsx b/src/settings/Settings.tsx new file mode 100644 index 0000000..e93de43 --- /dev/null +++ b/src/settings/Settings.tsx @@ -0,0 +1,137 @@ +import { createResource, For, type ParentComponent } from "solid-js"; +import Scaffold from "../material/Scaffold.js"; +import { + AppBar, + Divider, + IconButton, + List, + ListItem, + ListItemButton, + ListItemSecondaryAction, + ListItemText, + ListSubheader, + NativeSelect, + Select, + Switch, + Toolbar, +} from "@suid/material"; +import { Close as CloseIcon } from "@suid/icons-material"; +import { useNavigate } from "@solidjs/router"; +import { Title } from "../material/typography.jsx"; +import { useSessions } from "../masto/clients.js"; +import { css } from "solid-styled"; +import { useSignedInProfiles } from "../masto/acct.js"; +import { signOut, type Account } from "../accounts/stores.js"; +import { intlFormat } from "date-fns"; + +const Settings: ParentComponent = () => { + const navigate = useNavigate(); + + const [profiles] = useSignedInProfiles(); + + const doSignOut = (acct: Account) => { + signOut((a) => a.site === acct.site && a.accessToken === acct.accessToken); + }; + + css` + ul { + padding: 0; + } + + .setting-list { + padding-bottom: calc(env(safe-area-inset-bottom, 0px) + 16px); + } + `; + return ( + + + + + + Settings + + + } + > + +
  • +
      + Accounts + + All Notifications + + + + + + Sign in... + +
    + + {({ account: acct, inf }) => ( +
      + {`@${inf?.username ?? "..."}@${new URL(acct.site).host}`} + + Notifications + + + + + + Sign out + +
    + )} +
    +
  • +
  • + Reading + + Fonts + + + + Prefetch Toots + + + + + +
  • +
  • + Controls + + Optimized UI + + + + + + + + + +
  • +
  • + This Application + + + About Tutu + + + + + No updates + + +
  • +
    +
    + ); +}; + +export default Settings; diff --git a/src/timelines/Home.tsx b/src/timelines/Home.tsx index 16fa2e1..0738a37 100644 --- a/src/timelines/Home.tsx +++ b/src/timelines/Home.tsx @@ -6,9 +6,11 @@ import { Show, untrack, onMount, + type ParentComponent, + children, } from "solid-js"; import { useDocumentTitle } from "../utils"; -import { useSessions } from "../masto/clients"; +import { useSessions } from "../masto/clients"; import { type mastodon } from "masto"; import Scaffold from "../material/Scaffold"; import { @@ -32,6 +34,7 @@ import Tab from "../material/Tab"; import { Create as CreateTootIcon } from "@suid/icons-material"; import { useTimeline } from "../masto/timelines"; import { makeEventListener } from "@solid-primitives/event-listener"; +import BottomSheet from "../material/BottomSheet"; const TimelinePanel: Component<{ client: mastodon.rest.Client; @@ -145,7 +148,7 @@ const TimelinePanel: Component<{ ); }; -const Home: Component = () => { +const Home: ParentComponent = (props) => { let panelList: HTMLDivElement; useDocumentTitle("Timelines"); const now = createTimeSource(); @@ -162,6 +165,8 @@ const Home: Component = () => { number, ]); + const child = children(() => props.children) + let scrollEventLockReleased = true; const recalculateTabIndicator = () => { @@ -221,7 +226,7 @@ const Home: Component = () => { const onTabClick = (idx: number) => { const items = panelList.querySelectorAll(".tab-panel"); if (items.length > idx) { - items.item(idx).scrollIntoView({ behavior: "smooth" }); + items.item(idx).scrollIntoView({ block: "nearest", behavior: "smooth" }); } }; @@ -235,10 +240,6 @@ const Home: Component = () => { max-height: calc(100dvh - var(--scaffold-topbar-height, 0px)); scroll-snap-align: center; - &:not(.active) { - overflow: hidden; - } - @media (max-width: 600px) { padding: 0; } @@ -261,71 +262,74 @@ const Home: Component = () => { `; return ( - - - - - Home - - - Trending - - - Public - - - - setPrefetching((x) => !x)}> - Prefetch Toots - - - - - - - - } - fab={ - - - - } - > - -
    -
    -
    - + <> + + + + + Home + + + Trending + + + Public + + + + setPrefetching((x) => !x)}> + Prefetch Toots + + + + + + + + } + fab={ + + + + } + > + +
    +
    +
    + +
    -
    -
    -
    - +
    +
    + +
    -
    -
    -
    - +
    +
    + +
    +
    -
    -
    - - + + {child()} + + ); }; diff --git a/src/timelines/ProfileMenuButton.tsx b/src/timelines/ProfileMenuButton.tsx index 1d61553..b997041 100644 --- a/src/timelines/ProfileMenuButton.tsx +++ b/src/timelines/ProfileMenuButton.tsx @@ -15,6 +15,7 @@ import { Star as LikeIcon, FeaturedPlayList as ListIcon, } from "@suid/icons-material"; +import { A } from "@solidjs/router"; const ProfileMenuButton: ParentComponent<{ profile?: { displayName: string; avatar: string; username: string }; @@ -107,7 +108,7 @@ const ProfileMenuButton: ParentComponent<{ {props.children} - + diff --git a/vite.config.ts b/vite.config.ts index 96cb481..26d01b6 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -3,6 +3,7 @@ import solid from "vite-plugin-solid"; import solidStyled from "vite-plugin-solid-styled"; import suid from "@suid/vite-plugin"; import { VitePWA } from "vite-plugin-pwa"; +import version from "vite-plugin-package-version"; export default defineConfig(({ mode }) => ({ plugins: [ @@ -17,7 +18,11 @@ export default defineConfig(({ mode }) => ({ VitePWA({ registerType: "autoUpdate", }), + version(), ], + define: { + "import.meta.env.BUILT_AT": `"${new Date().toISOString()}"`, + }, css: { devSourcemap: true, }, From 85ac9a236b1e9c50b69f36768ef7f63d1593c79f Mon Sep 17 00:00:00 2001 From: thislight Date: Mon, 22 Jul 2024 21:59:37 +0800 Subject: [PATCH 025/300] ci: build staging bundle for preview --- .forgejo/workflows/depoly.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.forgejo/workflows/depoly.yml b/.forgejo/workflows/depoly.yml index a340d9d..4195610 100644 --- a/.forgejo/workflows/depoly.yml +++ b/.forgejo/workflows/depoly.yml @@ -28,8 +28,13 @@ jobs: - name: Install Dependencies run: pnpm i + - name: Build Dist (Staging) + run: pnpm dist -m staging + if: env.GITHUB_REF_NAME == 'master' + - name: Build Dist run: pnpm dist + if: env.GITHUB_REF_NAME != 'master' - name: Depoly to Preview uses: https://github.com/cloudflare/wrangler-action@v3 From ab99cf465bd34e2f1cb234448d6fc7a53fbc0279 Mon Sep 17 00:00:00 2001 From: thislight Date: Mon, 22 Jul 2024 21:59:37 +0800 Subject: [PATCH 026/300] ci: build staging bundle for preview --- .forgejo/workflows/depoly.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.forgejo/workflows/depoly.yml b/.forgejo/workflows/depoly.yml index a340d9d..4195610 100644 --- a/.forgejo/workflows/depoly.yml +++ b/.forgejo/workflows/depoly.yml @@ -28,8 +28,13 @@ jobs: - name: Install Dependencies run: pnpm i + - name: Build Dist (Staging) + run: pnpm dist -m staging + if: env.GITHUB_REF_NAME == 'master' + - name: Build Dist run: pnpm dist + if: env.GITHUB_REF_NAME != 'master' - name: Depoly to Preview uses: https://github.com/cloudflare/wrangler-action@v3 From c25ca17043ea4bacc7d14428af19c1822374efb9 Mon Sep 17 00:00:00 2001 From: thislight Date: Mon, 22 Jul 2024 22:04:56 +0800 Subject: [PATCH 027/300] createTimeSource: fix type error --- src/platform/timesrc.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/platform/timesrc.ts b/src/platform/timesrc.ts index dbf51fb..d5d957a 100644 --- a/src/platform/timesrc.ts +++ b/src/platform/timesrc.ts @@ -13,7 +13,7 @@ const TimeSourceContext = createContext>(); export const TimeSourceProvider = TimeSourceContext.Provider; export function createTimeSource() { - let id: number | undefined; + let id: ReturnType | undefined; const [get, set] = createSignal(new Date()); createRenderEffect(() => From cbed46ae776afcca2fa9ad6676d45150c4749ef3 Mon Sep 17 00:00:00 2001 From: thislight Date: Mon, 22 Jul 2024 22:04:56 +0800 Subject: [PATCH 028/300] createTimeSource: fix type error --- src/platform/timesrc.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/platform/timesrc.ts b/src/platform/timesrc.ts index dbf51fb..d5d957a 100644 --- a/src/platform/timesrc.ts +++ b/src/platform/timesrc.ts @@ -13,7 +13,7 @@ const TimeSourceContext = createContext>(); export const TimeSourceProvider = TimeSourceContext.Provider; export function createTimeSource() { - let id: number | undefined; + let id: ReturnType | undefined; const [get, set] = createSignal(new Date()); createRenderEffect(() => From c204bdd70ba507d90d2a604737b5f0e1a2b02486 Mon Sep 17 00:00:00 2001 From: thislight Date: Tue, 23 Jul 2024 08:28:47 +0800 Subject: [PATCH 029/300] Settings: prefetching toots --- src/settings/Settings.tsx | 10 +++++++++- src/settings/stores.ts | 6 +++++- src/timelines/Home.tsx | 7 +++++-- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/settings/Settings.tsx b/src/settings/Settings.tsx index e93de43..40bbffd 100644 --- a/src/settings/Settings.tsx +++ b/src/settings/Settings.tsx @@ -23,9 +23,12 @@ import { css } from "solid-styled"; import { useSignedInProfiles } from "../masto/acct.js"; import { signOut, type Account } from "../accounts/stores.js"; import { intlFormat } from "date-fns"; +import { useStore } from "@nanostores/solid"; +import { $settings } from "./stores.js"; const Settings: ParentComponent = () => { const navigate = useNavigate(); + const settings$ = useStore($settings); const [profiles] = useSignedInProfiles(); @@ -96,7 +99,12 @@ const Settings: ParentComponent = () => { Prefetch Toots - + + $settings.setKey("prefetchTootsDisabled", !e.target.checked) + } + /> diff --git a/src/settings/stores.ts b/src/settings/stores.ts index 7d71ac0..d3ddc24 100644 --- a/src/settings/stores.ts +++ b/src/settings/stores.ts @@ -2,6 +2,10 @@ import { persistentMap } from "@nanostores/persistent"; type Settings = { onGoingOAuth2Process?: string + prefetchTootsDisabled?: boolean } -export const $settings = persistentMap("settings::", {}) +export const $settings = persistentMap("settings::", {}, { + encode: JSON.stringify, + decode: JSON.parse +}) diff --git a/src/timelines/Home.tsx b/src/timelines/Home.tsx index 0738a37..8d14d76 100644 --- a/src/timelines/Home.tsx +++ b/src/timelines/Home.tsx @@ -35,6 +35,8 @@ import { Create as CreateTootIcon } from "@suid/icons-material"; import { useTimeline } from "../masto/timelines"; import { makeEventListener } from "@solid-primitives/event-listener"; import BottomSheet from "../material/BottomSheet"; +import { $settings } from "../settings/stores"; +import { useStore } from "@nanostores/solid"; const TimelinePanel: Component<{ client: mastodon.rest.Client; @@ -153,12 +155,13 @@ const Home: ParentComponent = (props) => { useDocumentTitle("Timelines"); const now = createTimeSource(); + const settings$ = useStore($settings) const sessions = useSessions(); const client = () => sessions()[0].client; const [profile] = useAcctProfile(client); const [panelOffset, setPanelOffset] = createSignal(0); - const [prefetching, setPrefetching] = createSignal(true); + const prefetching = () => !settings$().prefetchTootsDisabled const [currentFocusOn, setCurrentFocusOn] = createSignal([]); const [focusRange, setFocusRange] = createSignal([0, 0] as readonly [ number, @@ -279,7 +282,7 @@ const Home: ParentComponent = (props) => { - setPrefetching((x) => !x)}> + $settings.setKey("prefetchTootsDisabled", !$settings.get().prefetchTootsDisabled)}> Prefetch Toots From 6ad794eae59939d788126dc48316aa9193f3360c Mon Sep 17 00:00:00 2001 From: thislight Date: Tue, 23 Jul 2024 08:28:47 +0800 Subject: [PATCH 030/300] Settings: prefetching toots --- src/settings/Settings.tsx | 10 +++++++++- src/settings/stores.ts | 6 +++++- src/timelines/Home.tsx | 7 +++++-- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/settings/Settings.tsx b/src/settings/Settings.tsx index e93de43..40bbffd 100644 --- a/src/settings/Settings.tsx +++ b/src/settings/Settings.tsx @@ -23,9 +23,12 @@ import { css } from "solid-styled"; import { useSignedInProfiles } from "../masto/acct.js"; import { signOut, type Account } from "../accounts/stores.js"; import { intlFormat } from "date-fns"; +import { useStore } from "@nanostores/solid"; +import { $settings } from "./stores.js"; const Settings: ParentComponent = () => { const navigate = useNavigate(); + const settings$ = useStore($settings); const [profiles] = useSignedInProfiles(); @@ -96,7 +99,12 @@ const Settings: ParentComponent = () => { Prefetch Toots - + + $settings.setKey("prefetchTootsDisabled", !e.target.checked) + } + /> diff --git a/src/settings/stores.ts b/src/settings/stores.ts index 7d71ac0..d3ddc24 100644 --- a/src/settings/stores.ts +++ b/src/settings/stores.ts @@ -2,6 +2,10 @@ import { persistentMap } from "@nanostores/persistent"; type Settings = { onGoingOAuth2Process?: string + prefetchTootsDisabled?: boolean } -export const $settings = persistentMap("settings::", {}) +export const $settings = persistentMap("settings::", {}, { + encode: JSON.stringify, + decode: JSON.parse +}) diff --git a/src/timelines/Home.tsx b/src/timelines/Home.tsx index 0738a37..8d14d76 100644 --- a/src/timelines/Home.tsx +++ b/src/timelines/Home.tsx @@ -35,6 +35,8 @@ import { Create as CreateTootIcon } from "@suid/icons-material"; import { useTimeline } from "../masto/timelines"; import { makeEventListener } from "@solid-primitives/event-listener"; import BottomSheet from "../material/BottomSheet"; +import { $settings } from "../settings/stores"; +import { useStore } from "@nanostores/solid"; const TimelinePanel: Component<{ client: mastodon.rest.Client; @@ -153,12 +155,13 @@ const Home: ParentComponent = (props) => { useDocumentTitle("Timelines"); const now = createTimeSource(); + const settings$ = useStore($settings) const sessions = useSessions(); const client = () => sessions()[0].client; const [profile] = useAcctProfile(client); const [panelOffset, setPanelOffset] = createSignal(0); - const [prefetching, setPrefetching] = createSignal(true); + const prefetching = () => !settings$().prefetchTootsDisabled const [currentFocusOn, setCurrentFocusOn] = createSignal([]); const [focusRange, setFocusRange] = createSignal([0, 0] as readonly [ number, @@ -279,7 +282,7 @@ const Home: ParentComponent = (props) => { - setPrefetching((x) => !x)}> + $settings.setKey("prefetchTootsDisabled", !$settings.get().prefetchTootsDisabled)}> Prefetch Toots From 48b417e005a977653e38452bd5700f455540549e Mon Sep 17 00:00:00 2001 From: thislight Date: Tue, 23 Jul 2024 14:16:35 +0800 Subject: [PATCH 031/300] configure local debugging options --- tools/certs/localhost.direct.crt | 100 +++++++++++++++++++++++++++++++ tools/certs/localhost.direct.key | 28 +++++++++ vite.config.ts | 11 ++++ 3 files changed, 139 insertions(+) create mode 100644 tools/certs/localhost.direct.crt create mode 100644 tools/certs/localhost.direct.key diff --git a/tools/certs/localhost.direct.crt b/tools/certs/localhost.direct.crt new file mode 100644 index 0000000..29a8534 --- /dev/null +++ b/tools/certs/localhost.direct.crt @@ -0,0 +1,100 @@ +-----BEGIN CERTIFICATE----- +MIIGaDCCBVCgAwIBAgIMcgWlFk4ihQWQO96fMA0GCSqGSIb3DQEBCwUAMFUxCzAJ +BgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMSswKQYDVQQDEyJH +bG9iYWxTaWduIEdDQyBSNiBBbHBoYVNTTCBDQSAyMDIzMB4XDTI0MDQxNzE5MTkz +OVoXDTI1MDUxOTE5MTkzOFowHTEbMBkGA1UEAwwSKi5sb2NhbGhvc3QuZGlyZWN0 +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl7j/nKHNPbO+9oCQyKOV +sbSe3lJLSUup2Tr/nCBgPUdBJE4ZrrhgLYz49qU9d/tXQG2thywa3bcVMq6Vv7Wl +pzPEJzsGNgAp1e8Z++aN8VoUb46BlsvAOAUEOYcfk3SVfM85orEhBVYswUfunptM +LW75zAO+kLgbgzpAVk6vtgWWEXNMVVdA6hOitNWKbR6s5Qh8wGJ+YmhYMfn+lcxX +e9e8gmPFZ6EegGSu1ZFP9KlSq8X6udSYSOZPccjdLcjbznx4opbRfgfT09O5IZw2 +SSoHvRotDxY/BiPaubmQnhz/xrMoXyJm6TDibYnfPvVQD5946+euP3gS4IfA6C5O +VwIDAQABo4IDbjCCA2owDgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAwgZkG +CCsGAQUFBwEBBIGMMIGJMEkGCCsGAQUFBzAChj1odHRwOi8vc2VjdXJlLmdsb2Jh +bHNpZ24uY29tL2NhY2VydC9nc2djY3I2YWxwaGFzc2xjYTIwMjMuY3J0MDwGCCsG +AQUFBzABhjBodHRwOi8vb2NzcC5nbG9iYWxzaWduLmNvbS9nc2djY3I2YWxwaGFz +c2xjYTIwMjMwVwYDVR0gBFAwTjAIBgZngQwBAgEwQgYKKwYBBAGgMgoBAzA0MDIG +CCsGAQUFBwIBFiZodHRwczovL3d3dy5nbG9iYWxzaWduLmNvbS9yZXBvc2l0b3J5 +LzBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8vY3JsLmdsb2JhbHNpZ24uY29tL2dz +Z2NjcjZhbHBoYXNzbGNhMjAyMy5jcmwwLwYDVR0RBCgwJoISKi5sb2NhbGhvc3Qu +ZGlyZWN0ghBsb2NhbGhvc3QuZGlyZWN0MB0GA1UdJQQWMBQGCCsGAQUFBwMBBggr +BgEFBQcDAjAfBgNVHSMEGDAWgBS9BbfzipM8c8t5+g+FEqF3lhiRdDAdBgNVHQ4E +FgQUKI953RG67hpYzTKIgOFfjOhCFHUwggF9BgorBgEEAdZ5AgQCBIIBbQSCAWkB +ZwB2AKLjCuRF772tm3447Udnd1PXgluElNcrXhssxLlQpEfnAAABju2AJRgAAAQD +AEcwRQIhAM6LOxsJZpalFLVL5gxcPVg/esjcs77aMy55RbEsugIcAiA+eXsLDS0l +L2LAVio6ccRujBXv4AVX8+UMEjxTCJOK8gB1ABNK3xq1mEIJeAxv70x6kaQWtyNJ +zlhXat+u2qfCq+AiAAABju2AJUoAAAQDAEYwRAIgafNBrzSDplrC/23Al8N62TGN +df6/I3sFbRdK1WjBrCsCIEXSOPPQrhEEoMZN8ZGRzkY7znL0zWuJsDA2IDj7+mUQ +AHYATnWjJ1yaEMM4W2zU3z9S6x3w4I4bjWnAsfpksWKaOd8AAAGO7YAmKAAABAMA +RzBFAiEA72BBCCM0QbJ1iN6jr9xBf51RNDjI6vV3me/v2m0CjvACICazjNaoB080 +cqeQVF9ROzyHkaYUkb7vpeDd+EZeMhhWMA0GCSqGSIb3DQEBCwUAA4IBAQBBImJh +WM2CJEEALTrfPO4qiTig0jr9GoIhW0Vy31qiIfOchv8yNBTCc01Zd4LKqnpNId7K +a3TmMEyt/kf5PUSVkoVhBlk2wOdbtNvzxmc1VgUteBcng99GQNs4TJ6kOTuz9T0P +ycvgB48A7cjLtQ/bQSYWvJkn46VgYAIofBUrX7Bc4gLCs/XobADO5iLm9vvmvhlM +TigYA6vG4jgSOHnNOyAgus3FVupFA7Xsyo3lxo8BKD2/DkeJykc505i+s3xF6Tn0 +sv7t7GQAukAu/AUiPIvRYYXzFBebx14/nuCjwRvhYt5O/At2dzt+ctNmyfpD/NAa +1cuNyikOi8Y/8hUQ +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFjDCCA3SgAwIBAgIQfx8skC6D0OO2+zvuR4tegDANBgkqhkiG9w0BAQsFADBM +MSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSNjETMBEGA1UEChMKR2xv +YmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjAeFw0yMzA3MTkwMzQzMjVaFw0y +NjA3MTkwMDAwMDBaMFUxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWdu +IG52LXNhMSswKQYDVQQDEyJHbG9iYWxTaWduIEdDQyBSNiBBbHBoYVNTTCBDQSAy +MDIzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA00Jvk5ADppO0rgDn +j1M14XIb032Aas409JJFAb8cUjipFOth7ySLdaWLe3s63oSs5x3eWwzTpX4BFkzZ +bxT1eoJSHfT2M0wZ5QOPcCIjsr+YB8TAvV2yJSyq+emRrN/FtgCSTaWXSJ5jipW8 +SJ/VAuXPMzuAP2yYpuPcjjQ5GyrssDXgu+FhtYxqyFP7BSvx9jQhh5QV5zhLycua +n8n+J0Uw09WRQK6JGQ5HzDZQinkNel+fZZNRG1gE9Qeh+tHBplrkalB1g85qJkPO +J7SoEvKsmDkajggk/sSq7NPyzFaa/VBGZiRRG+FkxCBniGD5618PQ4trcwHyMojS +FObOHQIDAQABo4IBXzCCAVswDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsG +AQUFBwMBBggrBgEFBQcDAjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBS9 +BbfzipM8c8t5+g+FEqF3lhiRdDAfBgNVHSMEGDAWgBSubAWjkxPioufi1xzWx/B/ +yGdToDB7BggrBgEFBQcBAQRvMG0wLgYIKwYBBQUHMAGGImh0dHA6Ly9vY3NwMi5n +bG9iYWxzaWduLmNvbS9yb290cjYwOwYIKwYBBQUHMAKGL2h0dHA6Ly9zZWN1cmUu +Z2xvYmFsc2lnbi5jb20vY2FjZXJ0L3Jvb3QtcjYuY3J0MDYGA1UdHwQvMC0wK6Ap +oCeGJWh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5jb20vcm9vdC1yNi5jcmwwIQYDVR0g +BBowGDAIBgZngQwBAgEwDAYKKwYBBAGgMgoBAzANBgkqhkiG9w0BAQsFAAOCAgEA +fMkkMo5g4mn1ft4d4xR2kHzYpDukhC1XYPwfSZN3A9nEBadjdKZMH7iuS1vF8uSc +g26/30DRPen2fFRsr662ECyUCR4OfeiiGNdoQvcesM9Xpew3HLQP4qHg+s774hNL +vGRD4aKSKwFqLMrcqCw6tEAfX99tFWsD4jzbC6k8tjSLzEl0fTUlfkJaWpvLVkpg +9et8tD8d51bymCg5J6J6wcXpmsSGnksBobac1+nXmgB7jQC9edU8Z41FFo87BV3k +CtrWWsdkQavObMsXUPl/AO8y/jOuAWz0wyvPnKom+o6W4vKDY6/6XPypNdebOJ6m +jyaILp0quoQvhjx87BzENh5s57AIOyIGpS0sDEChVDPzLEfRsH2FJ8/W5woF0nvs +BTqfYSCqblQbHeDDtCj7Mlf8JfqaMuqcbE4rMSyfeHyCdZQwnc/r9ujnth691AJh +xyYeCM04metJIe7cB6d4dFm+Pd5ervY4x32r0uQ1Q0spy1VjNqUJjussYuXNyMmF +HSuLQQ6PrePmH5lcSMQpYKzPoD/RiNVD/PK0O3vuO5vh3o7oKb1FfzoanDsFFTrw +0aLOdRW/tmLPWVNVlAb8ad+B80YJsL4HXYnQG8wYAFb8LhwSDyT9v+C1C1lcIHE7 +nE0AAp9JSHxDYsma9pi4g0Phg3BgOm2euTRzw7R0SzU= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFUTCCBDmgAwIBAgIQdR4/VknnTLv2nQAmtnyqjDANBgkqhkiG9w0BAQwFADBX +MQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTEQMA4GA1UE +CxMHUm9vdCBDQTEbMBkGA1UEAxMSR2xvYmFsU2lnbiBSb290IENBMB4XDTE5MDYx +OTAwMDAwMFoXDTI4MDEyODEyMDAwMFowTDEgMB4GA1UECxMXR2xvYmFsU2lnbiBS +b290IENBIC0gUjYxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh +bFNpZ24wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCVB+hzymb57BTK +ezz3DQjxtEULLIK0SMbrWzyug7hBkjMUpG9/6SrMxrCIa8W2idHGsv8UzlEUIexK +3RtaxtaH7k06FQbtZGYLkoDKRN5zlE7zp4l/T3hjCMgSUG1CZi9NuXkoTVIaihqA +txmBDn7EirxkTCEcQ2jXPTyKxbJm1ZCatzEGxb7ibTIGph75ueuqo7i/voJjUNDw +GInf5A959eqiHyrScC5757yTu21T4kh8jBAHOP9msndhfuDqjDyqtKT285VKEgdt +/Yyyic/QoGF3yFh0sNQjOvddOsqi250J3l1ELZDxgc1Xkvp+vFAEYzTfa5MYvms2 +sjnkrCQ2t/DvthwTV5O23rL44oW3c6K4NapF8uCdNqFvVIrxclZuLojFUUJEFZTu +o8U4lptOTloLR/MGNkl3MLxxN+Wm7CEIdfzmYRY/d9XZkZeECmzUAk10wBTt/Tn7 +g/JeFKEEsAvp/u6P4W4LsgizYWYJarEGOmWWWcDwNf3J2iiNGhGHcIEKqJp1HZ46 +hgUAntuA1iX53AWeJ1lMdjlb6vmlodiDD9H/3zAR+YXPM0j1ym1kFCx6WE/TSwhJ +xZVkGmMOeT31s4zKWK2cQkV5bg6HGVxUsWW2v4yb3BPpDW+4LtxnbsmLEbWEFIoA +GXCDeZGXkdQaJ783HjIH2BRjPChMrwIDAQABo4IBIjCCAR4wDgYDVR0PAQH/BAQD +AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFK5sBaOTE+Ki5+LXHNbH8H/I +Z1OgMB8GA1UdIwQYMBaAFGB7ZhpFDZfKiVAvfQTNNKj//P1LMD0GCCsGAQUFBwEB +BDEwLzAtBggrBgEFBQcwAYYhaHR0cDovL29jc3AuZ2xvYmFsc2lnbi5jb20vcm9v +dHIxMDMGA1UdHwQsMCowKKAmoCSGImh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5jb20v +cm9vdC5jcmwwRwYDVR0gBEAwPjA8BgRVHSAAMDQwMgYIKwYBBQUHAgEWJmh0dHBz +Oi8vd3d3Lmdsb2JhbHNpZ24uY29tL3JlcG9zaXRvcnkvMA0GCSqGSIb3DQEBDAUA +A4IBAQDHrE3fEsZgYRw59I03e5wt03B45il4hAHmquLc33pbkGZn6r3GgoKVzvwC +aBgtl6Jp93gZD8G5UjAFLj840jWDhOP7KSX6Q7rGjOsWNFFDJJLDUKQeJpB1PTRu +HqVI15zxiCl/VCP7mbTW7X/pILaFOPO+T0Qj+TUOU37WOjk6wdeyyOFiDhKSwH2Y +VE4YlAo0R10Jo3uNnSCFBgPw7gy1xt1+ajCbnzZYpQNXFy/0Lp9h3JOClE7TGvli +FUazCjxvhHm5YWqulA51wFT2K9LRiiEWw3UJAgTTmxASitVHHLb3erkETk6SCwGv +OG1eD0qLwuSeARZmhw3xFOCvMHeQ +-----END CERTIFICATE----- diff --git a/tools/certs/localhost.direct.key b/tools/certs/localhost.direct.key new file mode 100644 index 0000000..78b1a24 --- /dev/null +++ b/tools/certs/localhost.direct.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCXuP+coc09s772 +gJDIo5WxtJ7eUktJS6nZOv+cIGA9R0EkThmuuGAtjPj2pT13+1dAba2HLBrdtxUy +rpW/taWnM8QnOwY2ACnV7xn75o3xWhRvjoGWy8A4BQQ5hx+TdJV8zzmisSEFVizB +R+6em0wtbvnMA76QuBuDOkBWTq+2BZYRc0xVV0DqE6K01YptHqzlCHzAYn5iaFgx ++f6VzFd717yCY8VnoR6AZK7VkU/0qVKrxfq51JhI5k9xyN0tyNvOfHiiltF+B9PT +07khnDZJKge9Gi0PFj8GI9q5uZCeHP/GsyhfImbpMOJtid8+9VAPn3jr564/eBLg +h8DoLk5XAgMBAAECggEAEFqIcsGd9cCiHL/O21GGmRj25s/H/aaCMEADvThgJzq+ +8sLYUdTdyQsg6rT04zHcPb2UrrU6UBuj1UqsKXXS3SrfQbtC+B8cY0raaiR3uEQV +X9DkdvSPS3p+8hR2etZeJo3PkJG3FXQsbsjqF351v4/urObaa47sqEBnHuZsWhol +jMEfztg5NWHz1r02UuUCPGy/uIn5MBQVcawn1LZuEepUc+El+fdwlFIC/TQj2Zuh +EZUjMTFzaPDKhoXUvNlIi9YqchRsyB72IDJf/XxAKIp1QXqMcIH4c4sgwB7rbLiD +G9xu7B68OTAhUdF0SJnuz3MhLlc0fqD0xRJoC8M5gQKBgQDBtHrPfqw61dDf3ghr +EaCLDknPtmgtcH1tED3e6YfxEaQOnP/O03eigpakMBGbxpcGsSnkAD8KkBbWE9Wp +FXo4xI4D4e4XZ0r7UciChXamxOWwwv5yUbkB+hie1WZSl5pVqc4ZS7p/1D4mDD8Y +fnbXInF+mOtSSNZJ9RL3hTKLuQKBgQDIhChy+3yibuQz4hHwrSEr7yKMYFAR9TSl +7AqjQ/Vw1uhb6dOD8nrcG9zaQhZsprKGpNuyw0Xy0U0skBfnv6nEMbKBNdP3YyQe +/T3xUu7Z2kdRnaF1Vn/+g6bECXJs3FRIioBbA9XFKfRibxuWjPPpXZk5w3YF73nx +SkpF1DlSjwKBgQCB0MNxZbJlJ8B5F6NKpiCSsLu00ckVksrsGbNtPdLWM31gMcWa +Rcxqg9wTIwfZ/whd+sNZQvT8zj4PsHFDhNpJSyjl3zciRh5ROakIGAvBjjlk8fl2 +geBcO9DeOaP+fA15lXhDKaZOXt5bv19VugNJAJNRRYiHt7qtC+pvKbwLOQKBgCP+ +NRSOuAygQy5dAkNlkHLGdjkkgLr4fP7bo/0ykbgzm3oEOweQWyVvivFSs5vFQH6S +0S0BiGjR0TySkPf0m5CwKw6ujuH1VeKKKrhK3r0URYEM/pKFeGxDTYga+gM4eZib +4/Zydcjygv+4WgdoPdBCEOMhhuoB1q3NXA+0zKVZAoGBAIHR7Udk8rzwuno5IGc8 +AgdMhkDojqQaDJdJlAAmmX1IoqJOpyGdws+uUtQ/YnnNqQn2eTTlPxnl5ldtBYmR +iT8XWLi4jIsY0jh6fLCaZwcu4RB0Rrw1N6nsZQFr/PG61ZPa8RJBfAGRE3QWc3WN +L/Q1JdU0auJcvQn78yA/gLVp +-----END PRIVATE KEY----- diff --git a/vite.config.ts b/vite.config.ts index 26d01b6..7ebb905 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -17,9 +17,20 @@ export default defineConfig(({ mode }) => ({ }), VitePWA({ registerType: "autoUpdate", + devOptions: { + enabled: mode === "staging", + }, }), version(), ], + server: { + https: { + // localhost.direct: https://github.com/Upinel/localhost.direct + key: "tools/certs/localhost.direct.key", + cert: "tools/certs/localhost.direct.crt", + passphrase: "localhost", + }, + }, define: { "import.meta.env.BUILT_AT": `"${new Date().toISOString()}"`, }, From 067a363550c5a0d29d266d88ccb45d0f368d7321 Mon Sep 17 00:00:00 2001 From: thislight Date: Tue, 23 Jul 2024 14:16:35 +0800 Subject: [PATCH 032/300] configure local debugging options --- vite.config.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/vite.config.ts b/vite.config.ts index 26d01b6..7ebb905 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -17,9 +17,20 @@ export default defineConfig(({ mode }) => ({ }), VitePWA({ registerType: "autoUpdate", + devOptions: { + enabled: mode === "staging", + }, }), version(), ], + server: { + https: { + // localhost.direct: https://github.com/Upinel/localhost.direct + key: "tools/certs/localhost.direct.key", + cert: "tools/certs/localhost.direct.crt", + passphrase: "localhost", + }, + }, define: { "import.meta.env.BUILT_AT": `"${new Date().toISOString()}"`, }, From d0feb118c9453e4e1b5b6d4a590415b27f6821de Mon Sep 17 00:00:00 2001 From: thislight Date: Wed, 24 Jul 2024 14:27:20 +0800 Subject: [PATCH 033/300] Timelines: respect the notch --- .gitignore | 3 ++- index.html | 5 ++++- src/App.css | 5 +++++ src/App.tsx | 1 - src/settings/Settings.tsx | 2 +- src/timelines/Home.tsx | 10 +++++----- 6 files changed, 17 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index d26c746..fb699e4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ node_modules -dist/ \ No newline at end of file +dist/ +dev-dist/ \ No newline at end of file diff --git a/index.html b/index.html index 6d30de8..2712433 100644 --- a/index.html +++ b/index.html @@ -2,8 +2,11 @@ - + + + Tutu + diff --git a/src/App.css b/src/App.css index 26dd292..bba585f 100644 --- a/src/App.css +++ b/src/App.css @@ -1,5 +1,10 @@ :root { + --safe-area-inset-top: env(safe-area-inset-top); + --safe-area-inset-left: env(safe-area-inset-left); + --safe-area-inset-bottom: env(safe-area-inset-bottom); + --safe-area-inset-right: env(safe-area-inset-right); background-color: var(--tutu-color-surface, transparent); + overscroll-behavior-block: contain; } .custom-emoji { diff --git a/src/App.tsx b/src/App.tsx index 8a711e1..55e9971 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -13,7 +13,6 @@ import { createMastoClientFor, type Session, } from "./masto/clients.js"; -import "./App.css"; import { $accounts } from "./accounts/stores.js"; import { useStore } from "@nanostores/solid"; diff --git a/src/settings/Settings.tsx b/src/settings/Settings.tsx index 40bbffd..36a4026 100644 --- a/src/settings/Settings.tsx +++ b/src/settings/Settings.tsx @@ -42,7 +42,7 @@ const Settings: ParentComponent = () => { } .setting-list { - padding-bottom: calc(env(safe-area-inset-bottom, 0px) + 16px); + padding-bottom: calc(var(--safe-area-inset-bottom, 0px) + 16px); } `; return ( diff --git a/src/timelines/Home.tsx b/src/timelines/Home.tsx index 8d14d76..c70cf39 100644 --- a/src/timelines/Home.tsx +++ b/src/timelines/Home.tsx @@ -122,7 +122,7 @@ const TimelinePanel: Component<{
    { max-width: 560px; height: 100%; padding: 40px 16px; - max-height: calc(100vh - var(--scaffold-topbar-height, 0px)); - max-height: calc(100dvh - var(--scaffold-topbar-height, 0px)); scroll-snap-align: center; @media (max-width: 600px) { @@ -257,6 +255,8 @@ const Home: ParentComponent = (props) => { scroll-snap-stop: always; height: calc(100vh - var(--scaffold-topbar-height, 0px)); height: calc(100dvh - var(--scaffold-topbar-height, 0px)); + padding-left: var(--safe-area-inset-left, 0); + padding-right: var(--safe-area-inset-right, 0); @media (max-width: 600px) { grid-auto-columns: 100%; @@ -269,7 +269,7 @@ const Home: ParentComponent = (props) => { - + Home From f0a614d4f0a13aff48168a0daf78c008cce7fcb8 Mon Sep 17 00:00:00 2001 From: thislight Date: Wed, 24 Jul 2024 14:27:20 +0800 Subject: [PATCH 034/300] Timelines: respect the notch --- .gitignore | 3 ++- index.html | 5 ++++- src/App.css | 5 +++++ src/App.tsx | 1 - src/settings/Settings.tsx | 2 +- src/timelines/Home.tsx | 10 +++++----- 6 files changed, 17 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index d26c746..fb699e4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ node_modules -dist/ \ No newline at end of file +dist/ +dev-dist/ \ No newline at end of file diff --git a/index.html b/index.html index 6d30de8..2712433 100644 --- a/index.html +++ b/index.html @@ -2,8 +2,11 @@ - + + + Tutu + diff --git a/src/App.css b/src/App.css index 26dd292..bba585f 100644 --- a/src/App.css +++ b/src/App.css @@ -1,5 +1,10 @@ :root { + --safe-area-inset-top: env(safe-area-inset-top); + --safe-area-inset-left: env(safe-area-inset-left); + --safe-area-inset-bottom: env(safe-area-inset-bottom); + --safe-area-inset-right: env(safe-area-inset-right); background-color: var(--tutu-color-surface, transparent); + overscroll-behavior-block: contain; } .custom-emoji { diff --git a/src/App.tsx b/src/App.tsx index 8a711e1..55e9971 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -13,7 +13,6 @@ import { createMastoClientFor, type Session, } from "./masto/clients.js"; -import "./App.css"; import { $accounts } from "./accounts/stores.js"; import { useStore } from "@nanostores/solid"; diff --git a/src/settings/Settings.tsx b/src/settings/Settings.tsx index 40bbffd..36a4026 100644 --- a/src/settings/Settings.tsx +++ b/src/settings/Settings.tsx @@ -42,7 +42,7 @@ const Settings: ParentComponent = () => { } .setting-list { - padding-bottom: calc(env(safe-area-inset-bottom, 0px) + 16px); + padding-bottom: calc(var(--safe-area-inset-bottom, 0px) + 16px); } `; return ( diff --git a/src/timelines/Home.tsx b/src/timelines/Home.tsx index 8d14d76..c70cf39 100644 --- a/src/timelines/Home.tsx +++ b/src/timelines/Home.tsx @@ -122,7 +122,7 @@ const TimelinePanel: Component<{
    { max-width: 560px; height: 100%; padding: 40px 16px; - max-height: calc(100vh - var(--scaffold-topbar-height, 0px)); - max-height: calc(100dvh - var(--scaffold-topbar-height, 0px)); scroll-snap-align: center; @media (max-width: 600px) { @@ -257,6 +255,8 @@ const Home: ParentComponent = (props) => { scroll-snap-stop: always; height: calc(100vh - var(--scaffold-topbar-height, 0px)); height: calc(100dvh - var(--scaffold-topbar-height, 0px)); + padding-left: var(--safe-area-inset-left, 0); + padding-right: var(--safe-area-inset-right, 0); @media (max-width: 600px) { grid-auto-columns: 100%; @@ -269,7 +269,7 @@ const Home: ParentComponent = (props) => { - + Home From cd02dc205351d9a0eb957228788f35b95f8b765c Mon Sep 17 00:00:00 2001 From: thislight Date: Mon, 5 Aug 2024 14:12:33 +0800 Subject: [PATCH 035/300] switch to bun --- .forgejo/workflows/depoly.yml | 20 +- bun.lockb | Bin 0 -> 233176 bytes package.json | 2 +- pnpm-lock.yaml | 5530 --------------------------------- 4 files changed, 12 insertions(+), 5540 deletions(-) create mode 100755 bun.lockb delete mode 100644 pnpm-lock.yaml diff --git a/.forgejo/workflows/depoly.yml b/.forgejo/workflows/depoly.yml index 4195610..385fbb2 100644 --- a/.forgejo/workflows/depoly.yml +++ b/.forgejo/workflows/depoly.yml @@ -13,27 +13,29 @@ jobs: - name: Checkout uses: actions/checkout@v4 - - name: Setup pnpm - run: | - corepack install - pnpm config set store-dir /tmp/pnpm-store + - name: Setup Bun + uses: oven-sh/setup-bun@v2 + with: + bun-version-file: 'package.json' - name: Cache Dependencies id: dependencies-cache uses: actions/cache@v4 with: - path: /tmp/pnpm-store - key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }} + path: ~/.bun/install/cache + key: ${{ runner.os }}-bun-${{ hashFiles('**/bun.lockb') }} + restore-keys: | + ${{ runner.os }}-bun- - name: Install Dependencies - run: pnpm i + run: bun install - name: Build Dist (Staging) - run: pnpm dist -m staging + run: bun dist -m staging if: env.GITHUB_REF_NAME == 'master' - name: Build Dist - run: pnpm dist + run: bun dist if: env.GITHUB_REF_NAME != 'master' - name: Depoly to Preview diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..c0145f0bf66ad2e28083aa3f7fb0a9c6996162c3 GIT binary patch literal 233176 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∾9@F3To#K@H8c>)-=(cI^6 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 E0B2Y<-~a#s literal 0 HcmV?d00001 diff --git a/package.json b/package.json index 8b98434..056139a 100644 --- a/package.json +++ b/package.json @@ -42,5 +42,5 @@ "solid-js": "^1.8.18", "solid-styled": "^0.11.1" }, - "packageManager": "pnpm@9.5.0+sha512.140036830124618d624a2187b50d04289d5a087f326c9edfc0ccd733d76c4f52c3a313d4fc148794a2a9d81553016004e6742e8cf850670268a7387fc220c903" + "packageManager": "bun@1.1.21" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml deleted file mode 100644 index 9651bfd..0000000 --- a/pnpm-lock.yaml +++ /dev/null @@ -1,5530 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - dependencies: - '@nanostores/persistent': - specifier: ^0.9.1 - version: 0.9.1(nanostores@0.9.5) - '@nanostores/solid': - specifier: ^0.4.2 - version: 0.4.2(nanostores@0.9.5)(solid-js@1.8.18) - '@solid-primitives/event-listener': - specifier: ^2.3.3 - version: 2.3.3(solid-js@1.8.18) - '@solid-primitives/resize-observer': - specifier: ^2.0.25 - version: 2.0.25(solid-js@1.8.18) - '@solidjs/router': - specifier: ^0.11.5 - version: 0.11.5(solid-js@1.8.18) - '@suid/icons-material': - specifier: ^0.7.0 - version: 0.7.0(solid-js@1.8.18) - '@suid/material': - specifier: ^0.16.0 - version: 0.16.0(solid-js@1.8.18) - blurhash: - specifier: ^2.0.5 - version: 2.0.5 - date-fns: - specifier: ^3.6.0 - version: 3.6.0 - hammerjs: - specifier: ^2.0.8 - version: 2.0.8 - masto: - specifier: ^6.8.0 - version: 6.8.0 - nanostores: - specifier: ^0.9.5 - version: 0.9.5 - solid-js: - specifier: ^1.8.18 - version: 1.8.18 - solid-styled: - specifier: ^0.11.1 - version: 0.11.1(solid-js@1.8.18) - devDependencies: - '@suid/vite-plugin': - specifier: ^0.2.0 - version: 0.2.0(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)) - '@types/hammerjs': - specifier: ^2.0.45 - version: 2.0.45 - postcss: - specifier: ^8.4.39 - version: 8.4.39 - prettier: - specifier: ^3.3.2 - version: 3.3.2 - typescript: - specifier: ^5.5.2 - version: 5.5.2 - vite: - specifier: ^5.3.2 - version: 5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2) - vite-plugin-package-version: - specifier: ^1.1.0 - version: 1.1.0(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)) - vite-plugin-pwa: - specifier: ^0.20.0 - version: 0.20.0(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.1.0) - vite-plugin-solid: - specifier: ^2.10.2 - version: 2.10.2(solid-js@1.8.18)(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)) - vite-plugin-solid-styled: - specifier: ^0.11.1 - version: 0.11.1(rollup@2.79.1)(solid-styled@0.11.1(solid-js@1.8.18))(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)) - wrangler: - specifier: ^3.64.0 - version: 3.64.0 - -packages: - - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - - '@apideck/better-ajv-errors@0.3.6': - resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} - engines: {node: '>=10'} - peerDependencies: - ajv: '>=8' - - '@babel/code-frame@7.24.7': - resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.24.7': - resolution: {integrity: sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.24.8': - resolution: {integrity: sha512-c4IM7OTg6k1Q+AJ153e2mc2QVTezTwnb4VzquwcyiEzGnW0Kedv4do/TrkU98qPeC5LNiMt/QXwIjzYXLBpyZg==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.24.7': - resolution: {integrity: sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.24.7': - resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.24.8': - resolution: {integrity: sha512-47DG+6F5SzOi0uEvK4wMShmn5yY0mVjVJoWTphdY2B4Rx9wHgjK7Yhtr0ru6nE+sn0v38mzrWOlah0p/YlHHOQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-annotate-as-pure@7.24.7': - resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7': - resolution: {integrity: sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.24.7': - resolution: {integrity: sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.24.8': - resolution: {integrity: sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-create-class-features-plugin@7.24.8': - resolution: {integrity: sha512-4f6Oqnmyp2PP3olgUMmOwC3akxSm5aBYraQ6YDdKy7NcAMkDECHWG0DEnV6M2UAkERgIBhYt8S27rURPg7SxWA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-create-regexp-features-plugin@7.24.7': - resolution: {integrity: sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-define-polyfill-provider@0.6.2': - resolution: {integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - - '@babel/helper-environment-visitor@7.24.7': - resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-function-name@7.24.7': - resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-hoist-variables@7.24.7': - resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-member-expression-to-functions@7.24.8': - resolution: {integrity: sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.18.6': - resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.24.7': - resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.24.7': - resolution: {integrity: sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-module-transforms@7.24.8': - resolution: {integrity: sha512-m4vWKVqvkVAWLXfHCCfff2luJj86U+J0/x+0N3ArG/tP0Fq7zky2dYwMbtPmkc/oulkkbjdL3uWzuoBwQ8R00Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-optimise-call-expression@7.24.7': - resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==} - engines: {node: '>=6.9.0'} - - '@babel/helper-plugin-utils@7.24.7': - resolution: {integrity: sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-plugin-utils@7.24.8': - resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-remap-async-to-generator@7.24.7': - resolution: {integrity: sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-replace-supers@7.24.7': - resolution: {integrity: sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-simple-access@7.24.7': - resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-skip-transparent-expression-wrappers@7.24.7': - resolution: {integrity: sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-split-export-declaration@7.24.7': - resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.24.7': - resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.24.8': - resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.24.7': - resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-option@7.24.7': - resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-option@7.24.8': - resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} - engines: {node: '>=6.9.0'} - - '@babel/helper-wrap-function@7.24.7': - resolution: {integrity: sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.24.7': - resolution: {integrity: sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==} - engines: {node: '>=6.9.0'} - - '@babel/highlight@7.24.7': - resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.24.7': - resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/parser@7.24.8': - resolution: {integrity: sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.7': - resolution: {integrity: sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.7': - resolution: {integrity: sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7': - resolution: {integrity: sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.13.0 - - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.7': - resolution: {integrity: sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': - resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-async-generators@7.8.4': - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-class-properties@7.12.13': - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-class-static-block@7.14.5': - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-dynamic-import@7.8.3': - resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-export-namespace-from@7.8.3': - resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-assertions@7.24.7': - resolution: {integrity: sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-attributes@7.24.7': - resolution: {integrity: sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-meta@7.10.4': - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-json-strings@7.8.3': - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-jsx@7.24.7': - resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-logical-assignment-operators@7.10.4': - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-numeric-separator@7.10.4': - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-object-rest-spread@7.8.3': - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-optional-catch-binding@7.8.3': - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-optional-chaining@7.8.3': - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-private-property-in-object@7.14.5': - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-top-level-await@7.14.5': - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-unicode-sets-regex@7.18.6': - resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-transform-arrow-functions@7.24.7': - resolution: {integrity: sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-async-generator-functions@7.24.7': - resolution: {integrity: sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-async-to-generator@7.24.7': - resolution: {integrity: sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-block-scoped-functions@7.24.7': - resolution: {integrity: sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-block-scoping@7.24.7': - resolution: {integrity: sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-class-properties@7.24.7': - resolution: {integrity: sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-class-static-block@7.24.7': - resolution: {integrity: sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.12.0 - - '@babel/plugin-transform-classes@7.24.8': - resolution: {integrity: sha512-VXy91c47uujj758ud9wx+OMgheXm4qJfyhj1P18YvlrQkNOSrwsteHk+EFS3OMGfhMhpZa0A+81eE7G4QC+3CA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-computed-properties@7.24.7': - resolution: {integrity: sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-destructuring@7.24.8': - resolution: {integrity: sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-dotall-regex@7.24.7': - resolution: {integrity: sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-duplicate-keys@7.24.7': - resolution: {integrity: sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-dynamic-import@7.24.7': - resolution: {integrity: sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-exponentiation-operator@7.24.7': - resolution: {integrity: sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-export-namespace-from@7.24.7': - resolution: {integrity: sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-for-of@7.24.7': - resolution: {integrity: sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-function-name@7.24.7': - resolution: {integrity: sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-json-strings@7.24.7': - resolution: {integrity: sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-literals@7.24.7': - resolution: {integrity: sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-logical-assignment-operators@7.24.7': - resolution: {integrity: sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-member-expression-literals@7.24.7': - resolution: {integrity: sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-modules-amd@7.24.7': - resolution: {integrity: sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-modules-commonjs@7.24.8': - resolution: {integrity: sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-modules-systemjs@7.24.7': - resolution: {integrity: sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-modules-umd@7.24.7': - resolution: {integrity: sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-named-capturing-groups-regex@7.24.7': - resolution: {integrity: sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-transform-new-target@7.24.7': - resolution: {integrity: sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-nullish-coalescing-operator@7.24.7': - resolution: {integrity: sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-numeric-separator@7.24.7': - resolution: {integrity: sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-object-rest-spread@7.24.7': - resolution: {integrity: sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-object-super@7.24.7': - resolution: {integrity: sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-optional-catch-binding@7.24.7': - resolution: {integrity: sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-optional-chaining@7.24.8': - resolution: {integrity: sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-parameters@7.24.7': - resolution: {integrity: sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-private-methods@7.24.7': - resolution: {integrity: sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-private-property-in-object@7.24.7': - resolution: {integrity: sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-property-literals@7.24.7': - resolution: {integrity: sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-regenerator@7.24.7': - resolution: {integrity: sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-reserved-words@7.24.7': - resolution: {integrity: sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-shorthand-properties@7.24.7': - resolution: {integrity: sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-spread@7.24.7': - resolution: {integrity: sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-sticky-regex@7.24.7': - resolution: {integrity: sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-template-literals@7.24.7': - resolution: {integrity: sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-typeof-symbol@7.24.8': - resolution: {integrity: sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-unicode-escapes@7.24.7': - resolution: {integrity: sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-unicode-property-regex@7.24.7': - resolution: {integrity: sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-unicode-regex@7.24.7': - resolution: {integrity: sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-unicode-sets-regex@7.24.7': - resolution: {integrity: sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/preset-env@7.24.8': - resolution: {integrity: sha512-vObvMZB6hNWuDxhSaEPTKCwcqkAIuDtE+bQGn4XMXne1DSLzFVY8Vmj1bm+mUQXYNN8NmaQEO+r8MMbzPr1jBQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/preset-modules@0.1.6-no-external-plugins': - resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} - peerDependencies: - '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - - '@babel/regjsgen@0.8.0': - resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} - - '@babel/runtime@7.24.8': - resolution: {integrity: sha512-5F7SDGs1T72ZczbRwbGO9lQi0NLjQxzl6i4lJxLxfW9U5UluCSyEJeniWvnhl3/euNiqQVbo8zruhsDfid0esA==} - engines: {node: '>=6.9.0'} - - '@babel/template@7.24.7': - resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.24.7': - resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.24.8': - resolution: {integrity: sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.24.7': - resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.24.8': - resolution: {integrity: sha512-SkSBEHwwJRU52QEVZBmMBnE5Ux2/6WU1grdYyOhpbCNxbmJrDuDCphBzKZSO3taf0zztp+qkWlymE5tVL5l0TA==} - engines: {node: '>=6.9.0'} - - '@cloudflare/kv-asset-handler@0.3.4': - resolution: {integrity: sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==} - engines: {node: '>=16.13'} - - '@cloudflare/workerd-darwin-64@1.20240701.0': - resolution: {integrity: sha512-XAZa4ZP+qyTn6JQQACCPH09hGZXP2lTnWKkmg5mPwT8EyRzCKLkczAf98vPP5bq7JZD/zORdFWRY0dOTap8zTQ==} - engines: {node: '>=16'} - cpu: [x64] - os: [darwin] - - '@cloudflare/workerd-darwin-arm64@1.20240701.0': - resolution: {integrity: sha512-w80ZVAgfH4UwTz7fXZtk7KmS2FzlXniuQm4ku4+cIgRTilBAuKqjpOjwUCbx5g13Gqcm9NuiHce+IDGtobRTIQ==} - engines: {node: '>=16'} - cpu: [arm64] - os: [darwin] - - '@cloudflare/workerd-linux-64@1.20240701.0': - resolution: {integrity: sha512-UWLr/Anxwwe/25nGv451MNd2jhREmPt/ws17DJJqTLAx6JxwGWA15MeitAIzl0dbxRFAJa+0+R8ag2WR3F/D6g==} - engines: {node: '>=16'} - cpu: [x64] - os: [linux] - - '@cloudflare/workerd-linux-arm64@1.20240701.0': - resolution: {integrity: sha512-3kCnF9kYgov1ggpuWbgpXt4stPOIYtVmPCa7MO2xhhA0TWP6JDUHRUOsnmIgKrvDjXuXqlK16cdg3v+EWsaPJg==} - engines: {node: '>=16'} - cpu: [arm64] - os: [linux] - - '@cloudflare/workerd-windows-64@1.20240701.0': - resolution: {integrity: sha512-6IPGITRAeS67j3BH1rN4iwYWDt47SqJG7KlZJ5bB4UaNAia4mvMBSy/p2p4vA89bbXoDRjMtEvRu7Robu6O7hQ==} - engines: {node: '>=16'} - cpu: [x64] - os: [win32] - - '@cspotcode/source-map-support@0.8.1': - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} - - '@esbuild-plugins/node-globals-polyfill@0.2.3': - resolution: {integrity: sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==} - peerDependencies: - esbuild: '*' - - '@esbuild-plugins/node-modules-polyfill@0.2.2': - resolution: {integrity: sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==} - peerDependencies: - esbuild: '*' - - '@esbuild/aix-ppc64@0.21.5': - resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.17.19': - resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm64@0.21.5': - resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.17.19': - resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - - '@esbuild/android-arm@0.21.5': - resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.17.19': - resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - - '@esbuild/android-x64@0.21.5': - resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.17.19': - resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-arm64@0.21.5': - resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.17.19': - resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - - '@esbuild/darwin-x64@0.21.5': - resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.17.19': - resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-arm64@0.21.5': - resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.17.19': - resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.21.5': - resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.17.19': - resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm64@0.21.5': - resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.17.19': - resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-arm@0.21.5': - resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.17.19': - resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-ia32@0.21.5': - resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.17.19': - resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-loong64@0.21.5': - resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.17.19': - resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-mips64el@0.21.5': - resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.17.19': - resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-ppc64@0.21.5': - resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.17.19': - resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-riscv64@0.21.5': - resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.17.19': - resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-s390x@0.21.5': - resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.17.19': - resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - - '@esbuild/linux-x64@0.21.5': - resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-x64@0.17.19': - resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.21.5': - resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-x64@0.17.19': - resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.21.5': - resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - - '@esbuild/sunos-x64@0.17.19': - resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - - '@esbuild/sunos-x64@0.21.5': - resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.17.19': - resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-arm64@0.21.5': - resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.17.19': - resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-ia32@0.21.5': - resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.17.19': - resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - - '@esbuild/win32-x64@0.21.5': - resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - - '@fastify/busboy@2.1.1': - resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} - engines: {node: '>=14'} - - '@jridgewell/gen-mapping@0.3.5': - resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} - engines: {node: '>=6.0.0'} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - - '@jridgewell/source-map@0.3.6': - resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} - - '@jridgewell/sourcemap-codec@1.4.15': - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - - '@jridgewell/trace-mapping@0.3.9': - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - - '@nanostores/persistent@0.9.1': - resolution: {integrity: sha512-ow57Hxm5VMaI5GHET/cVk8hX/iKMmbhcGrB9owfN8p8OHiiJgUlYxe1giacwlAALJXAh2t8bxXh42hHb64BCEA==} - engines: {node: ^16.0.0 || ^18.0.0 || >=20.0.0} - peerDependencies: - nanostores: ^0.9.0 - - '@nanostores/solid@0.4.2': - resolution: {integrity: sha512-8v32+C9KdRbnvP4x4Oiw/CtL1tZwbRxYfmFsPIY9PXevCgxSFnicG6VnLLtNAR7F0kl8Ec7OROHO34Ffv0KDzg==} - peerDependencies: - nanostores: '>=0.8.0' - solid-js: ^1.6.0 - - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@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'} - - '@popperjs/core@2.11.8': - resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} - - '@rollup/plugin-babel@5.3.1': - resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} - engines: {node: '>= 10.0.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@types/babel__core': ^7.1.9 - rollup: ^1.20.0||^2.0.0 - peerDependenciesMeta: - '@types/babel__core': - optional: true - - '@rollup/plugin-node-resolve@15.2.3': - resolution: {integrity: sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.78.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - - '@rollup/plugin-replace@2.4.2': - resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} - peerDependencies: - rollup: ^1.20.0 || ^2.0.0 - - '@rollup/plugin-terser@0.4.4': - resolution: {integrity: sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - - '@rollup/pluginutils@3.1.0': - resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} - engines: {node: '>= 8.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 - - '@rollup/pluginutils@5.1.0': - resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - - '@rollup/rollup-android-arm-eabi@4.18.0': - resolution: {integrity: sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.18.0': - resolution: {integrity: sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.18.0': - resolution: {integrity: sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.18.0': - resolution: {integrity: sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==} - cpu: [x64] - os: [darwin] - - '@rollup/rollup-linux-arm-gnueabihf@4.18.0': - resolution: {integrity: sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm-musleabihf@4.18.0': - resolution: {integrity: sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm64-gnu@4.18.0': - resolution: {integrity: sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-arm64-musl@4.18.0': - resolution: {integrity: sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-powerpc64le-gnu@4.18.0': - resolution: {integrity: sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==} - cpu: [ppc64] - os: [linux] - - '@rollup/rollup-linux-riscv64-gnu@4.18.0': - resolution: {integrity: sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-s390x-gnu@4.18.0': - resolution: {integrity: sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==} - cpu: [s390x] - os: [linux] - - '@rollup/rollup-linux-x64-gnu@4.18.0': - resolution: {integrity: sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-linux-x64-musl@4.18.0': - resolution: {integrity: sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-win32-arm64-msvc@4.18.0': - resolution: {integrity: sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==} - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.18.0': - resolution: {integrity: sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.18.0': - resolution: {integrity: sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==} - cpu: [x64] - os: [win32] - - '@solid-primitives/event-listener@2.3.3': - resolution: {integrity: sha512-DAJbl+F0wrFW2xmcV8dKMBhk9QLVLuBSW+TR4JmIfTaObxd13PuL7nqaXnaYKDWOYa6otB00qcCUIGbuIhSUgQ==} - peerDependencies: - solid-js: ^1.6.12 - - '@solid-primitives/resize-observer@2.0.25': - resolution: {integrity: sha512-jVDXkt2MiriYRaz4DYs62185d+6jQ+1DCsR+v7f6XMsIJJuf963qdBRFjtZtKXBaxdPNMyuPeDgf5XQe3EoDJg==} - peerDependencies: - solid-js: ^1.6.12 - - '@solid-primitives/rootless@1.4.5': - resolution: {integrity: sha512-GFJE9GC3ojx0aUKqAUZmQPyU8fOVMtnVNrkdk2yS4kd17WqVSpXpoTmo9CnOwA+PG7FTzdIkogvfLQSLs4lrww==} - peerDependencies: - solid-js: ^1.6.12 - - '@solid-primitives/static-store@0.0.8': - resolution: {integrity: sha512-ZecE4BqY0oBk0YG00nzaAWO5Mjcny8Fc06CdbXadH9T9lzq/9GefqcSe/5AtdXqjvY/DtJ5C6CkcjPZO0o/eqg==} - peerDependencies: - solid-js: ^1.6.12 - - '@solid-primitives/utils@6.2.3': - resolution: {integrity: sha512-CqAwKb2T5Vi72+rhebSsqNZ9o67buYRdEJrIFzRXz3U59QqezuuxPsyzTSVCacwS5Pf109VRsgCJQoxKRoECZQ==} - peerDependencies: - solid-js: ^1.6.12 - - '@solidjs/router@0.11.5': - resolution: {integrity: sha512-nclebUUufZT37rB5l0LbJn92vZwJOhYVltfjfLFI3yAcMlwiil5JOy6X2FEgekWsoX29No/GCBTkYfrSZCRfaw==} - peerDependencies: - solid-js: ^1.8.6 - - '@suid/base@0.9.0': - resolution: {integrity: sha512-uj6kYkPB2/79iKJQSIKrSqxA0H0/1vcxxsyclHRMdU/RL3FVGUfasmAMJR7E6YVLi78A+fsabBKeu/yQSrr/Hg==} - peerDependencies: - solid-js: ^1.8.16 - - '@suid/css@0.4.0': - resolution: {integrity: sha512-yzHAlf1CVi7n0SvUrMgs8Z49UiS9669+td1w1frekhRQuRbkXhHoyJkvovaDVJlWRmCPA8Q0f1OTr0uDCUg9mQ==} - - '@suid/icons-material@0.7.0': - resolution: {integrity: sha512-d40gG5GBE/UrUYvVkf53zzhmNIV9eb4z52DUON2fGidprf/LkD4WdamwHKS1QfElvHnuaOci1VjV6cHdblzPBQ==} - peerDependencies: - solid-js: ^1.8.16 - - '@suid/material@0.16.0': - resolution: {integrity: sha512-qr/xdkl8Ekp+GO4m5VhXLi/CBrmUXALc8MP75p8y+0ZMXB+RLwSsZK1z1i9EjmEsmR5RC6G9VFJPWrpMI7j32A==} - peerDependencies: - solid-js: ^1.8.16 - - '@suid/styled-engine@0.7.0': - resolution: {integrity: sha512-yaanC2KI5yl8QrKL2e9Y89XJvqd3wrjZUCNctWWUF+1uypmoXcoP6N6MQvzr3+78fT0iLeEfn3b/lXl8x0+jAw==} - peerDependencies: - solid-js: ^1.8.16 - - '@suid/system@0.11.0': - resolution: {integrity: sha512-DVywaHMG97I7j0KjgOXTQlf6SG72sA5QSsNJ3RkED+dsjvHjkVgBbOkKNR04RHlwlItbR2Wdhu7ZlREvSsneeQ==} - peerDependencies: - solid-js: ^1.8.16 - - '@suid/types@0.6.0': - resolution: {integrity: sha512-W9RtmxQe0ZLvAwtoQtKb96SGNGNIWTskhxkXu5FeH5IPyvU5PpEWFLsyg3rmzLVAUHF1WsQwXBv/EZwwAjFkGQ==} - peerDependencies: - solid-js: ^1.8.16 - - '@suid/utils@0.9.0': - resolution: {integrity: sha512-YDudkXz0PXGlzl6s9OFCsRkdCTn6RBSx6Nb8o+np/SfOQ+Tnx3abgjNGkt10xZMRbobBr0lr6asmkYUQQRhHYA==} - peerDependencies: - solid-js: ^1.8.16 - - '@suid/vite-plugin@0.2.0': - resolution: {integrity: sha512-DDTbtBGS27EzMkIAdn0cLmlyYriBzY7+O8inMgYaSUIxWAPX0qKk5ZNB3qJaUGZXxwcxV7BSj3lOPcSISGvZxA==} - peerDependencies: - vite: ^5.0.0 - - '@surma/rollup-plugin-off-main-thread@2.2.3': - resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} - - '@types/babel__core@7.20.5': - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - - '@types/babel__generator@7.6.8': - resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} - - '@types/babel__template@7.4.4': - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - - '@types/babel__traverse@7.20.6': - resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} - - '@types/css-tree@2.3.8': - resolution: {integrity: sha512-zABG3nI2UENsx7AQv63tI5/ptoAG/7kQR1H0OvG+WTWYHOR5pfAT3cGgC8SdyCrgX/TTxJBZNmx82IjCXs1juQ==} - - '@types/estree@0.0.39': - resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} - - '@types/estree@1.0.5': - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - - '@types/hammerjs@2.0.45': - resolution: {integrity: sha512-qkcUlZmX6c4J8q45taBKTL3p+LbITgyx7qhlPYOdOHZB7B31K0mXbP5YA7i7SgDeEGuI9MnumiKPEMrxg8j3KQ==} - - '@types/node-forge@1.3.11': - resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} - - '@types/node@20.14.10': - resolution: {integrity: sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==} - - '@types/resolve@1.20.2': - resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} - - '@types/trusted-types@2.0.7': - resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} - - acorn-walk@8.3.3: - resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} - engines: {node: '>=0.4.0'} - - acorn@8.12.0: - resolution: {integrity: sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==} - engines: {node: '>=0.4.0'} - hasBin: true - - ajv@8.17.1: - resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} - - ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - - array-buffer-byte-length@1.0.1: - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} - engines: {node: '>= 0.4'} - - arraybuffer.prototype.slice@1.0.3: - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} - engines: {node: '>= 0.4'} - - as-table@1.0.55: - resolution: {integrity: sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==} - - async@3.2.5: - resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} - - at-least-node@1.0.0: - resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} - engines: {node: '>= 4.0.0'} - - available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} - - babel-plugin-jsx-dom-expressions@0.37.23: - resolution: {integrity: sha512-Y/r8LyLi/njnwPTaDuPEReWk30FJ1KplloYvcFUhHmiH1F7yVVj5mWojD7mbO/IruKyvOs9OIPUoeMi3Z++J4w==} - peerDependencies: - '@babel/core': ^7.20.12 - - babel-plugin-polyfill-corejs2@0.4.11: - resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - - babel-plugin-polyfill-corejs3@0.10.4: - resolution: {integrity: sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - - babel-plugin-polyfill-regenerator@0.6.2: - resolution: {integrity: sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - - babel-preset-solid@1.8.18: - resolution: {integrity: sha512-ky0FA4cCS9dk+xYBBItHoxtbRnaDIOGpmHLFqKPaR81hpMbJBOiLOZia2hT0JBwx4zn/D2OjMRvRr6kqtRMoUw==} - peerDependencies: - '@babel/core': ^7.0.0 - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} - - blake3-wasm@2.1.5: - resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} - - blurhash@2.0.5: - resolution: {integrity: sha512-cRygWd7kGBQO3VEhPiTgq4Wc43ctsM+o46urrmPOiuAe+07fzlSB9OJVdpgDL0jPqXUVQ9ht7aq7kxOeJHRK+w==} - - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - - brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - - braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} - - browserslist@4.23.1: - resolution: {integrity: sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - - buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - - builtin-modules@3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} - - call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} - engines: {node: '>= 0.4'} - - camel-case@4.1.2: - resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} - - caniuse-lite@1.0.30001639: - resolution: {integrity: sha512-eFHflNTBIlFwP2AIKaYuBQN/apnUoKNhBdza8ZnW/h2di4LCZ4xFqYlxUxo+LQ76KFI1PGcC1QDxMbxTZpSCAg==} - - capital-case@1.0.4: - resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} - - capnp-ts@0.7.0: - resolution: {integrity: sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==} - - chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - - change-case@4.1.2: - resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==} - - chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} - - clsx@2.1.1: - resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} - engines: {node: '>=6'} - - color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - - common-tags@1.8.2: - resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} - engines: {node: '>=4.0.0'} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - consola@3.2.3: - resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} - engines: {node: ^14.18.0 || >=16.10.0} - - constant-case@3.0.4: - resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} - - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - - cookie@0.5.0: - resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} - engines: {node: '>= 0.6'} - - core-js-compat@3.37.1: - resolution: {integrity: sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==} - - crypto-random-string@2.0.0: - resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} - engines: {node: '>=8'} - - css-tree@2.3.1: - resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} - - csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - - data-uri-to-buffer@2.0.2: - resolution: {integrity: sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==} - - data-view-buffer@1.0.1: - resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} - engines: {node: '>= 0.4'} - - data-view-byte-length@1.0.1: - resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} - engines: {node: '>= 0.4'} - - data-view-byte-offset@1.0.0: - resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} - engines: {node: '>= 0.4'} - - date-fns@3.6.0: - resolution: {integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==} - - debug@4.3.5: - resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - - defu@6.1.4: - resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} - - detect-libc@1.0.3: - resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} - engines: {node: '>=0.10'} - hasBin: true - - dot-case@3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} - - ejs@3.1.10: - resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} - engines: {node: '>=0.10.0'} - hasBin: true - - electron-to-chromium@1.4.815: - resolution: {integrity: sha512-OvpTT2ItpOXJL7IGcYakRjHCt8L5GrrN/wHCQsRB4PQa1X9fe+X9oen245mIId7s14xvArCGSTIq644yPUKKLg==} - - es-abstract@1.23.3: - resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} - engines: {node: '>= 0.4'} - - es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} - - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - - es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} - engines: {node: '>= 0.4'} - - es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} - - esbuild@0.17.19: - resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} - engines: {node: '>=12'} - hasBin: true - - esbuild@0.21.5: - resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} - engines: {node: '>=12'} - hasBin: true - - escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} - engines: {node: '>=6'} - - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - estree-walker@0.6.1: - resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==} - - estree-walker@1.0.1: - resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} - - estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - - events-to-async@2.0.1: - resolution: {integrity: sha512-RtnLYrMbXp4JkZIoZu+3VTqV21bNVBlJBZ4NmtwvMNqSE3qouhxv2gvLE4JJDaQc54ioPkrX74V6x+hp/hqjkQ==} - - exit-hook@2.2.1: - resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==} - engines: {node: '>=6'} - - 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'} - - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - fast-uri@3.0.1: - resolution: {integrity: sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==} - - fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} - - filelist@1.0.4: - resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} - - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - - for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - - fs-extra@9.1.0: - resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} - engines: {node: '>=10'} - - 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] - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} - - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - - gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - - get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} - - get-own-enumerable-property-symbols@3.0.2: - resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} - - get-source@2.0.12: - resolution: {integrity: sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==} - - get-symbol-description@1.0.2: - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} - engines: {node: '>= 0.4'} - - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - - glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported - - globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - - gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - hammerjs@2.0.8: - resolution: {integrity: sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==} - engines: {node: '>=0.8.0'} - - has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - - has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - - has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} - engines: {node: '>= 0.4'} - - has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - - header-case@2.0.4: - resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} - - html-entities@2.3.3: - resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} - - idb@7.1.1: - resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} - - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - internal-slot@1.0.7: - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} - engines: {node: '>= 0.4'} - - is-array-buffer@3.0.4: - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} - engines: {node: '>= 0.4'} - - is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} - - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - - is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} - - is-builtin-module@3.2.1: - resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} - engines: {node: '>=6'} - - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - - is-core-module@2.14.0: - resolution: {integrity: sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==} - engines: {node: '>= 0.4'} - - is-data-view@1.0.1: - resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} - engines: {node: '>= 0.4'} - - is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} - - 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'} - - is-module@1.0.0: - resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - - is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - - is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-obj@1.0.1: - resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} - engines: {node: '>=0.10.0'} - - is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} - - is-regexp@1.0.0: - resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} - engines: {node: '>=0.10.0'} - - is-shared-array-buffer@1.0.3: - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} - engines: {node: '>= 0.4'} - - is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - - is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} - - is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} - - is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} - engines: {node: '>= 0.4'} - - is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} - - is-what@4.1.16: - resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} - engines: {node: '>=12.13'} - - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - - isomorphic-ws@5.0.0: - resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} - peerDependencies: - ws: '*' - - jake@10.9.1: - resolution: {integrity: sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==} - engines: {node: '>=10'} - hasBin: true - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - jsesc@0.5.0: - resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} - hasBin: true - - jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - - json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - - json-schema@0.4.0: - resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} - - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - - jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - - jsonpointer@5.0.1: - resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} - engines: {node: '>=0.10.0'} - - leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - - lightningcss-darwin-arm64@1.25.1: - resolution: {integrity: sha512-G4Dcvv85bs5NLENcu/s1f7ehzE3D5ThnlWSDwE190tWXRQCQaqwcuHe+MGSVI/slm0XrxnaayXY+cNl3cSricw==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [darwin] - - lightningcss-darwin-x64@1.25.1: - resolution: {integrity: sha512-dYWuCzzfqRueDSmto6YU5SoGHvZTMU1Em9xvhcdROpmtOQLorurUZz8+xFxZ51lCO2LnYbfdjZ/gCqWEkwixNg==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [darwin] - - lightningcss-freebsd-x64@1.25.1: - resolution: {integrity: sha512-hXoy2s9A3KVNAIoKz+Fp6bNeY+h9c3tkcx1J3+pS48CqAt+5bI/R/YY4hxGL57fWAIquRjGKW50arltD6iRt/w==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [freebsd] - - lightningcss-linux-arm-gnueabihf@1.25.1: - resolution: {integrity: sha512-tWyMgHFlHlp1e5iW3EpqvH5MvsgoN7ZkylBbG2R2LWxnvH3FuWCJOhtGcYx9Ks0Kv0eZOBud789odkYLhyf1ng==} - engines: {node: '>= 12.0.0'} - cpu: [arm] - os: [linux] - - lightningcss-linux-arm64-gnu@1.25.1: - resolution: {integrity: sha512-Xjxsx286OT9/XSnVLIsFEDyDipqe4BcLeB4pXQ/FEA5+2uWCCuAEarUNQumRucnj7k6ftkAHUEph5r821KBccQ==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - - lightningcss-linux-arm64-musl@1.25.1: - resolution: {integrity: sha512-IhxVFJoTW8wq6yLvxdPvyHv4NjzcpN1B7gjxrY3uaykQNXPHNIpChLB52+wfH+yS58zm1PL4LemUp8u9Cfp6Bw==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - - lightningcss-linux-x64-gnu@1.25.1: - resolution: {integrity: sha512-RXIaru79KrREPEd6WLXfKfIp4QzoppZvD3x7vuTKkDA64PwTzKJ2jaC43RZHRt8BmyIkRRlmywNhTRMbmkPYpA==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - - lightningcss-linux-x64-musl@1.25.1: - resolution: {integrity: sha512-TdcNqFsAENEEFr8fJWg0Y4fZ/nwuqTRsIr7W7t2wmDUlA8eSXVepeeONYcb+gtTj1RaXn/WgNLB45SFkz+XBZA==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - - lightningcss-win32-x64-msvc@1.25.1: - resolution: {integrity: sha512-9KZZkmmy9oGDSrnyHuxP6iMhbsgChUiu/NSgOx+U1I/wTngBStDf2i2aGRCHvFqj19HqqBEI4WuGVQBa2V6e0A==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [win32] - - lightningcss@1.25.1: - resolution: {integrity: sha512-V0RMVZzK1+rCHpymRv4URK2lNhIRyO8g7U7zOFwVAhJuat74HtkjIQpQRKNCwFEYkRGpafOpmXXLoaoBcyVtBg==} - engines: {node: '>= 12.0.0'} - - lodash.debounce@4.0.8: - resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - - lodash.sortby@4.7.0: - resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} - - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - - lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} - - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - - magic-string@0.25.9: - resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} - - masto@6.8.0: - resolution: {integrity: sha512-amooNsp4mebu/dtBZfUHP6I0mcHSDB0JoTyrCWdw2YcCOIuPX6bM0gA60nEaLZqoHSF7xG63TpdDbAYI37Fnlg==} - - mdn-data@2.0.30: - resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} - - merge-anything@5.1.7: - resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==} - engines: {node: '>=12.13'} - - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - micromatch@4.0.7: - resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} - engines: {node: '>=8.6'} - - mime@3.0.0: - resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} - engines: {node: '>=10.0.0'} - hasBin: true - - miniflare@3.20240701.0: - resolution: {integrity: sha512-m9+I+7JNyqDGftCMKp9cK9pCZkK72hAL2mM9IWwhct+ZmucLBA8Uu6+rHQqA5iod86cpwOkrB2PrPA3wx9YNgw==} - engines: {node: '>=16.13'} - hasBin: true - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} - - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - - mustache@4.2.0: - resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} - hasBin: true - - nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - nanostores@0.9.5: - resolution: {integrity: sha512-Z+p+g8E7yzaWwOe5gEUB2Ox0rCEeXWYIZWmYvw/ajNYX8DlXdMvMDj8DWfM/subqPAcsf8l8Td4iAwO1DeIIRQ==} - engines: {node: ^16.0.0 || ^18.0.0 || >=20.0.0} - - no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - - node-fetch-native@1.6.4: - resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==} - - node-forge@1.3.1: - resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} - engines: {node: '>= 6.13.0'} - - 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'} - - object-inspect@1.13.2: - resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} - engines: {node: '>= 0.4'} - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} - engines: {node: '>= 0.4'} - - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - param-case@3.0.4: - resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} - - pascal-case@3.1.2: - resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} - - path-case@3.0.4: - resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} - - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - path-to-regexp@6.2.2: - resolution: {integrity: sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==} - - pathe@1.1.2: - resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} - - picocolors@1.0.1: - resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} - engines: {node: '>= 0.4'} - - postcss@8.4.39: - resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==} - engines: {node: ^10 || ^12 || >=14} - - prettier@3.3.2: - resolution: {integrity: sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==} - engines: {node: '>=14'} - hasBin: true - - pretty-bytes@5.6.0: - resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} - engines: {node: '>=6'} - - pretty-bytes@6.1.1: - resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} - engines: {node: ^14.13.1 || >=16.0.0} - - printable-characters@1.0.42: - resolution: {integrity: sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==} - - 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==} - - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - - regenerate-unicode-properties@10.1.1: - resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} - engines: {node: '>=4'} - - regenerate@1.4.2: - resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - - regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - - regenerator-transform@0.15.2: - resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} - - regexp.prototype.flags@1.5.2: - resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} - engines: {node: '>= 0.4'} - - regexpu-core@5.3.2: - resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} - engines: {node: '>=4'} - - regjsparser@0.9.1: - resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} - hasBin: true - - require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - - resolve.exports@2.0.2: - resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} - engines: {node: '>=10'} - - resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true - - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - rollup-plugin-inject@3.0.2: - resolution: {integrity: sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==} - deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject. - - rollup-plugin-node-polyfills@0.2.1: - resolution: {integrity: sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==} - - rollup-pluginutils@2.8.2: - resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} - - rollup@2.79.1: - resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} - engines: {node: '>=10.0.0'} - hasBin: true - - rollup@4.18.0: - resolution: {integrity: sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - safe-array-concat@1.1.2: - resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} - engines: {node: '>=0.4'} - - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - - safe-regex-test@1.0.3: - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} - engines: {node: '>= 0.4'} - - selfsigned@2.4.1: - resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} - engines: {node: '>=10'} - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - - sentence-case@3.0.4: - resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} - - serialize-javascript@6.0.2: - resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} - - seroval-plugins@1.0.7: - resolution: {integrity: sha512-GO7TkWvodGp6buMEX9p7tNyIkbwlyuAWbI6G9Ec5bhcm7mQdu3JOK1IXbEUwb3FVzSc363GraG/wLW23NSavIw==} - engines: {node: '>=10'} - peerDependencies: - seroval: ^1.0 - - seroval@1.0.7: - resolution: {integrity: sha512-n6ZMQX5q0Vn19Zq7CIKNIo7E75gPkGCFUEqDpa8jgwpYr/vScjqnQ6H09t1uIiZ0ZSK0ypEGvrYK2bhBGWsGdw==} - engines: {node: '>=10'} - - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - - set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} - - side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} - engines: {node: '>= 0.4'} - - smob@1.5.0: - resolution: {integrity: sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==} - - snake-case@3.0.4: - resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} - - solid-js@1.8.18: - resolution: {integrity: sha512-cpkxDPvO/AuKBugVv6xKFd1C9VC0XZMu4VtF56IlHoux8HgyW44uqNSWbozMnVcpIzHIhS3vVXPAVZYM26jpWw==} - - solid-refresh@0.6.3: - resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==} - peerDependencies: - solid-js: ^1.3 - - solid-styled@0.11.1: - resolution: {integrity: sha512-QZN9hj+lt3gai0HPqzN5kFTn3zHIlyKWXVcYJfiuPGgprRuEB3UvUNqNcOncknJrjHLdZAn/ItA01rs9sqh8hg==} - engines: {node: '>=12'} - peerDependencies: - solid-js: ^1 - - source-map-js@1.2.0: - resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} - engines: {node: '>=0.10.0'} - - source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - - source-map@0.8.0-beta.0: - resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} - engines: {node: '>= 8'} - - sourcemap-codec@1.4.8: - resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} - deprecated: Please use @jridgewell/sourcemap-codec instead - - stacktracey@2.1.8: - resolution: {integrity: sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==} - - stoppable@1.1.0: - resolution: {integrity: sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==} - engines: {node: '>=4', npm: '>=6'} - - string.prototype.matchall@4.0.11: - resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} - engines: {node: '>= 0.4'} - - string.prototype.trim@1.2.9: - resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.8: - resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} - - string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} - - stringify-object@3.3.0: - resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} - engines: {node: '>=4'} - - strip-comments@2.0.1: - resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==} - engines: {node: '>=10'} - - supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - temp-dir@2.0.0: - resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} - engines: {node: '>=8'} - - tempy@0.6.0: - resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==} - engines: {node: '>=10'} - - terser@5.31.2: - resolution: {integrity: sha512-LGyRZVFm/QElZHy/CPr/O4eNZOZIzsrQ92y4v9UJe/pFJjypje2yI3C2FmPtvUEnhadlSbmG2nXtdcjHOjCfxw==} - engines: {node: '>=10'} - hasBin: true - - to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - tr46@1.0.1: - resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} - - ts-custom-error@3.3.1: - resolution: {integrity: sha512-5OX1tzOjxWEgsr/YEUWSuPrQ00deKLh6D7OTWcvNHm12/7QPyRh8SYpyWvA4IZv8H/+GQWQEh/kwo95Q9OVW1A==} - engines: {node: '>=14.0.0'} - - tslib@2.6.3: - resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} - - type-fest@0.16.0: - resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} - engines: {node: '>=10'} - - typed-array-buffer@1.0.2: - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} - engines: {node: '>= 0.4'} - - typed-array-byte-length@1.0.1: - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.2: - resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} - engines: {node: '>= 0.4'} - - typed-array-length@1.0.6: - resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} - engines: {node: '>= 0.4'} - - typescript@5.5.2: - resolution: {integrity: sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==} - engines: {node: '>=14.17'} - hasBin: true - - ufo@1.5.3: - resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} - - unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - - undici@5.28.4: - resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} - engines: {node: '>=14.0'} - - unenv-nightly@1.10.0-1717606461.a117952: - resolution: {integrity: sha512-u3TfBX02WzbHTpaEfWEKwDijDSFAHcgXkayUZ+MVDrjhLFvgAJzFGTSTmwlEhwWi2exyRQey23ah9wELMM6etg==} - - unicode-canonical-property-names-ecmascript@2.0.0: - resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} - engines: {node: '>=4'} - - unicode-match-property-ecmascript@2.0.0: - resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} - engines: {node: '>=4'} - - unicode-match-property-value-ecmascript@2.1.0: - resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} - engines: {node: '>=4'} - - unicode-property-aliases-ecmascript@2.1.0: - resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} - engines: {node: '>=4'} - - unique-string@2.0.0: - resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} - engines: {node: '>=8'} - - universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - - unplugin-solid-styled@0.11.1: - resolution: {integrity: sha512-UrDGYSoo9WM1ITo2sz3ktX9RURRNVN5ewy+P7snIGECZE0n6ebrmdPwCFI3imXzZrCMlp/yZgFCrFOvsz8ms/Q==} - engines: {node: '>=10'} - peerDependencies: - solid-styled: '>=0.9' - vite: ^3 || ^4 || ^5 - peerDependenciesMeta: - vite: - optional: true - - unplugin@1.11.0: - resolution: {integrity: sha512-3r7VWZ/webh0SGgJScpWl2/MRCZK5d3ZYFcNaeci/GQ7Teop7zf0Nl2pUuz7G21BwPd9pcUPOC5KmJ2L3WgC5g==} - engines: {node: '>=14.0.0'} - - upath@1.2.0: - resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} - engines: {node: '>=4'} - - update-browserslist-db@1.0.16: - resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - upper-case-first@2.0.2: - resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} - - upper-case@2.0.2: - resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==} - - validate-html-nesting@1.2.2: - resolution: {integrity: sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg==} - - vite-plugin-package-version@1.1.0: - resolution: {integrity: sha512-TPoFZXNanzcaKCIrC3e2L/TVRkkRLB6l4RPN/S7KbG7rWfyLcCEGsnXvxn6qR7fyZwXalnnSN/I9d6pSFjHpEA==} - peerDependencies: - vite: '>=2.0.0-beta.69' - - vite-plugin-pwa@0.20.0: - resolution: {integrity: sha512-/kDZyqF8KqoXRpMUQtR5Atri/7BWayW8Gp7Kz/4bfstsV6zSFTxjREbXZYL7zSuRL40HGA+o2hvUAFRmC+bL7g==} - engines: {node: '>=16.0.0'} - peerDependencies: - '@vite-pwa/assets-generator': ^0.2.4 - vite: ^3.1.0 || ^4.0.0 || ^5.0.0 - workbox-build: ^7.1.0 - workbox-window: ^7.1.0 - peerDependenciesMeta: - '@vite-pwa/assets-generator': - optional: true - - vite-plugin-solid-styled@0.11.1: - resolution: {integrity: sha512-aqCCcaGo0EOVVt8JTmSgxBtYDMSDY/bti1WmNBZ6zDRkiN4oqfCQyqq9v+1XtYMhulldsufS3H9h3RXWmkvG4A==} - engines: {node: '>=10'} - peerDependencies: - solid-styled: '>=0.9' - vite: ^3 || ^4 || ^5 - - vite-plugin-solid@2.10.2: - resolution: {integrity: sha512-AOEtwMe2baBSXMXdo+BUwECC8IFHcKS6WQV/1NEd+Q7vHPap5fmIhLcAzr+DUJ04/KHx/1UBU0l1/GWP+rMAPQ==} - peerDependencies: - '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.* - solid-js: ^1.7.2 - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 - peerDependenciesMeta: - '@testing-library/jest-dom': - optional: true - - vite@5.3.2: - resolution: {integrity: sha512-6lA7OBHBlXUxiJxbO5aAY2fsHHzDr1q7DvXYnyZycRs2Dz+dXBWuhpWHvmljTRTpQC2uvGmUFFkSHF2vGo90MA==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 - 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 - - vitefu@0.2.5: - resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} - peerDependencies: - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 - peerDependenciesMeta: - vite: - optional: true - - webidl-conversions@4.0.2: - resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} - - webpack-sources@3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} - engines: {node: '>=10.13.0'} - - webpack-virtual-modules@0.6.2: - resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} - - whatwg-url@7.1.0: - resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} - - which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - - which-typed-array@1.1.15: - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} - engines: {node: '>= 0.4'} - - workbox-background-sync@7.1.0: - resolution: {integrity: sha512-rMbgrzueVWDFcEq1610YyDW71z0oAXLfdRHRQcKw4SGihkfOK0JUEvqWHFwA6rJ+6TClnMIn7KQI5PNN1XQXwQ==} - - workbox-broadcast-update@7.1.0: - resolution: {integrity: sha512-O36hIfhjej/c5ar95pO67k1GQw0/bw5tKP7CERNgK+JdxBANQhDmIuOXZTNvwb2IHBx9hj2kxvcDyRIh5nzOgQ==} - - workbox-build@7.1.1: - resolution: {integrity: sha512-WdkVdC70VMpf5NBCtNbiwdSZeKVuhTEd5PV3mAwpTQCGAB5XbOny1P9egEgNdetv4srAMmMKjvBk4RD58LpooA==} - engines: {node: '>=16.0.0'} - - workbox-cacheable-response@7.1.0: - resolution: {integrity: sha512-iwsLBll8Hvua3xCuBB9h92+/e0wdsmSVgR2ZlvcfjepZWwhd3osumQB3x9o7flj+FehtWM2VHbZn8UJeBXXo6Q==} - - workbox-core@7.1.0: - resolution: {integrity: sha512-5KB4KOY8rtL31nEF7BfvU7FMzKT4B5TkbYa2tzkS+Peqj0gayMT9SytSFtNzlrvMaWgv6y/yvP9C0IbpFjV30Q==} - - workbox-expiration@7.1.0: - resolution: {integrity: sha512-m5DcMY+A63rJlPTbbBNtpJ20i3enkyOtSgYfv/l8h+D6YbbNiA0zKEkCUaMsdDlxggla1oOfRkyqTvl5Ni5KQQ==} - - workbox-google-analytics@7.1.0: - resolution: {integrity: sha512-FvE53kBQHfVTcZyczeBVRexhh7JTkyQ8HAvbVY6mXd2n2A7Oyz/9fIwnY406ZcDhvE4NFfKGjW56N4gBiqkrew==} - - workbox-navigation-preload@7.1.0: - resolution: {integrity: sha512-4wyAbo0vNI/X0uWNJhCMKxnPanNyhybsReMGN9QUpaePLTiDpKxPqFxl4oUmBNddPwIXug01eTSLVIFXimRG/A==} - - workbox-precaching@7.1.0: - resolution: {integrity: sha512-LyxzQts+UEpgtmfnolo0hHdNjoB7EoRWcF7EDslt+lQGd0lW4iTvvSe3v5JiIckQSB5KTW5xiCqjFviRKPj1zA==} - - workbox-range-requests@7.1.0: - resolution: {integrity: sha512-m7+O4EHolNs5yb/79CrnwPR/g/PRzMFYEdo01LqwixVnc/sbzNSvKz0d04OE3aMRel1CwAAZQheRsqGDwATgPQ==} - - workbox-recipes@7.1.0: - resolution: {integrity: sha512-NRrk4ycFN9BHXJB6WrKiRX3W3w75YNrNrzSX9cEZgFB5ubeGoO8s/SDmOYVrFYp9HMw6sh1Pm3eAY/1gVS8YLg==} - - workbox-routing@7.1.0: - resolution: {integrity: sha512-oOYk+kLriUY2QyHkIilxUlVcFqwduLJB7oRZIENbqPGeBP/3TWHYNNdmGNhz1dvKuw7aqvJ7CQxn27/jprlTdg==} - - workbox-strategies@7.1.0: - resolution: {integrity: sha512-/UracPiGhUNehGjRm/tLUQ+9PtWmCbRufWtV0tNrALuf+HZ4F7cmObSEK+E4/Bx1p8Syx2tM+pkIrvtyetdlew==} - - workbox-streams@7.1.0: - resolution: {integrity: sha512-WyHAVxRXBMfysM8ORwiZnI98wvGWTVAq/lOyBjf00pXFvG0mNaVz4Ji+u+fKa/mf1i2SnTfikoYKto4ihHeS6w==} - - workbox-sw@7.1.0: - resolution: {integrity: sha512-Hml/9+/njUXBglv3dtZ9WBKHI235AQJyLBV1G7EFmh4/mUdSQuXui80RtjDeVRrXnm/6QWgRUEHG3/YBVbxtsA==} - - workbox-window@7.1.0: - resolution: {integrity: sha512-ZHeROyqR+AS5UPzholQRDttLFqGMwP0Np8MKWAdyxsDETxq3qOAyXvqessc3GniohG6e0mAqSQyKOHmT8zPF7g==} - - workerd@1.20240701.0: - resolution: {integrity: sha512-qSgNVqauqzNCij9MaJLF2c2ko3AnFioVSIxMSryGbRK+LvtGr9BKBt6JOxCb24DoJASoJDx3pe3DJHBVydUiBg==} - engines: {node: '>=16'} - hasBin: true - - wrangler@3.64.0: - resolution: {integrity: sha512-q2VQADJXzuOkXs9KIfPSx7UCZHBoxsqSNbJDLkc2pHpGmsyNQXsJRqjMoTg/Kls7O3K9A7EGnzGr7+Io2vE6AQ==} - engines: {node: '>=16.17.0'} - hasBin: true - peerDependencies: - '@cloudflare/workers-types': ^4.20240620.0 - peerDependenciesMeta: - '@cloudflare/workers-types': - optional: true - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - ws@8.17.1: - resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - xxhash-wasm@1.0.2: - resolution: {integrity: sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A==} - - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - - youch@3.3.3: - resolution: {integrity: sha512-qSFXUk3UZBLfggAW3dJKg0BMblG5biqSF8M34E06o5CSsZtH92u9Hqmj2RzGiHDi64fhe83+4tENFP2DB6t6ZA==} - - zod@3.23.8: - resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} - -snapshots: - - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - - '@apideck/better-ajv-errors@0.3.6(ajv@8.17.1)': - dependencies: - ajv: 8.17.1 - json-schema: 0.4.0 - jsonpointer: 5.0.1 - leven: 3.1.0 - - '@babel/code-frame@7.24.7': - dependencies: - '@babel/highlight': 7.24.7 - picocolors: 1.0.1 - - '@babel/compat-data@7.24.7': {} - - '@babel/compat-data@7.24.8': {} - - '@babel/core@7.24.7': - dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helpers': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/template': 7.24.7 - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - convert-source-map: 2.0.0 - debug: 4.3.5 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/generator@7.24.7': - dependencies: - '@babel/types': 7.24.7 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 - - '@babel/generator@7.24.8': - dependencies: - '@babel/types': 7.24.8 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 - - '@babel/helper-annotate-as-pure@7.24.7': - dependencies: - '@babel/types': 7.24.8 - - '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7': - dependencies: - '@babel/traverse': 7.24.8 - '@babel/types': 7.24.8 - transitivePeerDependencies: - - supports-color - - '@babel/helper-compilation-targets@7.24.7': - dependencies: - '@babel/compat-data': 7.24.7 - '@babel/helper-validator-option': 7.24.7 - browserslist: 4.23.1 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-compilation-targets@7.24.8': - dependencies: - '@babel/compat-data': 7.24.8 - '@babel/helper-validator-option': 7.24.8 - browserslist: 4.23.1 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-create-class-features-plugin@7.24.8(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-member-expression-to-functions': 7.24.8 - '@babel/helper-optimise-call-expression': 7.24.7 - '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7) - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/helper-create-regexp-features-plugin@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.24.7 - regexpu-core: 5.3.2 - semver: 6.3.1 - - '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-compilation-targets': 7.24.8 - '@babel/helper-plugin-utils': 7.24.8 - debug: 4.3.5 - lodash.debounce: 4.0.8 - resolve: 1.22.8 - transitivePeerDependencies: - - supports-color - - '@babel/helper-environment-visitor@7.24.7': - dependencies: - '@babel/types': 7.24.7 - - '@babel/helper-function-name@7.24.7': - dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.7 - - '@babel/helper-hoist-variables@7.24.7': - dependencies: - '@babel/types': 7.24.7 - - '@babel/helper-member-expression-to-functions@7.24.8': - dependencies: - '@babel/traverse': 7.24.8 - '@babel/types': 7.24.8 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-imports@7.18.6': - dependencies: - '@babel/types': 7.24.7 - - '@babel/helper-module-imports@7.24.7': - dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-simple-access': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.24.8(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-simple-access': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-optimise-call-expression@7.24.7': - dependencies: - '@babel/types': 7.24.8 - - '@babel/helper-plugin-utils@7.24.7': {} - - '@babel/helper-plugin-utils@7.24.8': {} - - '@babel/helper-remap-async-to-generator@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-wrap-function': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-replace-supers@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-member-expression-to-functions': 7.24.8 - '@babel/helper-optimise-call-expression': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-simple-access@7.24.7': - dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-skip-transparent-expression-wrappers@7.24.7': - dependencies: - '@babel/traverse': 7.24.8 - '@babel/types': 7.24.8 - transitivePeerDependencies: - - supports-color - - '@babel/helper-split-export-declaration@7.24.7': - dependencies: - '@babel/types': 7.24.7 - - '@babel/helper-string-parser@7.24.7': {} - - '@babel/helper-string-parser@7.24.8': {} - - '@babel/helper-validator-identifier@7.24.7': {} - - '@babel/helper-validator-option@7.24.7': {} - - '@babel/helper-validator-option@7.24.8': {} - - '@babel/helper-wrap-function@7.24.7': - dependencies: - '@babel/helper-function-name': 7.24.7 - '@babel/template': 7.24.7 - '@babel/traverse': 7.24.8 - '@babel/types': 7.24.8 - transitivePeerDependencies: - - supports-color - - '@babel/helpers@7.24.7': - dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.7 - - '@babel/highlight@7.24.7': - dependencies: - '@babel/helper-validator-identifier': 7.24.7 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.0.1 - - '@babel/parser@7.24.7': - dependencies: - '@babel/types': 7.24.7 - - '@babel/parser@7.24.8': - dependencies: - '@babel/types': 7.24.8 - - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-syntax-import-assertions@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-syntax-import-attributes@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-arrow-functions@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-async-generator-functions@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-remap-async-to-generator': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-async-to-generator@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-remap-async-to-generator': 7.24.7(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-block-scoped-functions@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-block-scoping@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-class-properties@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.8 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-class-static-block@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-classes@7.24.8(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-compilation-targets': 7.24.8 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7) - '@babel/helper-split-export-declaration': 7.24.7 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-computed-properties@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/template': 7.24.7 - - '@babel/plugin-transform-destructuring@7.24.8(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-dotall-regex@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-duplicate-keys@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-dynamic-import@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.7) - - '@babel/plugin-transform-exponentiation-operator@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-export-namespace-from@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.7) - - '@babel/plugin-transform-for-of@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-function-name@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-compilation-targets': 7.24.8 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-json-strings@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.7) - - '@babel/plugin-transform-literals@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-logical-assignment-operators@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.7) - - '@babel/plugin-transform-member-expression-literals@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-modules-amd@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-transforms': 7.24.8(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.8 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-modules-commonjs@7.24.8(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-transforms': 7.24.8(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-simple-access': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-modules-systemjs@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-module-transforms': 7.24.8(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-validator-identifier': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-modules-umd@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-transforms': 7.24.8(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.8 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-named-capturing-groups-regex@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-new-target@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-nullish-coalescing-operator@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7) - - '@babel/plugin-transform-numeric-separator@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.7) - - '@babel/plugin-transform-object-rest-spread@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-compilation-targets': 7.24.8 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.24.7) - - '@babel/plugin-transform-object-super@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-optional-catch-binding@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.7) - - '@babel/plugin-transform-optional-chaining@7.24.8(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-parameters@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-private-methods@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.8 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-private-property-in-object@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-property-literals@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-regenerator@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - regenerator-transform: 0.15.2 - - '@babel/plugin-transform-reserved-words@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-shorthand-properties@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-spread@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-sticky-regex@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-template-literals@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-typeof-symbol@7.24.8(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-unicode-escapes@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-unicode-property-regex@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-unicode-regex@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-unicode-sets-regex@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/preset-env@7.24.8(@babel/core@7.24.7)': - dependencies: - '@babel/compat-data': 7.24.8 - '@babel/core': 7.24.7 - '@babel/helper-compilation-targets': 7.24.8 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-validator-option': 7.24.8 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.7) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.7) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.7) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.7) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-import-assertions': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-syntax-import-attributes': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.7) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.7) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.7) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.7) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.7) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.7) - '@babel/plugin-transform-arrow-functions': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-async-generator-functions': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-async-to-generator': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-block-scoped-functions': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-block-scoping': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-class-properties': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-class-static-block': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-classes': 7.24.8(@babel/core@7.24.7) - '@babel/plugin-transform-computed-properties': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-destructuring': 7.24.8(@babel/core@7.24.7) - '@babel/plugin-transform-dotall-regex': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-duplicate-keys': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-dynamic-import': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-exponentiation-operator': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-export-namespace-from': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-for-of': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-function-name': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-json-strings': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-literals': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-logical-assignment-operators': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-member-expression-literals': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-modules-amd': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.24.7) - '@babel/plugin-transform-modules-systemjs': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-modules-umd': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-named-capturing-groups-regex': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-new-target': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-nullish-coalescing-operator': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-numeric-separator': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-object-rest-spread': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-object-super': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-optional-catch-binding': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.24.7) - '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-private-methods': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-private-property-in-object': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-property-literals': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-regenerator': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-reserved-words': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-shorthand-properties': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-spread': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-sticky-regex': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-template-literals': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-typeof-symbol': 7.24.8(@babel/core@7.24.7) - '@babel/plugin-transform-unicode-escapes': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-unicode-property-regex': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-unicode-regex': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-unicode-sets-regex': 7.24.7(@babel/core@7.24.7) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.7) - babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.7) - babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.7) - babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.7) - core-js-compat: 3.37.1 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/types': 7.24.8 - esutils: 2.0.3 - - '@babel/regjsgen@0.8.0': {} - - '@babel/runtime@7.24.8': - dependencies: - regenerator-runtime: 0.14.1 - - '@babel/template@7.24.7': - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - - '@babel/traverse@7.24.7': - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - debug: 4.3.5 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - - '@babel/traverse@7.24.8': - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.8 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/parser': 7.24.8 - '@babel/types': 7.24.8 - debug: 4.3.5 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - - '@babel/types@7.24.7': - dependencies: - '@babel/helper-string-parser': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - to-fast-properties: 2.0.0 - - '@babel/types@7.24.8': - dependencies: - '@babel/helper-string-parser': 7.24.8 - '@babel/helper-validator-identifier': 7.24.7 - to-fast-properties: 2.0.0 - - '@cloudflare/kv-asset-handler@0.3.4': - dependencies: - mime: 3.0.0 - - '@cloudflare/workerd-darwin-64@1.20240701.0': - optional: true - - '@cloudflare/workerd-darwin-arm64@1.20240701.0': - optional: true - - '@cloudflare/workerd-linux-64@1.20240701.0': - optional: true - - '@cloudflare/workerd-linux-arm64@1.20240701.0': - optional: true - - '@cloudflare/workerd-windows-64@1.20240701.0': - optional: true - - '@cspotcode/source-map-support@0.8.1': - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - - '@esbuild-plugins/node-globals-polyfill@0.2.3(esbuild@0.17.19)': - dependencies: - esbuild: 0.17.19 - - '@esbuild-plugins/node-modules-polyfill@0.2.2(esbuild@0.17.19)': - dependencies: - esbuild: 0.17.19 - escape-string-regexp: 4.0.0 - rollup-plugin-node-polyfills: 0.2.1 - - '@esbuild/aix-ppc64@0.21.5': - optional: true - - '@esbuild/android-arm64@0.17.19': - optional: true - - '@esbuild/android-arm64@0.21.5': - optional: true - - '@esbuild/android-arm@0.17.19': - optional: true - - '@esbuild/android-arm@0.21.5': - optional: true - - '@esbuild/android-x64@0.17.19': - optional: true - - '@esbuild/android-x64@0.21.5': - optional: true - - '@esbuild/darwin-arm64@0.17.19': - optional: true - - '@esbuild/darwin-arm64@0.21.5': - optional: true - - '@esbuild/darwin-x64@0.17.19': - optional: true - - '@esbuild/darwin-x64@0.21.5': - optional: true - - '@esbuild/freebsd-arm64@0.17.19': - optional: true - - '@esbuild/freebsd-arm64@0.21.5': - optional: true - - '@esbuild/freebsd-x64@0.17.19': - optional: true - - '@esbuild/freebsd-x64@0.21.5': - optional: true - - '@esbuild/linux-arm64@0.17.19': - optional: true - - '@esbuild/linux-arm64@0.21.5': - optional: true - - '@esbuild/linux-arm@0.17.19': - optional: true - - '@esbuild/linux-arm@0.21.5': - optional: true - - '@esbuild/linux-ia32@0.17.19': - optional: true - - '@esbuild/linux-ia32@0.21.5': - optional: true - - '@esbuild/linux-loong64@0.17.19': - optional: true - - '@esbuild/linux-loong64@0.21.5': - optional: true - - '@esbuild/linux-mips64el@0.17.19': - optional: true - - '@esbuild/linux-mips64el@0.21.5': - optional: true - - '@esbuild/linux-ppc64@0.17.19': - optional: true - - '@esbuild/linux-ppc64@0.21.5': - optional: true - - '@esbuild/linux-riscv64@0.17.19': - optional: true - - '@esbuild/linux-riscv64@0.21.5': - optional: true - - '@esbuild/linux-s390x@0.17.19': - optional: true - - '@esbuild/linux-s390x@0.21.5': - optional: true - - '@esbuild/linux-x64@0.17.19': - optional: true - - '@esbuild/linux-x64@0.21.5': - optional: true - - '@esbuild/netbsd-x64@0.17.19': - optional: true - - '@esbuild/netbsd-x64@0.21.5': - optional: true - - '@esbuild/openbsd-x64@0.17.19': - optional: true - - '@esbuild/openbsd-x64@0.21.5': - optional: true - - '@esbuild/sunos-x64@0.17.19': - optional: true - - '@esbuild/sunos-x64@0.21.5': - optional: true - - '@esbuild/win32-arm64@0.17.19': - optional: true - - '@esbuild/win32-arm64@0.21.5': - optional: true - - '@esbuild/win32-ia32@0.17.19': - optional: true - - '@esbuild/win32-ia32@0.21.5': - optional: true - - '@esbuild/win32-x64@0.17.19': - optional: true - - '@esbuild/win32-x64@0.21.5': - optional: true - - '@fastify/busboy@2.1.1': {} - - '@jridgewell/gen-mapping@0.3.5': - dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/set-array@1.2.1': {} - - '@jridgewell/source-map@0.3.6': - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/sourcemap-codec@1.4.15': {} - - '@jridgewell/trace-mapping@0.3.25': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - - '@jridgewell/trace-mapping@0.3.9': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - - '@nanostores/persistent@0.9.1(nanostores@0.9.5)': - dependencies: - nanostores: 0.9.5 - - '@nanostores/solid@0.4.2(nanostores@0.9.5)(solid-js@1.8.18)': - dependencies: - nanostores: 0.9.5 - solid-js: 1.8.18 - - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} - - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.1 - - '@popperjs/core@2.11.8': {} - - '@rollup/plugin-babel@5.3.1(@babel/core@7.24.7)(@types/babel__core@7.20.5)(rollup@2.79.1)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-imports': 7.24.7 - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - rollup: 2.79.1 - optionalDependencies: - '@types/babel__core': 7.20.5 - transitivePeerDependencies: - - supports-color - - '@rollup/plugin-node-resolve@15.2.3(rollup@2.79.1)': - dependencies: - '@rollup/pluginutils': 5.1.0(rollup@2.79.1) - '@types/resolve': 1.20.2 - deepmerge: 4.3.1 - is-builtin-module: 3.2.1 - is-module: 1.0.0 - resolve: 1.22.8 - optionalDependencies: - rollup: 2.79.1 - - '@rollup/plugin-replace@2.4.2(rollup@2.79.1)': - dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - magic-string: 0.25.9 - rollup: 2.79.1 - - '@rollup/plugin-terser@0.4.4(rollup@2.79.1)': - dependencies: - serialize-javascript: 6.0.2 - smob: 1.5.0 - terser: 5.31.2 - optionalDependencies: - rollup: 2.79.1 - - '@rollup/pluginutils@3.1.0(rollup@2.79.1)': - dependencies: - '@types/estree': 0.0.39 - estree-walker: 1.0.1 - picomatch: 2.3.1 - rollup: 2.79.1 - - '@rollup/pluginutils@5.1.0(rollup@2.79.1)': - dependencies: - '@types/estree': 1.0.5 - estree-walker: 2.0.2 - picomatch: 2.3.1 - optionalDependencies: - rollup: 2.79.1 - - '@rollup/rollup-android-arm-eabi@4.18.0': - optional: true - - '@rollup/rollup-android-arm64@4.18.0': - optional: true - - '@rollup/rollup-darwin-arm64@4.18.0': - optional: true - - '@rollup/rollup-darwin-x64@4.18.0': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.18.0': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.18.0': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.18.0': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.18.0': - optional: true - - '@rollup/rollup-linux-powerpc64le-gnu@4.18.0': - optional: true - - '@rollup/rollup-linux-riscv64-gnu@4.18.0': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.18.0': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.18.0': - optional: true - - '@rollup/rollup-linux-x64-musl@4.18.0': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.18.0': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.18.0': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.18.0': - optional: true - - '@solid-primitives/event-listener@2.3.3(solid-js@1.8.18)': - dependencies: - '@solid-primitives/utils': 6.2.3(solid-js@1.8.18) - solid-js: 1.8.18 - - '@solid-primitives/resize-observer@2.0.25(solid-js@1.8.18)': - dependencies: - '@solid-primitives/event-listener': 2.3.3(solid-js@1.8.18) - '@solid-primitives/rootless': 1.4.5(solid-js@1.8.18) - '@solid-primitives/static-store': 0.0.8(solid-js@1.8.18) - '@solid-primitives/utils': 6.2.3(solid-js@1.8.18) - solid-js: 1.8.18 - - '@solid-primitives/rootless@1.4.5(solid-js@1.8.18)': - dependencies: - '@solid-primitives/utils': 6.2.3(solid-js@1.8.18) - solid-js: 1.8.18 - - '@solid-primitives/static-store@0.0.8(solid-js@1.8.18)': - dependencies: - '@solid-primitives/utils': 6.2.3(solid-js@1.8.18) - solid-js: 1.8.18 - - '@solid-primitives/utils@6.2.3(solid-js@1.8.18)': - dependencies: - solid-js: 1.8.18 - - '@solidjs/router@0.11.5(solid-js@1.8.18)': - dependencies: - solid-js: 1.8.18 - - '@suid/base@0.9.0(solid-js@1.8.18)': - dependencies: - '@popperjs/core': 2.11.8 - '@suid/css': 0.4.0 - '@suid/system': 0.11.0(solid-js@1.8.18) - '@suid/types': 0.6.0(solid-js@1.8.18) - '@suid/utils': 0.9.0(solid-js@1.8.18) - clsx: 2.1.1 - solid-js: 1.8.18 - - '@suid/css@0.4.0': {} - - '@suid/icons-material@0.7.0(solid-js@1.8.18)': - dependencies: - '@suid/material': 0.16.0(solid-js@1.8.18) - solid-js: 1.8.18 - - '@suid/material@0.16.0(solid-js@1.8.18)': - dependencies: - '@suid/base': 0.9.0(solid-js@1.8.18) - '@suid/css': 0.4.0 - '@suid/system': 0.11.0(solid-js@1.8.18) - '@suid/types': 0.6.0(solid-js@1.8.18) - '@suid/utils': 0.9.0(solid-js@1.8.18) - clsx: 2.1.1 - solid-js: 1.8.18 - - '@suid/styled-engine@0.7.0(solid-js@1.8.18)': - dependencies: - '@suid/css': 0.4.0 - '@suid/utils': 0.9.0(solid-js@1.8.18) - solid-js: 1.8.18 - - '@suid/system@0.11.0(solid-js@1.8.18)': - dependencies: - '@suid/css': 0.4.0 - '@suid/styled-engine': 0.7.0(solid-js@1.8.18) - '@suid/types': 0.6.0(solid-js@1.8.18) - '@suid/utils': 0.9.0(solid-js@1.8.18) - clsx: 2.1.1 - csstype: 3.1.3 - solid-js: 1.8.18 - - '@suid/types@0.6.0(solid-js@1.8.18)': - dependencies: - solid-js: 1.8.18 - - '@suid/utils@0.9.0(solid-js@1.8.18)': - dependencies: - '@suid/types': 0.6.0(solid-js@1.8.18) - solid-js: 1.8.18 - - '@suid/vite-plugin@0.2.0(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2))': - dependencies: - '@babel/generator': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - '@types/babel__generator': 7.6.8 - '@types/babel__traverse': 7.20.6 - vite: 5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2) - transitivePeerDependencies: - - supports-color - - '@surma/rollup-plugin-off-main-thread@2.2.3': - dependencies: - ejs: 3.1.10 - json5: 2.2.3 - magic-string: 0.25.9 - string.prototype.matchall: 4.0.11 - - '@types/babel__core@7.20.5': - dependencies: - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - '@types/babel__generator': 7.6.8 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.6 - - '@types/babel__generator@7.6.8': - dependencies: - '@babel/types': 7.24.7 - - '@types/babel__template@7.4.4': - dependencies: - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - - '@types/babel__traverse@7.20.6': - dependencies: - '@babel/types': 7.24.7 - - '@types/css-tree@2.3.8': {} - - '@types/estree@0.0.39': {} - - '@types/estree@1.0.5': {} - - '@types/hammerjs@2.0.45': {} - - '@types/node-forge@1.3.11': - dependencies: - '@types/node': 20.14.10 - - '@types/node@20.14.10': - dependencies: - undici-types: 5.26.5 - - '@types/resolve@1.20.2': {} - - '@types/trusted-types@2.0.7': {} - - acorn-walk@8.3.3: - dependencies: - acorn: 8.12.0 - - acorn@8.12.0: {} - - ajv@8.17.1: - dependencies: - fast-deep-equal: 3.1.3 - fast-uri: 3.0.1 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - - ansi-styles@3.2.1: - dependencies: - color-convert: 1.9.3 - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - - array-buffer-byte-length@1.0.1: - dependencies: - call-bind: 1.0.7 - is-array-buffer: 3.0.4 - - arraybuffer.prototype.slice@1.0.3: - dependencies: - array-buffer-byte-length: 1.0.1 - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - is-array-buffer: 3.0.4 - is-shared-array-buffer: 1.0.3 - - as-table@1.0.55: - dependencies: - printable-characters: 1.0.42 - - async@3.2.5: {} - - at-least-node@1.0.0: {} - - available-typed-arrays@1.0.7: - dependencies: - possible-typed-array-names: 1.0.0 - - babel-plugin-jsx-dom-expressions@0.37.23(@babel/core@7.24.7): - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-imports': 7.18.6 - '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.7) - '@babel/types': 7.24.7 - html-entities: 2.3.3 - validate-html-nesting: 1.2.2 - - babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.24.7): - dependencies: - '@babel/compat-data': 7.24.8 - '@babel/core': 7.24.7 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.7) - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.7): - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.7) - core-js-compat: 3.37.1 - transitivePeerDependencies: - - supports-color - - babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.24.7): - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - - babel-preset-solid@1.8.18(@babel/core@7.24.7): - dependencies: - '@babel/core': 7.24.7 - babel-plugin-jsx-dom-expressions: 0.37.23(@babel/core@7.24.7) - - balanced-match@1.0.2: {} - - binary-extensions@2.3.0: {} - - blake3-wasm@2.1.5: {} - - blurhash@2.0.5: {} - - brace-expansion@1.1.11: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - brace-expansion@2.0.1: - dependencies: - balanced-match: 1.0.2 - - braces@3.0.3: - dependencies: - fill-range: 7.1.1 - - browserslist@4.23.1: - dependencies: - caniuse-lite: 1.0.30001639 - electron-to-chromium: 1.4.815 - node-releases: 2.0.14 - update-browserslist-db: 1.0.16(browserslist@4.23.1) - - buffer-from@1.1.2: {} - - builtin-modules@3.3.0: {} - - call-bind@1.0.7: - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - set-function-length: 1.2.2 - - camel-case@4.1.2: - dependencies: - pascal-case: 3.1.2 - tslib: 2.6.3 - - caniuse-lite@1.0.30001639: {} - - capital-case@1.0.4: - dependencies: - no-case: 3.0.4 - tslib: 2.6.3 - upper-case-first: 2.0.2 - - capnp-ts@0.7.0: - dependencies: - debug: 4.3.5 - tslib: 2.6.3 - transitivePeerDependencies: - - supports-color - - chalk@2.4.2: - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - change-case@4.1.2: - dependencies: - camel-case: 4.1.2 - capital-case: 1.0.4 - constant-case: 3.0.4 - dot-case: 3.0.4 - header-case: 2.0.4 - no-case: 3.0.4 - param-case: 3.0.4 - pascal-case: 3.1.2 - path-case: 3.0.4 - sentence-case: 3.0.4 - snake-case: 3.0.4 - tslib: 2.6.3 - - chokidar@3.6.0: - dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - 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 - - clsx@2.1.1: {} - - color-convert@1.9.3: - dependencies: - color-name: 1.1.3 - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.3: {} - - color-name@1.1.4: {} - - commander@2.20.3: {} - - common-tags@1.8.2: {} - - concat-map@0.0.1: {} - - consola@3.2.3: {} - - constant-case@3.0.4: - dependencies: - no-case: 3.0.4 - tslib: 2.6.3 - upper-case: 2.0.2 - - convert-source-map@2.0.0: {} - - cookie@0.5.0: {} - - core-js-compat@3.37.1: - dependencies: - browserslist: 4.23.1 - - crypto-random-string@2.0.0: {} - - css-tree@2.3.1: - dependencies: - mdn-data: 2.0.30 - source-map-js: 1.2.0 - - csstype@3.1.3: {} - - data-uri-to-buffer@2.0.2: {} - - data-view-buffer@1.0.1: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - - data-view-byte-length@1.0.1: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - - data-view-byte-offset@1.0.0: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - - date-fns@3.6.0: {} - - debug@4.3.5: - dependencies: - ms: 2.1.2 - - deepmerge@4.3.1: {} - - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - gopd: 1.0.1 - - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - - defu@6.1.4: {} - - detect-libc@1.0.3: {} - - dot-case@3.0.4: - dependencies: - no-case: 3.0.4 - tslib: 2.6.3 - - ejs@3.1.10: - dependencies: - jake: 10.9.1 - - electron-to-chromium@1.4.815: {} - - es-abstract@1.23.3: - dependencies: - array-buffer-byte-length: 1.0.1 - arraybuffer.prototype.slice: 1.0.3 - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - data-view-buffer: 1.0.1 - data-view-byte-length: 1.0.1 - data-view-byte-offset: 1.0.0 - es-define-property: 1.0.0 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-set-tostringtag: 2.0.3 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.4 - get-symbol-description: 1.0.2 - globalthis: 1.0.4 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - internal-slot: 1.0.7 - is-array-buffer: 3.0.4 - is-callable: 1.2.7 - is-data-view: 1.0.1 - is-negative-zero: 2.0.3 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.3 - is-string: 1.0.7 - is-typed-array: 1.1.13 - is-weakref: 1.0.2 - object-inspect: 1.13.2 - object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 - safe-array-concat: 1.1.2 - safe-regex-test: 1.0.3 - string.prototype.trim: 1.2.9 - string.prototype.trimend: 1.0.8 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.2 - typed-array-byte-length: 1.0.1 - typed-array-byte-offset: 1.0.2 - typed-array-length: 1.0.6 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.15 - - es-define-property@1.0.0: - dependencies: - get-intrinsic: 1.2.4 - - es-errors@1.3.0: {} - - es-object-atoms@1.0.0: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.0.3: - dependencies: - get-intrinsic: 1.2.4 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - es-to-primitive@1.2.1: - dependencies: - is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 - - esbuild@0.17.19: - optionalDependencies: - '@esbuild/android-arm': 0.17.19 - '@esbuild/android-arm64': 0.17.19 - '@esbuild/android-x64': 0.17.19 - '@esbuild/darwin-arm64': 0.17.19 - '@esbuild/darwin-x64': 0.17.19 - '@esbuild/freebsd-arm64': 0.17.19 - '@esbuild/freebsd-x64': 0.17.19 - '@esbuild/linux-arm': 0.17.19 - '@esbuild/linux-arm64': 0.17.19 - '@esbuild/linux-ia32': 0.17.19 - '@esbuild/linux-loong64': 0.17.19 - '@esbuild/linux-mips64el': 0.17.19 - '@esbuild/linux-ppc64': 0.17.19 - '@esbuild/linux-riscv64': 0.17.19 - '@esbuild/linux-s390x': 0.17.19 - '@esbuild/linux-x64': 0.17.19 - '@esbuild/netbsd-x64': 0.17.19 - '@esbuild/openbsd-x64': 0.17.19 - '@esbuild/sunos-x64': 0.17.19 - '@esbuild/win32-arm64': 0.17.19 - '@esbuild/win32-ia32': 0.17.19 - '@esbuild/win32-x64': 0.17.19 - - esbuild@0.21.5: - optionalDependencies: - '@esbuild/aix-ppc64': 0.21.5 - '@esbuild/android-arm': 0.21.5 - '@esbuild/android-arm64': 0.21.5 - '@esbuild/android-x64': 0.21.5 - '@esbuild/darwin-arm64': 0.21.5 - '@esbuild/darwin-x64': 0.21.5 - '@esbuild/freebsd-arm64': 0.21.5 - '@esbuild/freebsd-x64': 0.21.5 - '@esbuild/linux-arm': 0.21.5 - '@esbuild/linux-arm64': 0.21.5 - '@esbuild/linux-ia32': 0.21.5 - '@esbuild/linux-loong64': 0.21.5 - '@esbuild/linux-mips64el': 0.21.5 - '@esbuild/linux-ppc64': 0.21.5 - '@esbuild/linux-riscv64': 0.21.5 - '@esbuild/linux-s390x': 0.21.5 - '@esbuild/linux-x64': 0.21.5 - '@esbuild/netbsd-x64': 0.21.5 - '@esbuild/openbsd-x64': 0.21.5 - '@esbuild/sunos-x64': 0.21.5 - '@esbuild/win32-arm64': 0.21.5 - '@esbuild/win32-ia32': 0.21.5 - '@esbuild/win32-x64': 0.21.5 - - escalade@3.1.2: {} - - escape-string-regexp@1.0.5: {} - - escape-string-regexp@4.0.0: {} - - estree-walker@0.6.1: {} - - estree-walker@1.0.1: {} - - estree-walker@2.0.2: {} - - esutils@2.0.3: {} - - events-to-async@2.0.1: {} - - exit-hook@2.2.1: {} - - fast-deep-equal@3.1.3: {} - - fast-glob@3.3.2: - 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.7 - - fast-json-stable-stringify@2.1.0: {} - - fast-uri@3.0.1: {} - - fastq@1.17.1: - dependencies: - reusify: 1.0.4 - - filelist@1.0.4: - dependencies: - minimatch: 5.1.6 - - fill-range@7.1.1: - dependencies: - to-regex-range: 5.0.1 - - for-each@0.3.3: - dependencies: - is-callable: 1.2.7 - - fs-extra@9.1.0: - dependencies: - at-least-node: 1.0.0 - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - - fs.realpath@1.0.0: {} - - fsevents@2.3.3: - optional: true - - function-bind@1.1.2: {} - - function.prototype.name@1.1.6: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - functions-have-names: 1.2.3 - - functions-have-names@1.2.3: {} - - gensync@1.0.0-beta.2: {} - - get-intrinsic@1.2.4: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - - get-own-enumerable-property-symbols@3.0.2: {} - - get-source@2.0.12: - dependencies: - data-uri-to-buffer: 2.0.2 - source-map: 0.6.1 - - get-symbol-description@1.0.2: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - - glob-to-regexp@0.4.1: {} - - glob@7.2.3: - 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 - - globals@11.12.0: {} - - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.0.1 - - gopd@1.0.1: - dependencies: - get-intrinsic: 1.2.4 - - graceful-fs@4.2.11: {} - - hammerjs@2.0.8: {} - - has-bigints@1.0.2: {} - - has-flag@3.0.0: {} - - has-flag@4.0.0: {} - - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.0 - - has-proto@1.0.3: {} - - has-symbols@1.0.3: {} - - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.0.3 - - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - - header-case@2.0.4: - dependencies: - capital-case: 1.0.4 - tslib: 2.6.3 - - html-entities@2.3.3: {} - - idb@7.1.1: {} - - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - inherits@2.0.4: {} - - internal-slot@1.0.7: - dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.0.6 - - is-array-buffer@3.0.4: - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - - is-bigint@1.0.4: - dependencies: - has-bigints: 1.0.2 - - is-binary-path@2.1.0: - dependencies: - binary-extensions: 2.3.0 - - is-boolean-object@1.1.2: - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - - is-builtin-module@3.2.1: - dependencies: - builtin-modules: 3.3.0 - - is-callable@1.2.7: {} - - is-core-module@2.14.0: - dependencies: - hasown: 2.0.2 - - is-data-view@1.0.1: - dependencies: - is-typed-array: 1.1.13 - - is-date-object@1.0.5: - dependencies: - has-tostringtag: 1.0.2 - - is-extglob@2.1.1: {} - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-module@1.0.0: {} - - is-negative-zero@2.0.3: {} - - is-number-object@1.0.7: - dependencies: - has-tostringtag: 1.0.2 - - is-number@7.0.0: {} - - is-obj@1.0.1: {} - - is-regex@1.1.4: - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - - is-regexp@1.0.0: {} - - is-shared-array-buffer@1.0.3: - dependencies: - call-bind: 1.0.7 - - is-stream@2.0.1: {} - - is-string@1.0.7: - dependencies: - has-tostringtag: 1.0.2 - - is-symbol@1.0.4: - dependencies: - has-symbols: 1.0.3 - - is-typed-array@1.1.13: - dependencies: - which-typed-array: 1.1.15 - - is-weakref@1.0.2: - dependencies: - call-bind: 1.0.7 - - is-what@4.1.16: {} - - isarray@2.0.5: {} - - isomorphic-ws@5.0.0(ws@8.17.1): - dependencies: - ws: 8.17.1 - - jake@10.9.1: - dependencies: - async: 3.2.5 - chalk: 4.1.2 - filelist: 1.0.4 - minimatch: 3.1.2 - - js-tokens@4.0.0: {} - - jsesc@0.5.0: {} - - jsesc@2.5.2: {} - - json-schema-traverse@1.0.0: {} - - json-schema@0.4.0: {} - - json5@2.2.3: {} - - jsonfile@6.1.0: - dependencies: - universalify: 2.0.1 - optionalDependencies: - graceful-fs: 4.2.11 - - jsonpointer@5.0.1: {} - - leven@3.1.0: {} - - lightningcss-darwin-arm64@1.25.1: - optional: true - - lightningcss-darwin-x64@1.25.1: - optional: true - - lightningcss-freebsd-x64@1.25.1: - optional: true - - lightningcss-linux-arm-gnueabihf@1.25.1: - optional: true - - lightningcss-linux-arm64-gnu@1.25.1: - optional: true - - lightningcss-linux-arm64-musl@1.25.1: - optional: true - - lightningcss-linux-x64-gnu@1.25.1: - optional: true - - lightningcss-linux-x64-musl@1.25.1: - optional: true - - lightningcss-win32-x64-msvc@1.25.1: - optional: true - - lightningcss@1.25.1: - dependencies: - detect-libc: 1.0.3 - optionalDependencies: - lightningcss-darwin-arm64: 1.25.1 - lightningcss-darwin-x64: 1.25.1 - lightningcss-freebsd-x64: 1.25.1 - lightningcss-linux-arm-gnueabihf: 1.25.1 - lightningcss-linux-arm64-gnu: 1.25.1 - lightningcss-linux-arm64-musl: 1.25.1 - lightningcss-linux-x64-gnu: 1.25.1 - lightningcss-linux-x64-musl: 1.25.1 - lightningcss-win32-x64-msvc: 1.25.1 - - lodash.debounce@4.0.8: {} - - lodash.sortby@4.7.0: {} - - lodash@4.17.21: {} - - lower-case@2.0.2: - dependencies: - tslib: 2.6.3 - - lru-cache@5.1.1: - dependencies: - yallist: 3.1.1 - - magic-string@0.25.9: - dependencies: - sourcemap-codec: 1.4.8 - - masto@6.8.0: - dependencies: - change-case: 4.1.2 - events-to-async: 2.0.1 - isomorphic-ws: 5.0.0(ws@8.17.1) - ts-custom-error: 3.3.1 - ws: 8.17.1 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - mdn-data@2.0.30: {} - - merge-anything@5.1.7: - dependencies: - is-what: 4.1.16 - - merge2@1.4.1: {} - - micromatch@4.0.7: - dependencies: - braces: 3.0.3 - picomatch: 2.3.1 - - mime@3.0.0: {} - - miniflare@3.20240701.0: - dependencies: - '@cspotcode/source-map-support': 0.8.1 - acorn: 8.12.0 - acorn-walk: 8.3.3 - capnp-ts: 0.7.0 - exit-hook: 2.2.1 - glob-to-regexp: 0.4.1 - stoppable: 1.1.0 - undici: 5.28.4 - workerd: 1.20240701.0 - ws: 8.17.1 - youch: 3.3.3 - zod: 3.23.8 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.11 - - minimatch@5.1.6: - dependencies: - brace-expansion: 2.0.1 - - ms@2.1.2: {} - - mustache@4.2.0: {} - - nanoid@3.3.7: {} - - nanostores@0.9.5: {} - - no-case@3.0.4: - dependencies: - lower-case: 2.0.2 - tslib: 2.6.3 - - node-fetch-native@1.6.4: {} - - node-forge@1.3.1: {} - - node-releases@2.0.14: {} - - normalize-path@3.0.0: {} - - object-inspect@1.13.2: {} - - object-keys@1.1.1: {} - - object.assign@4.1.5: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - has-symbols: 1.0.3 - object-keys: 1.1.1 - - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - param-case@3.0.4: - dependencies: - dot-case: 3.0.4 - tslib: 2.6.3 - - pascal-case@3.1.2: - dependencies: - no-case: 3.0.4 - tslib: 2.6.3 - - path-case@3.0.4: - dependencies: - dot-case: 3.0.4 - tslib: 2.6.3 - - path-is-absolute@1.0.1: {} - - path-parse@1.0.7: {} - - path-to-regexp@6.2.2: {} - - pathe@1.1.2: {} - - picocolors@1.0.1: {} - - picomatch@2.3.1: {} - - possible-typed-array-names@1.0.0: {} - - postcss@8.4.39: - dependencies: - nanoid: 3.3.7 - picocolors: 1.0.1 - source-map-js: 1.2.0 - - prettier@3.3.2: {} - - pretty-bytes@5.6.0: {} - - pretty-bytes@6.1.1: {} - - printable-characters@1.0.42: {} - - punycode@2.3.1: {} - - queue-microtask@1.2.3: {} - - randombytes@2.1.0: - dependencies: - safe-buffer: 5.2.1 - - readdirp@3.6.0: - dependencies: - picomatch: 2.3.1 - - regenerate-unicode-properties@10.1.1: - dependencies: - regenerate: 1.4.2 - - regenerate@1.4.2: {} - - regenerator-runtime@0.14.1: {} - - regenerator-transform@0.15.2: - dependencies: - '@babel/runtime': 7.24.8 - - regexp.prototype.flags@1.5.2: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-errors: 1.3.0 - set-function-name: 2.0.2 - - regexpu-core@5.3.2: - dependencies: - '@babel/regjsgen': 0.8.0 - regenerate: 1.4.2 - regenerate-unicode-properties: 10.1.1 - regjsparser: 0.9.1 - unicode-match-property-ecmascript: 2.0.0 - unicode-match-property-value-ecmascript: 2.1.0 - - regjsparser@0.9.1: - dependencies: - jsesc: 0.5.0 - - require-from-string@2.0.2: {} - - resolve.exports@2.0.2: {} - - resolve@1.22.8: - dependencies: - is-core-module: 2.14.0 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - reusify@1.0.4: {} - - rollup-plugin-inject@3.0.2: - dependencies: - estree-walker: 0.6.1 - magic-string: 0.25.9 - rollup-pluginutils: 2.8.2 - - rollup-plugin-node-polyfills@0.2.1: - dependencies: - rollup-plugin-inject: 3.0.2 - - rollup-pluginutils@2.8.2: - dependencies: - estree-walker: 0.6.1 - - rollup@2.79.1: - optionalDependencies: - fsevents: 2.3.3 - - rollup@4.18.0: - dependencies: - '@types/estree': 1.0.5 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.18.0 - '@rollup/rollup-android-arm64': 4.18.0 - '@rollup/rollup-darwin-arm64': 4.18.0 - '@rollup/rollup-darwin-x64': 4.18.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.18.0 - '@rollup/rollup-linux-arm-musleabihf': 4.18.0 - '@rollup/rollup-linux-arm64-gnu': 4.18.0 - '@rollup/rollup-linux-arm64-musl': 4.18.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.18.0 - '@rollup/rollup-linux-riscv64-gnu': 4.18.0 - '@rollup/rollup-linux-s390x-gnu': 4.18.0 - '@rollup/rollup-linux-x64-gnu': 4.18.0 - '@rollup/rollup-linux-x64-musl': 4.18.0 - '@rollup/rollup-win32-arm64-msvc': 4.18.0 - '@rollup/rollup-win32-ia32-msvc': 4.18.0 - '@rollup/rollup-win32-x64-msvc': 4.18.0 - fsevents: 2.3.3 - - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - - safe-array-concat@1.1.2: - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - isarray: 2.0.5 - - safe-buffer@5.2.1: {} - - safe-regex-test@1.0.3: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-regex: 1.1.4 - - selfsigned@2.4.1: - dependencies: - '@types/node-forge': 1.3.11 - node-forge: 1.3.1 - - semver@6.3.1: {} - - sentence-case@3.0.4: - dependencies: - no-case: 3.0.4 - tslib: 2.6.3 - upper-case-first: 2.0.2 - - serialize-javascript@6.0.2: - dependencies: - randombytes: 2.1.0 - - seroval-plugins@1.0.7(seroval@1.0.7): - dependencies: - seroval: 1.0.7 - - seroval@1.0.7: {} - - set-function-length@1.2.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - - set-function-name@2.0.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - - side-channel@1.0.6: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - object-inspect: 1.13.2 - - smob@1.5.0: {} - - snake-case@3.0.4: - dependencies: - dot-case: 3.0.4 - tslib: 2.6.3 - - solid-js@1.8.18: - dependencies: - csstype: 3.1.3 - seroval: 1.0.7 - seroval-plugins: 1.0.7(seroval@1.0.7) - - solid-refresh@0.6.3(solid-js@1.8.18): - dependencies: - '@babel/generator': 7.24.7 - '@babel/helper-module-imports': 7.24.7 - '@babel/types': 7.24.7 - solid-js: 1.8.18 - transitivePeerDependencies: - - supports-color - - solid-styled@0.11.1(solid-js@1.8.18): - dependencies: - '@babel/core': 7.24.7 - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - '@types/css-tree': 2.3.8 - browserslist: 4.23.1 - css-tree: 2.3.1 - lightningcss: 1.25.1 - solid-js: 1.8.18 - transitivePeerDependencies: - - supports-color - - source-map-js@1.2.0: {} - - source-map-support@0.5.21: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - - source-map@0.6.1: {} - - source-map@0.8.0-beta.0: - dependencies: - whatwg-url: 7.1.0 - - sourcemap-codec@1.4.8: {} - - stacktracey@2.1.8: - dependencies: - as-table: 1.0.55 - get-source: 2.0.12 - - stoppable@1.1.0: {} - - string.prototype.matchall@4.0.11: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.4 - gopd: 1.0.1 - has-symbols: 1.0.3 - internal-slot: 1.0.7 - regexp.prototype.flags: 1.5.2 - set-function-name: 2.0.2 - side-channel: 1.0.6 - - string.prototype.trim@1.2.9: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - - string.prototype.trimend@1.0.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - - string.prototype.trimstart@1.0.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - - stringify-object@3.3.0: - dependencies: - get-own-enumerable-property-symbols: 3.0.2 - is-obj: 1.0.1 - is-regexp: 1.0.0 - - strip-comments@2.0.1: {} - - supports-color@5.5.0: - dependencies: - has-flag: 3.0.0 - - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - - supports-preserve-symlinks-flag@1.0.0: {} - - temp-dir@2.0.0: {} - - tempy@0.6.0: - dependencies: - is-stream: 2.0.1 - temp-dir: 2.0.0 - type-fest: 0.16.0 - unique-string: 2.0.0 - - terser@5.31.2: - dependencies: - '@jridgewell/source-map': 0.3.6 - acorn: 8.12.0 - commander: 2.20.3 - source-map-support: 0.5.21 - - to-fast-properties@2.0.0: {} - - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - - tr46@1.0.1: - dependencies: - punycode: 2.3.1 - - ts-custom-error@3.3.1: {} - - tslib@2.6.3: {} - - type-fest@0.16.0: {} - - typed-array-buffer@1.0.2: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-typed-array: 1.1.13 - - typed-array-byte-length@1.0.1: - dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - - typed-array-byte-offset@1.0.2: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - - typed-array-length@1.0.6: - dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - possible-typed-array-names: 1.0.0 - - typescript@5.5.2: {} - - ufo@1.5.3: {} - - unbox-primitive@1.0.2: - dependencies: - call-bind: 1.0.7 - has-bigints: 1.0.2 - has-symbols: 1.0.3 - which-boxed-primitive: 1.0.2 - - undici-types@5.26.5: {} - - undici@5.28.4: - dependencies: - '@fastify/busboy': 2.1.1 - - unenv-nightly@1.10.0-1717606461.a117952: - dependencies: - consola: 3.2.3 - defu: 6.1.4 - mime: 3.0.0 - node-fetch-native: 1.6.4 - pathe: 1.1.2 - ufo: 1.5.3 - - unicode-canonical-property-names-ecmascript@2.0.0: {} - - unicode-match-property-ecmascript@2.0.0: - dependencies: - unicode-canonical-property-names-ecmascript: 2.0.0 - unicode-property-aliases-ecmascript: 2.1.0 - - unicode-match-property-value-ecmascript@2.1.0: {} - - unicode-property-aliases-ecmascript@2.1.0: {} - - unique-string@2.0.0: - dependencies: - crypto-random-string: 2.0.0 - - universalify@2.0.1: {} - - unplugin-solid-styled@0.11.1(rollup@2.79.1)(solid-styled@0.11.1(solid-js@1.8.18))(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)): - dependencies: - '@rollup/pluginutils': 5.1.0(rollup@2.79.1) - solid-styled: 0.11.1(solid-js@1.8.18) - unplugin: 1.11.0 - optionalDependencies: - vite: 5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2) - transitivePeerDependencies: - - rollup - - unplugin@1.11.0: - dependencies: - acorn: 8.12.0 - chokidar: 3.6.0 - webpack-sources: 3.2.3 - webpack-virtual-modules: 0.6.2 - - upath@1.2.0: {} - - update-browserslist-db@1.0.16(browserslist@4.23.1): - dependencies: - browserslist: 4.23.1 - escalade: 3.1.2 - picocolors: 1.0.1 - - upper-case-first@2.0.2: - dependencies: - tslib: 2.6.3 - - upper-case@2.0.2: - dependencies: - tslib: 2.6.3 - - validate-html-nesting@1.2.2: {} - - vite-plugin-package-version@1.1.0(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)): - dependencies: - vite: 5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2) - - vite-plugin-pwa@0.20.0(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.1.0): - dependencies: - debug: 4.3.5 - fast-glob: 3.3.2 - pretty-bytes: 6.1.1 - vite: 5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2) - workbox-build: 7.1.1(@types/babel__core@7.20.5) - workbox-window: 7.1.0 - transitivePeerDependencies: - - supports-color - - vite-plugin-solid-styled@0.11.1(rollup@2.79.1)(solid-styled@0.11.1(solid-js@1.8.18))(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)): - dependencies: - solid-styled: 0.11.1(solid-js@1.8.18) - unplugin-solid-styled: 0.11.1(rollup@2.79.1)(solid-styled@0.11.1(solid-js@1.8.18))(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)) - vite: 5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2) - transitivePeerDependencies: - - rollup - - vite-plugin-solid@2.10.2(solid-js@1.8.18)(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)): - dependencies: - '@babel/core': 7.24.7 - '@types/babel__core': 7.20.5 - babel-preset-solid: 1.8.18(@babel/core@7.24.7) - merge-anything: 5.1.7 - solid-js: 1.8.18 - solid-refresh: 0.6.3(solid-js@1.8.18) - vite: 5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2) - vitefu: 0.2.5(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)) - transitivePeerDependencies: - - supports-color - - vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2): - dependencies: - esbuild: 0.21.5 - postcss: 8.4.39 - rollup: 4.18.0 - optionalDependencies: - '@types/node': 20.14.10 - fsevents: 2.3.3 - lightningcss: 1.25.1 - terser: 5.31.2 - - vitefu@0.2.5(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)): - optionalDependencies: - vite: 5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2) - - webidl-conversions@4.0.2: {} - - webpack-sources@3.2.3: {} - - webpack-virtual-modules@0.6.2: {} - - whatwg-url@7.1.0: - dependencies: - lodash.sortby: 4.7.0 - tr46: 1.0.1 - webidl-conversions: 4.0.2 - - which-boxed-primitive@1.0.2: - dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.7 - is-string: 1.0.7 - is-symbol: 1.0.4 - - which-typed-array@1.1.15: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.2 - - workbox-background-sync@7.1.0: - dependencies: - idb: 7.1.1 - workbox-core: 7.1.0 - - workbox-broadcast-update@7.1.0: - dependencies: - workbox-core: 7.1.0 - - workbox-build@7.1.1(@types/babel__core@7.20.5): - dependencies: - '@apideck/better-ajv-errors': 0.3.6(ajv@8.17.1) - '@babel/core': 7.24.7 - '@babel/preset-env': 7.24.8(@babel/core@7.24.7) - '@babel/runtime': 7.24.8 - '@rollup/plugin-babel': 5.3.1(@babel/core@7.24.7)(@types/babel__core@7.20.5)(rollup@2.79.1) - '@rollup/plugin-node-resolve': 15.2.3(rollup@2.79.1) - '@rollup/plugin-replace': 2.4.2(rollup@2.79.1) - '@rollup/plugin-terser': 0.4.4(rollup@2.79.1) - '@surma/rollup-plugin-off-main-thread': 2.2.3 - ajv: 8.17.1 - common-tags: 1.8.2 - fast-json-stable-stringify: 2.1.0 - fs-extra: 9.1.0 - glob: 7.2.3 - lodash: 4.17.21 - pretty-bytes: 5.6.0 - rollup: 2.79.1 - source-map: 0.8.0-beta.0 - stringify-object: 3.3.0 - strip-comments: 2.0.1 - tempy: 0.6.0 - upath: 1.2.0 - workbox-background-sync: 7.1.0 - workbox-broadcast-update: 7.1.0 - workbox-cacheable-response: 7.1.0 - workbox-core: 7.1.0 - workbox-expiration: 7.1.0 - workbox-google-analytics: 7.1.0 - workbox-navigation-preload: 7.1.0 - workbox-precaching: 7.1.0 - workbox-range-requests: 7.1.0 - workbox-recipes: 7.1.0 - workbox-routing: 7.1.0 - workbox-strategies: 7.1.0 - workbox-streams: 7.1.0 - workbox-sw: 7.1.0 - workbox-window: 7.1.0 - transitivePeerDependencies: - - '@types/babel__core' - - supports-color - - workbox-cacheable-response@7.1.0: - dependencies: - workbox-core: 7.1.0 - - workbox-core@7.1.0: {} - - workbox-expiration@7.1.0: - dependencies: - idb: 7.1.1 - workbox-core: 7.1.0 - - workbox-google-analytics@7.1.0: - dependencies: - workbox-background-sync: 7.1.0 - workbox-core: 7.1.0 - workbox-routing: 7.1.0 - workbox-strategies: 7.1.0 - - workbox-navigation-preload@7.1.0: - dependencies: - workbox-core: 7.1.0 - - workbox-precaching@7.1.0: - dependencies: - workbox-core: 7.1.0 - workbox-routing: 7.1.0 - workbox-strategies: 7.1.0 - - workbox-range-requests@7.1.0: - dependencies: - workbox-core: 7.1.0 - - workbox-recipes@7.1.0: - dependencies: - workbox-cacheable-response: 7.1.0 - workbox-core: 7.1.0 - workbox-expiration: 7.1.0 - workbox-precaching: 7.1.0 - workbox-routing: 7.1.0 - workbox-strategies: 7.1.0 - - workbox-routing@7.1.0: - dependencies: - workbox-core: 7.1.0 - - workbox-strategies@7.1.0: - dependencies: - workbox-core: 7.1.0 - - workbox-streams@7.1.0: - dependencies: - workbox-core: 7.1.0 - workbox-routing: 7.1.0 - - workbox-sw@7.1.0: {} - - workbox-window@7.1.0: - dependencies: - '@types/trusted-types': 2.0.7 - workbox-core: 7.1.0 - - workerd@1.20240701.0: - optionalDependencies: - '@cloudflare/workerd-darwin-64': 1.20240701.0 - '@cloudflare/workerd-darwin-arm64': 1.20240701.0 - '@cloudflare/workerd-linux-64': 1.20240701.0 - '@cloudflare/workerd-linux-arm64': 1.20240701.0 - '@cloudflare/workerd-windows-64': 1.20240701.0 - - wrangler@3.64.0: - dependencies: - '@cloudflare/kv-asset-handler': 0.3.4 - '@esbuild-plugins/node-globals-polyfill': 0.2.3(esbuild@0.17.19) - '@esbuild-plugins/node-modules-polyfill': 0.2.2(esbuild@0.17.19) - blake3-wasm: 2.1.5 - chokidar: 3.6.0 - date-fns: 3.6.0 - esbuild: 0.17.19 - miniflare: 3.20240701.0 - nanoid: 3.3.7 - path-to-regexp: 6.2.2 - resolve: 1.22.8 - resolve.exports: 2.0.2 - selfsigned: 2.4.1 - source-map: 0.6.1 - unenv: unenv-nightly@1.10.0-1717606461.a117952 - xxhash-wasm: 1.0.2 - optionalDependencies: - fsevents: 2.3.3 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - wrappy@1.0.2: {} - - ws@8.17.1: {} - - xxhash-wasm@1.0.2: {} - - yallist@3.1.1: {} - - youch@3.3.3: - dependencies: - cookie: 0.5.0 - mustache: 4.2.0 - stacktracey: 2.1.8 - - zod@3.23.8: {} From bef75b8a8afaa103bab9287c0b98d00d7fd0eafe Mon Sep 17 00:00:00 2001 From: thislight Date: Mon, 5 Aug 2024 14:12:33 +0800 Subject: [PATCH 036/300] switch to bun --- .forgejo/workflows/depoly.yml | 20 +- bun.lockb | Bin 0 -> 233176 bytes package.json | 2 +- pnpm-lock.yaml | 5530 --------------------------------- 4 files changed, 12 insertions(+), 5540 deletions(-) create mode 100755 bun.lockb delete mode 100644 pnpm-lock.yaml diff --git a/.forgejo/workflows/depoly.yml b/.forgejo/workflows/depoly.yml index 4195610..385fbb2 100644 --- a/.forgejo/workflows/depoly.yml +++ b/.forgejo/workflows/depoly.yml @@ -13,27 +13,29 @@ jobs: - name: Checkout uses: actions/checkout@v4 - - name: Setup pnpm - run: | - corepack install - pnpm config set store-dir /tmp/pnpm-store + - name: Setup Bun + uses: oven-sh/setup-bun@v2 + with: + bun-version-file: 'package.json' - name: Cache Dependencies id: dependencies-cache uses: actions/cache@v4 with: - path: /tmp/pnpm-store - key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }} + path: ~/.bun/install/cache + key: ${{ runner.os }}-bun-${{ hashFiles('**/bun.lockb') }} + restore-keys: | + ${{ runner.os }}-bun- - name: Install Dependencies - run: pnpm i + run: bun install - name: Build Dist (Staging) - run: pnpm dist -m staging + run: bun dist -m staging if: env.GITHUB_REF_NAME == 'master' - name: Build Dist - run: pnpm dist + run: bun dist if: env.GITHUB_REF_NAME != 'master' - name: Depoly to Preview diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..c0145f0bf66ad2e28083aa3f7fb0a9c6996162c3 GIT binary patch literal 233176 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∾9@F3To#K@H8c>)-=(cI^6 zUNi69&$TfN`Ph$H7v#!b@>RP)j~m)Q)K}%xCCd{67u4jQa{~+7be(#7-S|j*6EJKc zZ|^+&>S>WpU+9=+z|gLGyhoiO-&}Cm5*@P%7)%+e*S*_jV8PVL)jH-&VA=xH{k2oJ zp1XKXfsSc@w(LJoeKuzDiL1xmp-PJKSgsn16&cGplaRG#>lM?SZv%7_OKBvkDmYg}#kfEsM?E3>$VbTL@$jhWnF<$ zD@@O-G!qXWc~|#a9tf#?kS5~y6&3~}rR`6ef9whEhr$*EZ^H7nw*u<+kp1-1Yxex} z=WO48Q46AgRqzrc)Av|jYn3wugkRd~yq%L3c((bhvOxz^UjTKAIF zy8pcK@zI;3Og^AG%fRdcQys+H4Z z8K9pE?QdBgvBp)>Tjq1$nDVl!gIAp(%R`+w0T`Ba+A9A$9lH(Y3Oaiu`p$G<*sc$3 z%>CmH{}9-{0)vubCna0~b$Nczn;YIZV8>=bP1N>tedPFa*MisEj4N4pq(~!b+sfXN z7O|DRBQaL?j>K5mI}&4M??{Z5y(2MJ_Kw6@**g+rW$#FgmAxY|R`!m>SlK%gV`cA1 zjFr73F;@1D#8}xo5@TiWNQ{-eBQaL?j>K5mI}&4M??{Z5y(2MYMPXGIgI9*V4Mdt8=JU*j(oVc4!GJ-_h-z3EQ@>wx_<(XIkUOeM0D zJe7b^o=P^F59JB^;o5}1h3CBY&Fe=W_Cxcuj(o*m)F&}RzwUEW(>cYJ2289fScX(R z@9||f>M?zzj*0mraNU59>9tq>v#di}Z|n%blYp8$S~l7j0m1ce6@2hqy;oQ2X%g+X z=4rhL!08sfA;)zM4Q*)Iig|q0z*AIWZ}Mjy_URt zP{$l~k+dlekG)qIeEVn2&9pQffnl2eoKkmW#y8WC(J>b&Ox_O@1~+PQ1H4+aG{wMR ziKqJJTmN3PwnNk1I_4%|Iso(gs0EX|EPDMP9rGwKv}(TUeM*C0&+Yq?j(G!^w!q|` z_Gn(#Uz_{unD2nW0!a1TsmBkWT>dMpCyj%~gCw;}wm-M@hF_+((J@|NIN$DBe@Ibe z#%qN-rav&WxK0>9IBnO&536-d0Wg$k4xZr3VbNHpQ z4ZXOv@1Ch&PdFKUf#WG`>#|U3uxxZ7G`3aMWi4J*!VVb<-Z*Dk=HEM~@5g@*2M0>K_<-R|@5;2*8!mWp?%BX_-32yMavRmgV2imK zZDpjfv;ss)6SYh8v@0)@?JRMh790q_v~17emrKk0`U`qoc;7EG{+1XT6|EKK`$w9r z{%p`cUjjq_H|WHUz%)X6MmDMX{N0`Bz5onuzFb)Az#I+Cj$Ofh6L;?K4-88Rjl^1@ zF5k8E!#l?}+RvRkl!i5THPW!{+*N(f$7R{y?`odb4@T zW9!Y zk38yIw1ZwpVnNe08JHHp9Q+{mZ1vx_(AN-Jnf=F-Hz>u-tg0(zJx$s$torQdZ}<#p zP&?eow@d>)>dmm^O%%uygM4yrytRnA@hZ7ibJW~^mo&ZZBlrz!Hczq(}y*9 z1#=k<^CU2>P|_3T3HbZVIJ5ozf@`6x5?hGi4Q;23 z=V7F23ThMH%v(ME*L_0eWCHRJGNyu zxQ;t1T*X1}J{cH}jRU$~Q~%b98?F&)gazpvQ_jxs`E~H^je2bx&>I+ZMaueoq~S`* zt33{n&3QbS4-EAvFvEahEnL_0gX0ElewALY=yAjpMZNyYSj0DS(u%IbCm+=w7;J@- zH!*QWK1G+$+}CFKpnkwm*w6>Ta3TDqF-PB7-u>=wgFXNTr9p?xuxM4vn=Wz05FB)2 z1tqV$lz>~dv+?+Cg5Q^REQu_>`X@? zzA!hF)GN&QDh|M;tp8LRT?Kl!jl+cuB-PRC4A zX_}pP!EK9{Hrl3RZUN>9DO+1G+S*Y*;% z=ejo30)_b={=IzpaidS{f82{`@m%>q-?q=^-^JMXEc<-^?@M|nCiPq~+cK#CvhQyF zoE8elA7~0{7cUkEH$8XFk(r%#!*fK#bX94dZ+7;tR}Y-~1~8B`)p8GDsLkHH{KK99 z{b}~?dYYNQa4h-lsx1S~e>T=a$8;Pm=UI`*Rv(r&&$AsEwK9hl&2au0oZx?E`K>*^ zyctz23bswxN< z`p@W*e`9W=dLw~}k1}@qr{Pcmq<~YEtNJXsv(ks16qHBk_&}%#w_X;GsJq*cE1}D|oIcmthecV~a5JTy#28Lr} zy|3@c3EjE!C`Ap@c@CH+z-)SB_mh*a9ym_N+&Wfj%i+)MtG8(T-qQs}%szGj!|~_x zAs<{c@~786*VFtA3}yY=%!!R!)%mcJt2m;1JoY8UiK#jE70QDorIr;?ihS3XOT>fF+j&imt zG*C)sDbmocIoqm_RJp&lk;_Wes`P3Cw0PTY?7TGw;9Q*2=hM!Ge^)RTh7GTvB z;dGR@EE4F|e)Ht(mJZ%6FoJ{0NW;GH@r+Xs_PAbZ>;ifZw10z!H#RyFGE&QygbsD;U@x`Z(hkYPq zjq>nfjFw2#VM_lqe%{lzxxmoH+0zo3rogN^@{^Lv>1*BxM%BV;z_9Hc-SYPa+0a=ljW>VytLpI!M%h7oh=~4(s%UNhU#c_1|}*oriiTjRR-?7TYb_-a*B^wYh- z(00lCXUz$N>fJ=|KuQN3*!LfsRt0J{8Wz;-M<$zA1#0$V)^AEWB?~vSo8x=-1#nGU z8SU+G*i;+=kNo(TJFZxBq_pg^u$bp*3Jk}rCIjER?3~EyH>#4Ny`2CITgbM{^B$Sy zUC$Q6aSmL=@{agN`zzP>zi-j2XLgk>L}*wq(omwUr@y-3*()C6i7F+xbAjO~)BJ;5 z&VBa5H})zFI2Z^FN3#_lUa{ikn^#>gFwof9o-2W2EqvT+etNU&BDoqa>>c|N(7p#3 zf*LJ{oPpyzr7!-TyA@m`#%j3zSU(PFnj%f5x6^kMJGS{o@rGKs78tg~3HJ>i;9L1- zu__OwGY1&!pLZaYcH!y7R&3kw4Q})6;pDGM$E^WNTOuhfbW}noZ zd5)f@H87-BuUTx}lDqnAIt046BQPw_4@b2cQ~cha7wKub0Ye#F@yLju+69No*$3*U zYpwK7Q8?oD!@bGV{@dv{Kf8Gz@}c{TW6!!n@iwfW(Uwk&MoEc^c3|IsEL*%7HCIoN zvVOX9_mGeJ|1DN0(XOGzY_uh0T{=^Yc#G;9YgW>vO3`0-nu zW3VrP+D>5D7k2wr*6SX7@I!?`&3y+9Wqst%vv*&3+Z<)tk+%cDus0rdX~j)n%{zX- zN`t;_)3ea7kD4U&S+d}WoRiky688$T)jQzLM%LiK9%C;z`!qHZg$!({K~vPG?bz#H zd%a`dLhSlNm;YH`s7-nP?@7%pYvcc(n%xXJ!&76fp~>wfYCmq< z$iPt_*rY)}wYRwJwPhgci$r`?o@2I8dhY##Zq1t21n>3(iBOPcy`|{XZoi_PEI`-|rh69WxHq^ki4R071tXnUQa{Jk#&FBmc_FN~e z!Q=Z+E&t}DIw$F4qs?gM*hcM3YBMr{nvLacKQcM?IeYusM%HLm_BB^yYPICeeimxO zwPSCzYa!XzB^C2Io0@~2Xg|xbnSG#6?YXw6HpVwrtj8ZcV$|i$eycx|EscO=IMtL$@ ztjAMZqK(?G$6MU|!ubz+u*JjgMLfc$akyX zs*LqNbZ!^o{8Y^`EPc%KXp{d3X=sygY1A#$ti^>~3C0NyvakV|X28sAQr$ay**sc5LCP@^xN6nP;kz}7aNQM{pS)FHM z&7mb)`pk(_F^M(TByAD$;q23bYt`bbXUTCPdriALR@HfcJ437<)Z8p!SaW^1ytv@Y z=UQ`y%v~N}<^uz9R}cHHWzJ<)fnR}PKLu~gRhkut|9V{8%>CNz9n!HoOPZM^o#tte zgGwvVA9$6_6XEtpV;Yk|hossNGM$Zv;dyA5)`bqQ-gr5+5BV?WEzoUDs*-Lcs zY`IQ;)QZiU&#JqKB}MI^6MO7$ak0NO$jP!2I~ylLdX#UwT!?95z?nXh&G(IN|$sw?Ba%j1YS7zK7pa@O#^7Q+${1 z8}z$KBm6CYQ<&RJ%HD3ZVBC0t$wcGHKK?fG1(E6_Iu0Mv^eyjtiQz%zk%Q`tPV#bpV)lz+7?Vw9D3|JqZsLje`?zmoj+t#=Ab< zI859trP2%n1`WSDeMs(Wo6a4?{U62kWMIhK?$d`pzohEtS$aPA1A{}O)tmjlESbCe z=L340H-PB`%yIAEnSajm+a+&82KyDY|91W5hd-L0%+&~$&+&JNdr7O;m;BtJ&z+R|Z149n}Q?KzQOFH*BOs1hH<~)Vzomp}B?VC@! zL|}x6z?=@u#%ZNDZ~E_!J9TQe0mFQrzN+`!=V#x?y--!# z&j520Fb6hQc6_PXqSZRJZNN~X{dR`3Zu#se?jfr*_2)|t`akv9Z+SmI|CWZy^PC9` zXuCgiRJ)vBGTm7KYD?G zeyp>e<`Q5i(L0v6S+c%u`%W4MIAIA4%X7h7Lxzm_x#>_n&E3GTFLbEf*}Lg;^9!^z zS)ONr=>p7eLq@iq{AmOFhbX!I2uv0+7mvJq_a)O_)-fFx$R2$Cr@616-t@z>bWDF> zSf@ii_HE34vunIOd7hBMOwIN78kMywN8=#FGfz=_>|m_rWlaM|>D1N(L*5FHpB!BN z#O3Gen7zR8#KH4loVaA=g%h|osJL#tP<$1oy0BlHt2TXd{AeB12beREX674>*8Qj6 zXNER978tg-N4Kx9i_bdk($m}l3?+KN<6ZH`p7Usrs(jW1!xlgO=5vM@RW#tvs=|D& z@)`U`w|)10+`dx7?%zbFzlx*e;$6@wjRq2Eo3+_tc5Mh zzkX)zTeGEx75(&PU|62_U!LNre742cIZFZC$gv2y8NVmsx6T89bh$R8ffs3DguoKFL7qX*`a04ZCfJuwJq}z`ry8$as-_5O!v}lfdxF_qFQ`1*T4wg z`rj-2_J(e0ue|5~n7;ceO(8Jc@ocnrPkO_q7as`>J+o2UHIa^%&ni$m0@TV61T+76 zG<*lB@zw^E^eJH2=N^3F2BR$w^W3HGc03F^ZhWoT{ zzmnDCl~4P~-YD)3{}CAW#uG+N9lFy~&b?hq6oy-~`=oX`ug7bf>b&*@cfMh!5_9bR zQf}Rvzj<-qh)MK>QEB=DLp^%al2`iAEzBRKW0G%Loy^%TsM(j)vK@$;`#0;<} z_PibQh#coWyL#8}J6`@zE3{s8EIQ}ah6BqJE@BQ?8*27x>@`x^qjE%V)NseJ6Zbtm z66I04%6?{KFC9w`#GJ`KjlJfxu5BuWJ66iGq~|wWwRh^q2Tqn;6JuY}$B~9s+KB9F zH$HjiKfL8Ym2@jGw9>W=8ui?>EK4fRXVs=W_G=C`q*iMVtowrVsZ2{52(4^w z!;+f)Jj;GX=6@vv`_-Zvav)|OHB2MqX1|hELu$2d2Q|z`a9tbg*1qjn-|Oz&67BVy zT|RlX_s3^A+-Y8O>Et=woo-js+Sy`u)c$u?n*9oG4dqtL{!=@-*{?X)kZYGdXQvbM zY)4JIu^t;_wX)X#wQ)}Ldix!L8p|!)YCXh#_VLy;a$jb4!J7Qr)}C^lW^p;S_ycGR5O0Z+tR ze`BXMV~Mr(G&4LQJ?kbQfrosO@KL@jr| zh34D-lAHs6(CYS6j(=c9n^g3UeXELWlBxts7Jv+JCYb1N#YL~`NZrQf| zhj;qnvU3l))9B z=M?UEqLUJncwY@~FT_?7{)%vu0)O8+FYk+0?|#8OJ$0|Ug%=ffps>G?h=HF_cH4;) z+m7mze4o(Y@5mho>-)H{5omMY6EW6uBgW1e%diotvTmht` zcQV(S+)C9qX@7`+n>HFLNDqW?PjWDrF4r#8`&GhKFyspki$wyV(LLH`>YuI6Gkmr- z@tdu4u+7W8m^yz>Ueo4{CND3+JH5%K>~DD3^op$|iTIfK4jpd%`K$Q@k=tiC&kuw; zGpzCU`_9>S!nmhmQC!=IuZoR)zwOkaMHl{l)MmNcbX{K8H`6K`9c=qd9aglb*Q~?D z?-A$l8@riypV;;Eik1ZmJ5x4ZdD&hsejGH~S^Ms)cq@nmN@IpN-cnz|Sl?*B7mP#$ z;gAVc;WNI9JJpf`y!ZrZ&|lb#w?pD9u5gO$TuM^W81DWzhKl69@~f5v3EcR)!69qz4Cqe{$OWZT<%wo zxDSdljK5O$ss^;LzUD{56(|P2Diw{1YdS(`e?Yo&gYs&ejEQ=AKUHQoasgue%&V$z zM>^)1Bxeo*RaG=6Ze$um>Qqvx&*mVNdh${;X0reec^L(Sq{dh9%8$&FK%qb8FNmT2 z)J7h^qx@bJs{DZpPMv zyxvaGQxd70khLJL>w!edI>taYy)#E?gHlN!YmZ<9?7Jm24rfSgeDzAdEaohZ zXJlt&WMt-a$tm!K0%cJ@v|r5c4?=TC!Xa-ApMWfmgi8WtB_Z5|g&PBcetbnTT2?AP zCU2r!nC~D9>jYrU8Ug9Bn!sZzEQo?|FdT{Y=-w8rBiJDuJvK<|FQU#x-8rPyKGlts z+M^f^vs^04Bp4(%y^HF?Oxd}ft>jHMEUE!T;T7V}^o(^0I>uKa3RUOAP;rn*f{jE< zQGBBW!<^_0Zl%(!FJbC>I}0P%i+KWX5e5GWUF;9SDut~|iyt;GZ%j9%U`F91Uoc?3 zfkIfWfuevvf`%zB-ztrSkvbOeJ9Wh5$S6v3pr|Xip5@LOXsa?=F-`$s!Pcb$&AFIl zqmwrUOS-96i86>O2K6W_M(9PAIj_Ehf#NIC?B>y&2CyDf1XEq{D#0Mke23UOK6mrL{XvCvd(c;VKn|J5>*r_k`x<+E-g^dUkuf) z)hVn=VNp6rDlsZZ7Hi226fxn5g~#HX*$$-QaX=&f3?X7I!$mOS7$ghBkJ>|&P`*sz z3q=ERW*NmWP#TWJqF$k(sWeOdT1OUl%al4WW)&T|Sp^H7)zyVvGc%xM4)AuR1EdQL z?W819YmXQL+(l)O36dJ#keY1}ViO{QphB35#vH_AiU(q*cL<`Jv|VIy2%XcF79+(8 z@dZ@W98cO*V!o_2ud`8Q>iD23HGn~NI54Bq#+3+?$Da*7t=E`Hpm4Om!XFG0Pb;ew z1A{RbDodJQL^$PWAZ1E}tWED&JU~5(24>7hogx$$JQ_$zGmh3DyLmy13?!ri3ke~p z754^e!yc#^m`%xQF;X(fS=Ndsbs?A}xkUXj%#Lx-L#jpB;s;W3SZxYJbN=ywx#SD~)AzW!AP06 zfL~B_sO5MZFcE*oK+o~bxtUjC&jBmFNT;5J&U8!V%&{(s#Ii_Hr)ZlSBm|0vH-j)8 zWYWt@wSiDv&7t?vq;ZyyzBG@d`U}Q`ZqU8XX-jY^au~_PFBBGbs+j_2WC)uX1z0|i zmuGWvL0rNSh=xnTk<#Kofwv+`YZBki43~KQkw`e=P|^x&g^H*bEAA?b{Ia4Ve}spY z%3?*{Jg=$;rzVt;9VjM*pkXMD>%fYs1fXGhM}u@%cL^c^jf4=PG~F7gLB^n9c!R;O zWjQOB3^jV&bJ3UyQ_1!kf!;!~YM$QZv+Bo1fJttlEOi)8u>s)akX&S?w7vOq|wJ*Jc{gjFvT9?8^` zo+=owP@-`tr5*_+^cPWuZqredOj%^3jCDRR^HO|xivp3T(~Kf9Du^ZqrNmjh+Cd=x ztaIcbk5XT}?TEDTH>7r-pzCc=B-R>aN;w;vG7=l!M2X$nkFkd!x$#w)MXu?My@~{k z?>hf_Z8*qKj|4*cOG-7T_jyqYO#$di!69F5iyA4lN0F!7XeQQ&i$c`V+9OKLn}VGC zY<{pTg1L7w(rJ$(KetiGytRzf+AcG9hE=vQPCmM}e8Os`e27+IkGn)Zi)BjrD2~56 z$i@&08H(6qgmf#TAtR)d>!RXjAs5-mbdp&lln*SQS}Rw0vFq>khwxE9r=iaxHi;Tj zgEmj%I@g$_16d+9*N24%jZ2z>V6>9a@q^lRx7TDItU09Ok1pq4rD5tq?89@C=Tuv! zh|HanLgda(`&5c(_GJJ8b3ls13S%)l?j!*s(pv(F!H0VzXKJs(M*~ z#YCMll&m8 z%WQ9jFIrMr$?-uv3Nr-L2)Wp-mcY{em2!$+5Db?U3W}Y_mSd{HwI@tM3WL~SQeO?$ z+;ilnowhAe8V*+Bs=uIhEIEyidbL=*=ptT-UWQC7!jZA42(M7^4wBWrMhwYnkEyj6 z%R(fw2dZL6GBF&DfeS)tlJed$B?_;Itd%XwhN7}@D1nNBtTdKDT&Xinh@E|bN^fat zK~9%=i1Z+UUqnI(9BASp(K0x%(WNFH68CC|hv@zS@gPY$;LFa62Zj7G<((4`lB7(r z&^{tz=vX6HT9}awgL_V#T)aF6Ze^HNxuer^Sc%j z;?FgtA;lp1h(FhghHNR4M$Owv+$ca<;?Jq^;bgXeniHBC$UOpctU!ocf)3-HRrI91 zBo(o~BkU_b9ChF_RRK2&f271WTFk5H?PQ|nHm6FCoS3nkTV-J$fY{##airEA|OMAYqH!L9huiK{6pk%*)(ncvj9MqIk)kDJi+YXl9M`GyypX zqd9TX1lI?mjr~z2Y*B>bX&nmm^dNZgb=xi;L;?_lQ9r6 z2Vf^i%{LsHfnjb30){uS-s;w@4UsmHpT8nsZoHr; zC|63+PT(zo&2`~j$0rAI=#fBHe}ORE_oR|?v>=hlngc5aavGs5N>#M2vQS~5AmBRD zHAVvw<11PRPZ&~E`B;>J#`Kjs`!>Xv3qUFUjOMP-#f97pqNU*&9d(RVs$9dwMe)5Dt%JALhoSTv5RCS81s)Kj>6Pri_B#S?z1Zw1RXfo!Z0Lje(=(lQYcc9_d#uX%wKZ9>I`*27J zi#1g0jfqV)^@tqZcjNRi4O!|h@RCs@4YiC2cgS4eawB#OS7K^4SGR(>thT%Snd=wSr=3Tyzm6)*dkgtKDHyy>K?*5tFDFV)8|*;1wM! z4#B$jkvosR}V9tlVVs!hzUv5}-!{1^or?fNI}d zGgnkH;&DJH{tTwv+nFy^B{~8UYL5_!I+B3;(Pp0x zO-;>DK|wunOybH1vRSCwlvGVI!4!OCc1Q#wb zz@58TbWTA~e-UZj&WoALjP&LJb|3e{1=v;%SA>vQJ|Gd7$sp09vQU9=gh%B#nWmVf9o4a?G zpKC`%wwQQlFcP7GK}V}VVS0h%(JL8=H7#PpM9G%twoQIc$^K0a!;~o{D4X6nKw5iD zaSWELzkbXgydk*el{+m-CdFkT#Co$KJ+jMj-ASOwayaNidi4Y;xV!Grc;Nz<_)Tft zFZ37jei8m~CD@g(vLc=^!M~vHejS3{%~&8|hhmFS=5<*}-r0p^RXSfv2U+cwHgQ*5 zSGFlqa$d1!3@uB3tVXP8juMAgGDxRKcYdnW`F@LVG$uW5OXU;h_4rngn7$P9K$9?^ z!@*#g)6r|Wl?YbUo+2ICkTF`BTIHAffxT2b70Wn~C!h?f84H2tWKyTd5sCLVC7|Pd zR9>&+faOI-31~yUUS8ysfR5AF?+3DtLF)1@sDvnn;lh@E%^<`rISHvH3#B|YLf1DO z610mWYzhmkuGtev>&n`eFX&PWijpVdSZD`zm5`x1o!)%R;ame(t*JJo>*}@rY#kZRW5O4tujf}k9rP?m|BsK3qz?AoqQtZkjY!9 z1v#V~nqtt0C7pNKh;&S?csIyb%&3(@GX>X*uyGXDc{YZoNLF~IE6*PgQZ7JTsB$~~ zU}+G6gk`wFkkW<|X->KMJ89I6gkh1X{nZM8KCeerTisFZwLB1smEoAGa&~tZfNWAA zHyaEJLJt-gNhwg3yB%Ee)u^eEl_!TSt_!U?D zIIwE+`2u;rgVFpucGYczsgo6ckK?kxA?y zpk#VS4^dmQ4m{Zv6vUDWk4+fu&JgpB6)L8i=Cw~m*5&OtMp80AH{VP%RjHu8>NXXf zt~nf(`IP||rJJl*KuoLbcnXZ@t5cf(vU#HD6l6^`V3iYE3MmkPNg!ELP>s zuaa82io2)zRdndd4_CsuED$WzUSN8`*{GMK1+wDI9(JWQ*~@$TYpBo7#KEdLfNjjQ z_z{c1_sd@>y&1K*E@z94(F{3=eaJX{_m*SI8gxwWVoY`$0yIX1SPh(rcTrSPC%tg@ z2ktH#+Zp#d!H3R^j~dAPRfS*(6v@vp%NwgQgJ6JU9|Yo^Vt0 z%3Er+aB(k@$P~pa#S*Ds!(a>y;EGK6C1@d|!{O1q8VVmZsKSZrc$Oht;6GYkF9ul$ zk&%`Hugn1Uj20q11mKc7t_)*WoC2Z+aFKmH5^mi$q@f3G3|Hvu5fI|{mBiymD;(OR zMl@PsXhYEoy|1K_R_13UAVX?Ig~#JjECUr4QX?w5Gz^6Fz#7p~ayJlCAvL0+*Rp|- z9#|t`>ReuYu&=2JxzqzWm-ub3l= z6qve5O+{nMTLg_)779S~DFyGKcueugiZPuSJw*luk*ZQUK4C2evliq9_2NL)DmsW; z1?zb@(2Ey~Mc0am;%k@GI3I=M=?n)+#pB2l%hMcamF^o8 zNC`_pCc}eB<0hpPm z=`VVh4~7eI+eUg6_dLUB_vZ%+aS5Eb#n^48pB$N4BvHT`g?pJ}kuEt%&7YKNq_iwl zB@X>ydaNGNR^8obO{GPKrgw1a?tiW9ukdC?bchGDH6EoB-kC+wbl8hQs&#@F9mAIoqaNROaw_b7zON=IqFsDSsg+x8>?Us2Jbn5{C@5N1@W) zrvHJE{9+Pv)gDEDZfg*@IH**N`SKwp9wA41P4EZtsVtmVO^Sr8dW35d+M|~}P^3eR z@B=0>am&qUx@8xY1-(UZS%ODRB#MQ*%IZgMjH>RDv4=_Ooq}vqwTGO7IR1*)XXGF~b`;b3e+Cl?#>#>lauO z=28nr0662zn>*99jurrX8^uI6)Hx1q3vQF^r%+0wwCZps6_bc)0B2G$c~Mp>uEyn;EWOcS7|R}`G1?ePge-bC5lT4Ov1l~&}IQp$J*BW3&=0!j3GhZ?Yo4sNZ2!L8Dv4)m-Q5hz+CK-2w88|GTWg0n78)p!sl zxD$1w)XP|Zl~dC*!~!|Po2V4GN`^w#l`qnp-a&x}X`TBtI98boEe{$AA%coq<3t+F znZ)=ZDQIsLhuZWNUs6$bEQn1qSg6zpB3xd*U>G>?f!YGUuiS@ElW^06LnQAi#K%~o zqPLd^{1u9r;T>CVifTe2#$hy8u*oJHgG(_N!(#a8FuyFN-!rSVHv=PVxzzGF`SRNXGFP=LF9oKes~AAI9S=ws?=C^jf)8X&5TF!-JvJc&qUH z#==EJR#!T<3~_a6)K`Q(7m9_86_|*L0MW?3+=fgt3qZQWGSD9?v<%0tQv`GNxcC*D zrVw51Nx@R^#$Z|NWg%{g#xMA-z()~^jpcRd+evZJ5%cYQz=Yt05Z8{XK7TsyLLUjZR&geZwn4sfuK1`_(1 ztG>2RgdFXWB3CzMlF&3jFd@WH3#hRC0GxBMTPRu(8Ws9eyjeNawPk$dWf`vLh-#4; z@*y0?Bs-)OC<5eJV*Op}3&k?tCR9qHGDJ!@ji1P;Bw%7aRXSz? zNJ8c?P-5eC9)rMSlVFcopBHNhBx&Q{vEm-~mm0q@eBQ zTx6LXgPk2^plVOojwmQ*xnA0lFm#g^M|XWN7ks(3Av8ph0?D;Uq)WlRPqZYo{EgOy zpybxA0#T7fFd!4tm)Xs;)MVBmt?8W${jL;HTxBB3va1&%HFut^Y%xj4!bnTCCQSC8 zq-F{d^Q9DOG;Tvm8u3@bhg(mDTx2y!BU_R%hKNNpw*g1Dc0oXY5gfRtwX~l}#}biJ zjoFy$AZmjFRh|TO*1!q#0Z>Z_0Tr(Gf(pcndVr1={#MR|ydfe;np29>y7i9anTupC zVLFpid(vBvVI%=L%W%P+o5hxpGCsaoh6{>rZPt)d8(R{CQlcZ8x%K1{C3e6H>TW&L z)QQYPs~t+`nkQIYKWyp87gW#&@j+v5>fwNabMqa8k4GRrf4qp?&DHecCXM<)p!O&@ zbnDUa%|_%Fe-^&`ZapkvUlHjOLPQ&OYaduV4vs}y@he6LHw_=Zxkh|Z7)i|ma0GC_ z(U1lvSG18@dlbv-Zq;J=P%@Gl-jF(lW!G>JGfGVFv7y5=59Ti=lWSLL2?}b_PXD4Z zYTDf{5MM4N*K`;~E6j2ohZEdnrPnJcC|6hcjv2A?zJ^O|K;Akw22)kJTx)&EhdoB7 zcF?x*>{LEDfUa&_GG4K!yOVGq4jxk26xBUURMT+CB{?z*m>h^wVqH;Gk5ocpAI^cU zAr=T4-b7uwwefgakT(8|{sa$oH&tdW9CM*a#jSfsOT@)$`~l1EcQIMjK6ABb6xcyl z4m8rGjSAOkY1I%56b)~Xh}x|c2DX&4L!}sEku@61s%E%o?AG}bx`T2J2O-rTQ~;Rb z9yj#6I_f68|Jl2p&TyHDivurl%HmCo8$v%NoS<_kFV+q9d)z_J^e%=6*D`Z<7*z>% z3Uv3#78j;F%KSOQEH;i1J)ue%a_Ed{7D>KgH62rMDo6g@0_s z^JqsYT+|9x2)3Cl(?MJL;3grH6$SjkLL|m%K{4V+y!d>3soyCfE`q@xD$eH=#Ncj$ zqo*(*U@&6)gG^{sEyI~eOJe1D-YClI!_q82w2Pe>d@c;>+lAo_#RcPX&gJ5pz~oKL z>&yvY1M%Rcw1whrDSnnn)|iSUdDV9YEh))J*kj>G2=jyCg0Ys-3aeneA%;9gXc+~5 z7jRvb3->rNE^)v)2=nttqWmg8Wtufi9IS@H;HJ$eLl zr&BEjnxkQtHWWp_DB-G5xFX(%6U1$Z23`yFvx%uDz`km{huCo-TD(+3h3<6q*hxay zxpnS#iSg`vUP8>o_HRIIirB8J>rqXb)J`V&f;auN#3HV3oU&5vk5gmOy}&&dr+yeI ze5Fc>^9*3AOY3mbIeL+(cJMh&3@GB_RO_y2j_#tR^vG1+;Uc@z#m62N&MuO@{?W4u z;`)P#FK8>q)K!#Dv&7F^g$=_Zu5575Mcw4#^_3Lb6-JA~sa-fU#+G3%p8RgId%QCH zENjznLh#Ih(*V|X?Fy2z4%Y?hqQ>=zZkjwPCMNqhlq=0nZHXeTB6TfpukZ~NHwyL#gZib5?Yw7e^<=P+(hOQlxv|e$)bfFhV8SQzD7Q-;% z_h>cq3T{$%6s^Wyop)S*QZTm4Sv6`0{$0z*DQdV#?Z4acqYb9=gIl(2YtiD>;HbT| z*eONQhjFg+Us~&r%!zdnJu&&ZpM*Oxjca(mSD(XhBu?_IpV>A(bOn|TbI0bUe&3r zLVtc3HP&j45&sI9(kp<@2VmZR1 z8@N}EnhB~Ng51mjEP-_o6U%bq%6~Kj++aE?O@`Y~?gCXU*^vr3OeLCJ01=Bt zW)^Wu02VQr#O6yWxRbn=303C6p)nd*FuscAB#{$C#e$HaDxbWXkdy3r#2$ll5Fzm^ zKDB^FBstj9&S(HshrA_bH&#hCi?cg=IvIkwMFk0aW; zSQgb-E5H@g5SdtV;amYO`ZO_d<|IjC@v#(3RlcYxN(y{Cq&9Hw5UWN~N}*VWTvLdx zOOBgfvaLCk+R!4AkKqj}&HYsF7)ZAO>BKKmxbNDi9;$T+El>0fBzGUukxq3xi_RvA z+2gsf&5cXvaYoO=OphC$t}D_~`zo!KsDD7u24m2&4t1quXREczc_lJ&j_~i~6>tBp znVMt%JGm>P+NrE6%Aw_Fvh=NTGewYjxtU6KwU{*hu*^@pf=pW!IJEK^r$tuT8S#gh zlUT&J%tK%d)Xjr?4RX(%2Ai?=!03r9uom)*!ZlZ+9+| zI;PbG*HT6n6X8S4**pQa%F`Uwu2N$E0<#GdD;oW(CXaVzRJxka6J!mxS_t>DJQ8OZ5dRpmLe0k zC^afcGO_qBwq;gv?4jkNFFvc~WUI`QBFQ{cY!T-Eo+rN5pPmKj0E+p9itsup@m<8SLh!-KSNOs_}UaOi4sfzZByGJ zKSQkA zvo@C1)aB^9&;=?I^Z8%Yiz=^ERMhcO^!yzb8r|F%BV<~GtlQg=S=mpbTpAmlu@-&js zvr+OhB9TY!tuk#YBUa}1Z1mEYB1plxEyvo8ZPLZZG85taQyXFFj9U6cT4iP#u{L?D zy0E0DXY3T~kgAUPT6kmWIh$o;5!Fy=^Q@OH<@Bh(V*UTT5ywDTLY^ z1$rKIYINp;F=``nLx~J-mX>)L@Q0X_(SP1DD`NziS8dH4y5xvc0czP&-cps+x-Fs| zS{cQ1qqq?(IWL}A!1nDSwT)yyc`HFC$Er=KRKH6mre|pz1^K1E*l8^)&5OXU>cjyM zy?Sd?LcJH5T&nf**+e+BI@I%m$Dn3ISoU-4n1@zUd1k}tlx|hr!Zt*Q}Oe z9Heu+k*xb*6JHp$CIG%%Vi@Yd%oDfL;-XEN5mPEXcT=z-OLw|S4Ljk$Oq@l_+P95d z8y-|oO`vJW*Cqn;;uoiDx2~CRu)?yTna^IZXv#q=W$`M`HP;#|pD^1f$S;)-j+xxh z6tRReD0<~iHD1laxvhTLrquL%sKethn(#4(PJD!O(h+?vds+x zraYQ;2)W7eOCKnbGE0m=IpR38Sj=}iLzi*`W!^5w>vX14h)iMN;I`udzZ&&eb+(eH z6H_@~s54u`gk-#?cCjG~=~|(m8L&J#X~|qlDQnZl6nE-$X^jtwCNW!ELWdyPR8Gd) z@hQ8G&2id8;3lkVbOkx=UyKtvuwJ^!+@zUZ~q3&hLBGD>X#!paEn_5)TbPgOn*W7-S2)V zg?F%U4Mx)Vvv9?C^Fb_N1TU-NkJc@`Hpq-NbDz9LPY%NxZx%Lfp|!@y1`!6uL_LOE|!?bOC=PyoZM8ov_fBN_T E0B2Y<-~a#s literal 0 HcmV?d00001 diff --git a/package.json b/package.json index 8b98434..056139a 100644 --- a/package.json +++ b/package.json @@ -42,5 +42,5 @@ "solid-js": "^1.8.18", "solid-styled": "^0.11.1" }, - "packageManager": "pnpm@9.5.0+sha512.140036830124618d624a2187b50d04289d5a087f326c9edfc0ccd733d76c4f52c3a313d4fc148794a2a9d81553016004e6742e8cf850670268a7387fc220c903" + "packageManager": "bun@1.1.21" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml deleted file mode 100644 index 9651bfd..0000000 --- a/pnpm-lock.yaml +++ /dev/null @@ -1,5530 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - dependencies: - '@nanostores/persistent': - specifier: ^0.9.1 - version: 0.9.1(nanostores@0.9.5) - '@nanostores/solid': - specifier: ^0.4.2 - version: 0.4.2(nanostores@0.9.5)(solid-js@1.8.18) - '@solid-primitives/event-listener': - specifier: ^2.3.3 - version: 2.3.3(solid-js@1.8.18) - '@solid-primitives/resize-observer': - specifier: ^2.0.25 - version: 2.0.25(solid-js@1.8.18) - '@solidjs/router': - specifier: ^0.11.5 - version: 0.11.5(solid-js@1.8.18) - '@suid/icons-material': - specifier: ^0.7.0 - version: 0.7.0(solid-js@1.8.18) - '@suid/material': - specifier: ^0.16.0 - version: 0.16.0(solid-js@1.8.18) - blurhash: - specifier: ^2.0.5 - version: 2.0.5 - date-fns: - specifier: ^3.6.0 - version: 3.6.0 - hammerjs: - specifier: ^2.0.8 - version: 2.0.8 - masto: - specifier: ^6.8.0 - version: 6.8.0 - nanostores: - specifier: ^0.9.5 - version: 0.9.5 - solid-js: - specifier: ^1.8.18 - version: 1.8.18 - solid-styled: - specifier: ^0.11.1 - version: 0.11.1(solid-js@1.8.18) - devDependencies: - '@suid/vite-plugin': - specifier: ^0.2.0 - version: 0.2.0(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)) - '@types/hammerjs': - specifier: ^2.0.45 - version: 2.0.45 - postcss: - specifier: ^8.4.39 - version: 8.4.39 - prettier: - specifier: ^3.3.2 - version: 3.3.2 - typescript: - specifier: ^5.5.2 - version: 5.5.2 - vite: - specifier: ^5.3.2 - version: 5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2) - vite-plugin-package-version: - specifier: ^1.1.0 - version: 1.1.0(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)) - vite-plugin-pwa: - specifier: ^0.20.0 - version: 0.20.0(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.1.0) - vite-plugin-solid: - specifier: ^2.10.2 - version: 2.10.2(solid-js@1.8.18)(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)) - vite-plugin-solid-styled: - specifier: ^0.11.1 - version: 0.11.1(rollup@2.79.1)(solid-styled@0.11.1(solid-js@1.8.18))(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)) - wrangler: - specifier: ^3.64.0 - version: 3.64.0 - -packages: - - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - - '@apideck/better-ajv-errors@0.3.6': - resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} - engines: {node: '>=10'} - peerDependencies: - ajv: '>=8' - - '@babel/code-frame@7.24.7': - resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.24.7': - resolution: {integrity: sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.24.8': - resolution: {integrity: sha512-c4IM7OTg6k1Q+AJ153e2mc2QVTezTwnb4VzquwcyiEzGnW0Kedv4do/TrkU98qPeC5LNiMt/QXwIjzYXLBpyZg==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.24.7': - resolution: {integrity: sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.24.7': - resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.24.8': - resolution: {integrity: sha512-47DG+6F5SzOi0uEvK4wMShmn5yY0mVjVJoWTphdY2B4Rx9wHgjK7Yhtr0ru6nE+sn0v38mzrWOlah0p/YlHHOQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-annotate-as-pure@7.24.7': - resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7': - resolution: {integrity: sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.24.7': - resolution: {integrity: sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.24.8': - resolution: {integrity: sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-create-class-features-plugin@7.24.8': - resolution: {integrity: sha512-4f6Oqnmyp2PP3olgUMmOwC3akxSm5aBYraQ6YDdKy7NcAMkDECHWG0DEnV6M2UAkERgIBhYt8S27rURPg7SxWA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-create-regexp-features-plugin@7.24.7': - resolution: {integrity: sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-define-polyfill-provider@0.6.2': - resolution: {integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - - '@babel/helper-environment-visitor@7.24.7': - resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-function-name@7.24.7': - resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-hoist-variables@7.24.7': - resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-member-expression-to-functions@7.24.8': - resolution: {integrity: sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.18.6': - resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.24.7': - resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.24.7': - resolution: {integrity: sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-module-transforms@7.24.8': - resolution: {integrity: sha512-m4vWKVqvkVAWLXfHCCfff2luJj86U+J0/x+0N3ArG/tP0Fq7zky2dYwMbtPmkc/oulkkbjdL3uWzuoBwQ8R00Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-optimise-call-expression@7.24.7': - resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==} - engines: {node: '>=6.9.0'} - - '@babel/helper-plugin-utils@7.24.7': - resolution: {integrity: sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-plugin-utils@7.24.8': - resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-remap-async-to-generator@7.24.7': - resolution: {integrity: sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-replace-supers@7.24.7': - resolution: {integrity: sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-simple-access@7.24.7': - resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-skip-transparent-expression-wrappers@7.24.7': - resolution: {integrity: sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-split-export-declaration@7.24.7': - resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.24.7': - resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.24.8': - resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.24.7': - resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-option@7.24.7': - resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-option@7.24.8': - resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} - engines: {node: '>=6.9.0'} - - '@babel/helper-wrap-function@7.24.7': - resolution: {integrity: sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.24.7': - resolution: {integrity: sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==} - engines: {node: '>=6.9.0'} - - '@babel/highlight@7.24.7': - resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.24.7': - resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/parser@7.24.8': - resolution: {integrity: sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.7': - resolution: {integrity: sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.7': - resolution: {integrity: sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7': - resolution: {integrity: sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.13.0 - - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.7': - resolution: {integrity: sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': - resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-async-generators@7.8.4': - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-class-properties@7.12.13': - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-class-static-block@7.14.5': - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-dynamic-import@7.8.3': - resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-export-namespace-from@7.8.3': - resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-assertions@7.24.7': - resolution: {integrity: sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-attributes@7.24.7': - resolution: {integrity: sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-meta@7.10.4': - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-json-strings@7.8.3': - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-jsx@7.24.7': - resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-logical-assignment-operators@7.10.4': - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-numeric-separator@7.10.4': - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-object-rest-spread@7.8.3': - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-optional-catch-binding@7.8.3': - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-optional-chaining@7.8.3': - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-private-property-in-object@7.14.5': - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-top-level-await@7.14.5': - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-unicode-sets-regex@7.18.6': - resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-transform-arrow-functions@7.24.7': - resolution: {integrity: sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-async-generator-functions@7.24.7': - resolution: {integrity: sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-async-to-generator@7.24.7': - resolution: {integrity: sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-block-scoped-functions@7.24.7': - resolution: {integrity: sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-block-scoping@7.24.7': - resolution: {integrity: sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-class-properties@7.24.7': - resolution: {integrity: sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-class-static-block@7.24.7': - resolution: {integrity: sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.12.0 - - '@babel/plugin-transform-classes@7.24.8': - resolution: {integrity: sha512-VXy91c47uujj758ud9wx+OMgheXm4qJfyhj1P18YvlrQkNOSrwsteHk+EFS3OMGfhMhpZa0A+81eE7G4QC+3CA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-computed-properties@7.24.7': - resolution: {integrity: sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-destructuring@7.24.8': - resolution: {integrity: sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-dotall-regex@7.24.7': - resolution: {integrity: sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-duplicate-keys@7.24.7': - resolution: {integrity: sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-dynamic-import@7.24.7': - resolution: {integrity: sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-exponentiation-operator@7.24.7': - resolution: {integrity: sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-export-namespace-from@7.24.7': - resolution: {integrity: sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-for-of@7.24.7': - resolution: {integrity: sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-function-name@7.24.7': - resolution: {integrity: sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-json-strings@7.24.7': - resolution: {integrity: sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-literals@7.24.7': - resolution: {integrity: sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-logical-assignment-operators@7.24.7': - resolution: {integrity: sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-member-expression-literals@7.24.7': - resolution: {integrity: sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-modules-amd@7.24.7': - resolution: {integrity: sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-modules-commonjs@7.24.8': - resolution: {integrity: sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-modules-systemjs@7.24.7': - resolution: {integrity: sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-modules-umd@7.24.7': - resolution: {integrity: sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-named-capturing-groups-regex@7.24.7': - resolution: {integrity: sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-transform-new-target@7.24.7': - resolution: {integrity: sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-nullish-coalescing-operator@7.24.7': - resolution: {integrity: sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-numeric-separator@7.24.7': - resolution: {integrity: sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-object-rest-spread@7.24.7': - resolution: {integrity: sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-object-super@7.24.7': - resolution: {integrity: sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-optional-catch-binding@7.24.7': - resolution: {integrity: sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-optional-chaining@7.24.8': - resolution: {integrity: sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-parameters@7.24.7': - resolution: {integrity: sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-private-methods@7.24.7': - resolution: {integrity: sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-private-property-in-object@7.24.7': - resolution: {integrity: sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-property-literals@7.24.7': - resolution: {integrity: sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-regenerator@7.24.7': - resolution: {integrity: sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-reserved-words@7.24.7': - resolution: {integrity: sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-shorthand-properties@7.24.7': - resolution: {integrity: sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-spread@7.24.7': - resolution: {integrity: sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-sticky-regex@7.24.7': - resolution: {integrity: sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-template-literals@7.24.7': - resolution: {integrity: sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-typeof-symbol@7.24.8': - resolution: {integrity: sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-unicode-escapes@7.24.7': - resolution: {integrity: sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-unicode-property-regex@7.24.7': - resolution: {integrity: sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-unicode-regex@7.24.7': - resolution: {integrity: sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-unicode-sets-regex@7.24.7': - resolution: {integrity: sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/preset-env@7.24.8': - resolution: {integrity: sha512-vObvMZB6hNWuDxhSaEPTKCwcqkAIuDtE+bQGn4XMXne1DSLzFVY8Vmj1bm+mUQXYNN8NmaQEO+r8MMbzPr1jBQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/preset-modules@0.1.6-no-external-plugins': - resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} - peerDependencies: - '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - - '@babel/regjsgen@0.8.0': - resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} - - '@babel/runtime@7.24.8': - resolution: {integrity: sha512-5F7SDGs1T72ZczbRwbGO9lQi0NLjQxzl6i4lJxLxfW9U5UluCSyEJeniWvnhl3/euNiqQVbo8zruhsDfid0esA==} - engines: {node: '>=6.9.0'} - - '@babel/template@7.24.7': - resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.24.7': - resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.24.8': - resolution: {integrity: sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.24.7': - resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.24.8': - resolution: {integrity: sha512-SkSBEHwwJRU52QEVZBmMBnE5Ux2/6WU1grdYyOhpbCNxbmJrDuDCphBzKZSO3taf0zztp+qkWlymE5tVL5l0TA==} - engines: {node: '>=6.9.0'} - - '@cloudflare/kv-asset-handler@0.3.4': - resolution: {integrity: sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==} - engines: {node: '>=16.13'} - - '@cloudflare/workerd-darwin-64@1.20240701.0': - resolution: {integrity: sha512-XAZa4ZP+qyTn6JQQACCPH09hGZXP2lTnWKkmg5mPwT8EyRzCKLkczAf98vPP5bq7JZD/zORdFWRY0dOTap8zTQ==} - engines: {node: '>=16'} - cpu: [x64] - os: [darwin] - - '@cloudflare/workerd-darwin-arm64@1.20240701.0': - resolution: {integrity: sha512-w80ZVAgfH4UwTz7fXZtk7KmS2FzlXniuQm4ku4+cIgRTilBAuKqjpOjwUCbx5g13Gqcm9NuiHce+IDGtobRTIQ==} - engines: {node: '>=16'} - cpu: [arm64] - os: [darwin] - - '@cloudflare/workerd-linux-64@1.20240701.0': - resolution: {integrity: sha512-UWLr/Anxwwe/25nGv451MNd2jhREmPt/ws17DJJqTLAx6JxwGWA15MeitAIzl0dbxRFAJa+0+R8ag2WR3F/D6g==} - engines: {node: '>=16'} - cpu: [x64] - os: [linux] - - '@cloudflare/workerd-linux-arm64@1.20240701.0': - resolution: {integrity: sha512-3kCnF9kYgov1ggpuWbgpXt4stPOIYtVmPCa7MO2xhhA0TWP6JDUHRUOsnmIgKrvDjXuXqlK16cdg3v+EWsaPJg==} - engines: {node: '>=16'} - cpu: [arm64] - os: [linux] - - '@cloudflare/workerd-windows-64@1.20240701.0': - resolution: {integrity: sha512-6IPGITRAeS67j3BH1rN4iwYWDt47SqJG7KlZJ5bB4UaNAia4mvMBSy/p2p4vA89bbXoDRjMtEvRu7Robu6O7hQ==} - engines: {node: '>=16'} - cpu: [x64] - os: [win32] - - '@cspotcode/source-map-support@0.8.1': - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} - - '@esbuild-plugins/node-globals-polyfill@0.2.3': - resolution: {integrity: sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==} - peerDependencies: - esbuild: '*' - - '@esbuild-plugins/node-modules-polyfill@0.2.2': - resolution: {integrity: sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==} - peerDependencies: - esbuild: '*' - - '@esbuild/aix-ppc64@0.21.5': - resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.17.19': - resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm64@0.21.5': - resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.17.19': - resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - - '@esbuild/android-arm@0.21.5': - resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.17.19': - resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - - '@esbuild/android-x64@0.21.5': - resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.17.19': - resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-arm64@0.21.5': - resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.17.19': - resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - - '@esbuild/darwin-x64@0.21.5': - resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.17.19': - resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-arm64@0.21.5': - resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.17.19': - resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.21.5': - resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.17.19': - resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm64@0.21.5': - resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.17.19': - resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-arm@0.21.5': - resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.17.19': - resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-ia32@0.21.5': - resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.17.19': - resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-loong64@0.21.5': - resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.17.19': - resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-mips64el@0.21.5': - resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.17.19': - resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-ppc64@0.21.5': - resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.17.19': - resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-riscv64@0.21.5': - resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.17.19': - resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-s390x@0.21.5': - resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.17.19': - resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - - '@esbuild/linux-x64@0.21.5': - resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-x64@0.17.19': - resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.21.5': - resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-x64@0.17.19': - resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.21.5': - resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - - '@esbuild/sunos-x64@0.17.19': - resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - - '@esbuild/sunos-x64@0.21.5': - resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.17.19': - resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-arm64@0.21.5': - resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.17.19': - resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-ia32@0.21.5': - resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.17.19': - resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - - '@esbuild/win32-x64@0.21.5': - resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - - '@fastify/busboy@2.1.1': - resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} - engines: {node: '>=14'} - - '@jridgewell/gen-mapping@0.3.5': - resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} - engines: {node: '>=6.0.0'} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - - '@jridgewell/source-map@0.3.6': - resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} - - '@jridgewell/sourcemap-codec@1.4.15': - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - - '@jridgewell/trace-mapping@0.3.9': - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - - '@nanostores/persistent@0.9.1': - resolution: {integrity: sha512-ow57Hxm5VMaI5GHET/cVk8hX/iKMmbhcGrB9owfN8p8OHiiJgUlYxe1giacwlAALJXAh2t8bxXh42hHb64BCEA==} - engines: {node: ^16.0.0 || ^18.0.0 || >=20.0.0} - peerDependencies: - nanostores: ^0.9.0 - - '@nanostores/solid@0.4.2': - resolution: {integrity: sha512-8v32+C9KdRbnvP4x4Oiw/CtL1tZwbRxYfmFsPIY9PXevCgxSFnicG6VnLLtNAR7F0kl8Ec7OROHO34Ffv0KDzg==} - peerDependencies: - nanostores: '>=0.8.0' - solid-js: ^1.6.0 - - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@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'} - - '@popperjs/core@2.11.8': - resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} - - '@rollup/plugin-babel@5.3.1': - resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} - engines: {node: '>= 10.0.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@types/babel__core': ^7.1.9 - rollup: ^1.20.0||^2.0.0 - peerDependenciesMeta: - '@types/babel__core': - optional: true - - '@rollup/plugin-node-resolve@15.2.3': - resolution: {integrity: sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.78.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - - '@rollup/plugin-replace@2.4.2': - resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} - peerDependencies: - rollup: ^1.20.0 || ^2.0.0 - - '@rollup/plugin-terser@0.4.4': - resolution: {integrity: sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - - '@rollup/pluginutils@3.1.0': - resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} - engines: {node: '>= 8.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 - - '@rollup/pluginutils@5.1.0': - resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - - '@rollup/rollup-android-arm-eabi@4.18.0': - resolution: {integrity: sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.18.0': - resolution: {integrity: sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.18.0': - resolution: {integrity: sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.18.0': - resolution: {integrity: sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==} - cpu: [x64] - os: [darwin] - - '@rollup/rollup-linux-arm-gnueabihf@4.18.0': - resolution: {integrity: sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm-musleabihf@4.18.0': - resolution: {integrity: sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm64-gnu@4.18.0': - resolution: {integrity: sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-arm64-musl@4.18.0': - resolution: {integrity: sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-powerpc64le-gnu@4.18.0': - resolution: {integrity: sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==} - cpu: [ppc64] - os: [linux] - - '@rollup/rollup-linux-riscv64-gnu@4.18.0': - resolution: {integrity: sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-s390x-gnu@4.18.0': - resolution: {integrity: sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==} - cpu: [s390x] - os: [linux] - - '@rollup/rollup-linux-x64-gnu@4.18.0': - resolution: {integrity: sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-linux-x64-musl@4.18.0': - resolution: {integrity: sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-win32-arm64-msvc@4.18.0': - resolution: {integrity: sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==} - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.18.0': - resolution: {integrity: sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.18.0': - resolution: {integrity: sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==} - cpu: [x64] - os: [win32] - - '@solid-primitives/event-listener@2.3.3': - resolution: {integrity: sha512-DAJbl+F0wrFW2xmcV8dKMBhk9QLVLuBSW+TR4JmIfTaObxd13PuL7nqaXnaYKDWOYa6otB00qcCUIGbuIhSUgQ==} - peerDependencies: - solid-js: ^1.6.12 - - '@solid-primitives/resize-observer@2.0.25': - resolution: {integrity: sha512-jVDXkt2MiriYRaz4DYs62185d+6jQ+1DCsR+v7f6XMsIJJuf963qdBRFjtZtKXBaxdPNMyuPeDgf5XQe3EoDJg==} - peerDependencies: - solid-js: ^1.6.12 - - '@solid-primitives/rootless@1.4.5': - resolution: {integrity: sha512-GFJE9GC3ojx0aUKqAUZmQPyU8fOVMtnVNrkdk2yS4kd17WqVSpXpoTmo9CnOwA+PG7FTzdIkogvfLQSLs4lrww==} - peerDependencies: - solid-js: ^1.6.12 - - '@solid-primitives/static-store@0.0.8': - resolution: {integrity: sha512-ZecE4BqY0oBk0YG00nzaAWO5Mjcny8Fc06CdbXadH9T9lzq/9GefqcSe/5AtdXqjvY/DtJ5C6CkcjPZO0o/eqg==} - peerDependencies: - solid-js: ^1.6.12 - - '@solid-primitives/utils@6.2.3': - resolution: {integrity: sha512-CqAwKb2T5Vi72+rhebSsqNZ9o67buYRdEJrIFzRXz3U59QqezuuxPsyzTSVCacwS5Pf109VRsgCJQoxKRoECZQ==} - peerDependencies: - solid-js: ^1.6.12 - - '@solidjs/router@0.11.5': - resolution: {integrity: sha512-nclebUUufZT37rB5l0LbJn92vZwJOhYVltfjfLFI3yAcMlwiil5JOy6X2FEgekWsoX29No/GCBTkYfrSZCRfaw==} - peerDependencies: - solid-js: ^1.8.6 - - '@suid/base@0.9.0': - resolution: {integrity: sha512-uj6kYkPB2/79iKJQSIKrSqxA0H0/1vcxxsyclHRMdU/RL3FVGUfasmAMJR7E6YVLi78A+fsabBKeu/yQSrr/Hg==} - peerDependencies: - solid-js: ^1.8.16 - - '@suid/css@0.4.0': - resolution: {integrity: sha512-yzHAlf1CVi7n0SvUrMgs8Z49UiS9669+td1w1frekhRQuRbkXhHoyJkvovaDVJlWRmCPA8Q0f1OTr0uDCUg9mQ==} - - '@suid/icons-material@0.7.0': - resolution: {integrity: sha512-d40gG5GBE/UrUYvVkf53zzhmNIV9eb4z52DUON2fGidprf/LkD4WdamwHKS1QfElvHnuaOci1VjV6cHdblzPBQ==} - peerDependencies: - solid-js: ^1.8.16 - - '@suid/material@0.16.0': - resolution: {integrity: sha512-qr/xdkl8Ekp+GO4m5VhXLi/CBrmUXALc8MP75p8y+0ZMXB+RLwSsZK1z1i9EjmEsmR5RC6G9VFJPWrpMI7j32A==} - peerDependencies: - solid-js: ^1.8.16 - - '@suid/styled-engine@0.7.0': - resolution: {integrity: sha512-yaanC2KI5yl8QrKL2e9Y89XJvqd3wrjZUCNctWWUF+1uypmoXcoP6N6MQvzr3+78fT0iLeEfn3b/lXl8x0+jAw==} - peerDependencies: - solid-js: ^1.8.16 - - '@suid/system@0.11.0': - resolution: {integrity: sha512-DVywaHMG97I7j0KjgOXTQlf6SG72sA5QSsNJ3RkED+dsjvHjkVgBbOkKNR04RHlwlItbR2Wdhu7ZlREvSsneeQ==} - peerDependencies: - solid-js: ^1.8.16 - - '@suid/types@0.6.0': - resolution: {integrity: sha512-W9RtmxQe0ZLvAwtoQtKb96SGNGNIWTskhxkXu5FeH5IPyvU5PpEWFLsyg3rmzLVAUHF1WsQwXBv/EZwwAjFkGQ==} - peerDependencies: - solid-js: ^1.8.16 - - '@suid/utils@0.9.0': - resolution: {integrity: sha512-YDudkXz0PXGlzl6s9OFCsRkdCTn6RBSx6Nb8o+np/SfOQ+Tnx3abgjNGkt10xZMRbobBr0lr6asmkYUQQRhHYA==} - peerDependencies: - solid-js: ^1.8.16 - - '@suid/vite-plugin@0.2.0': - resolution: {integrity: sha512-DDTbtBGS27EzMkIAdn0cLmlyYriBzY7+O8inMgYaSUIxWAPX0qKk5ZNB3qJaUGZXxwcxV7BSj3lOPcSISGvZxA==} - peerDependencies: - vite: ^5.0.0 - - '@surma/rollup-plugin-off-main-thread@2.2.3': - resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} - - '@types/babel__core@7.20.5': - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - - '@types/babel__generator@7.6.8': - resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} - - '@types/babel__template@7.4.4': - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - - '@types/babel__traverse@7.20.6': - resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} - - '@types/css-tree@2.3.8': - resolution: {integrity: sha512-zABG3nI2UENsx7AQv63tI5/ptoAG/7kQR1H0OvG+WTWYHOR5pfAT3cGgC8SdyCrgX/TTxJBZNmx82IjCXs1juQ==} - - '@types/estree@0.0.39': - resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} - - '@types/estree@1.0.5': - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - - '@types/hammerjs@2.0.45': - resolution: {integrity: sha512-qkcUlZmX6c4J8q45taBKTL3p+LbITgyx7qhlPYOdOHZB7B31K0mXbP5YA7i7SgDeEGuI9MnumiKPEMrxg8j3KQ==} - - '@types/node-forge@1.3.11': - resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} - - '@types/node@20.14.10': - resolution: {integrity: sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==} - - '@types/resolve@1.20.2': - resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} - - '@types/trusted-types@2.0.7': - resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} - - acorn-walk@8.3.3: - resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} - engines: {node: '>=0.4.0'} - - acorn@8.12.0: - resolution: {integrity: sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==} - engines: {node: '>=0.4.0'} - hasBin: true - - ajv@8.17.1: - resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} - - ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - - array-buffer-byte-length@1.0.1: - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} - engines: {node: '>= 0.4'} - - arraybuffer.prototype.slice@1.0.3: - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} - engines: {node: '>= 0.4'} - - as-table@1.0.55: - resolution: {integrity: sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==} - - async@3.2.5: - resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} - - at-least-node@1.0.0: - resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} - engines: {node: '>= 4.0.0'} - - available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} - - babel-plugin-jsx-dom-expressions@0.37.23: - resolution: {integrity: sha512-Y/r8LyLi/njnwPTaDuPEReWk30FJ1KplloYvcFUhHmiH1F7yVVj5mWojD7mbO/IruKyvOs9OIPUoeMi3Z++J4w==} - peerDependencies: - '@babel/core': ^7.20.12 - - babel-plugin-polyfill-corejs2@0.4.11: - resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - - babel-plugin-polyfill-corejs3@0.10.4: - resolution: {integrity: sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - - babel-plugin-polyfill-regenerator@0.6.2: - resolution: {integrity: sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - - babel-preset-solid@1.8.18: - resolution: {integrity: sha512-ky0FA4cCS9dk+xYBBItHoxtbRnaDIOGpmHLFqKPaR81hpMbJBOiLOZia2hT0JBwx4zn/D2OjMRvRr6kqtRMoUw==} - peerDependencies: - '@babel/core': ^7.0.0 - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} - - blake3-wasm@2.1.5: - resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} - - blurhash@2.0.5: - resolution: {integrity: sha512-cRygWd7kGBQO3VEhPiTgq4Wc43ctsM+o46urrmPOiuAe+07fzlSB9OJVdpgDL0jPqXUVQ9ht7aq7kxOeJHRK+w==} - - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - - brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - - braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} - - browserslist@4.23.1: - resolution: {integrity: sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - - buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - - builtin-modules@3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} - - call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} - engines: {node: '>= 0.4'} - - camel-case@4.1.2: - resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} - - caniuse-lite@1.0.30001639: - resolution: {integrity: sha512-eFHflNTBIlFwP2AIKaYuBQN/apnUoKNhBdza8ZnW/h2di4LCZ4xFqYlxUxo+LQ76KFI1PGcC1QDxMbxTZpSCAg==} - - capital-case@1.0.4: - resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} - - capnp-ts@0.7.0: - resolution: {integrity: sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==} - - chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - - change-case@4.1.2: - resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==} - - chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} - - clsx@2.1.1: - resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} - engines: {node: '>=6'} - - color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - - common-tags@1.8.2: - resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} - engines: {node: '>=4.0.0'} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - consola@3.2.3: - resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} - engines: {node: ^14.18.0 || >=16.10.0} - - constant-case@3.0.4: - resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} - - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - - cookie@0.5.0: - resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} - engines: {node: '>= 0.6'} - - core-js-compat@3.37.1: - resolution: {integrity: sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==} - - crypto-random-string@2.0.0: - resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} - engines: {node: '>=8'} - - css-tree@2.3.1: - resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} - - csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - - data-uri-to-buffer@2.0.2: - resolution: {integrity: sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==} - - data-view-buffer@1.0.1: - resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} - engines: {node: '>= 0.4'} - - data-view-byte-length@1.0.1: - resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} - engines: {node: '>= 0.4'} - - data-view-byte-offset@1.0.0: - resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} - engines: {node: '>= 0.4'} - - date-fns@3.6.0: - resolution: {integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==} - - debug@4.3.5: - resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - - defu@6.1.4: - resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} - - detect-libc@1.0.3: - resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} - engines: {node: '>=0.10'} - hasBin: true - - dot-case@3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} - - ejs@3.1.10: - resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} - engines: {node: '>=0.10.0'} - hasBin: true - - electron-to-chromium@1.4.815: - resolution: {integrity: sha512-OvpTT2ItpOXJL7IGcYakRjHCt8L5GrrN/wHCQsRB4PQa1X9fe+X9oen245mIId7s14xvArCGSTIq644yPUKKLg==} - - es-abstract@1.23.3: - resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} - engines: {node: '>= 0.4'} - - es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} - - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - - es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} - engines: {node: '>= 0.4'} - - es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} - - esbuild@0.17.19: - resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} - engines: {node: '>=12'} - hasBin: true - - esbuild@0.21.5: - resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} - engines: {node: '>=12'} - hasBin: true - - escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} - engines: {node: '>=6'} - - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - estree-walker@0.6.1: - resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==} - - estree-walker@1.0.1: - resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} - - estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - - events-to-async@2.0.1: - resolution: {integrity: sha512-RtnLYrMbXp4JkZIoZu+3VTqV21bNVBlJBZ4NmtwvMNqSE3qouhxv2gvLE4JJDaQc54ioPkrX74V6x+hp/hqjkQ==} - - exit-hook@2.2.1: - resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==} - engines: {node: '>=6'} - - 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'} - - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - fast-uri@3.0.1: - resolution: {integrity: sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==} - - fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} - - filelist@1.0.4: - resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} - - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - - for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - - fs-extra@9.1.0: - resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} - engines: {node: '>=10'} - - 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] - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} - - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - - gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - - get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} - - get-own-enumerable-property-symbols@3.0.2: - resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} - - get-source@2.0.12: - resolution: {integrity: sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==} - - get-symbol-description@1.0.2: - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} - engines: {node: '>= 0.4'} - - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - - glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported - - globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - - gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - hammerjs@2.0.8: - resolution: {integrity: sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==} - engines: {node: '>=0.8.0'} - - has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - - has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - - has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} - engines: {node: '>= 0.4'} - - has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - - header-case@2.0.4: - resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} - - html-entities@2.3.3: - resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} - - idb@7.1.1: - resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} - - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - internal-slot@1.0.7: - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} - engines: {node: '>= 0.4'} - - is-array-buffer@3.0.4: - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} - engines: {node: '>= 0.4'} - - is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} - - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - - is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} - - is-builtin-module@3.2.1: - resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} - engines: {node: '>=6'} - - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - - is-core-module@2.14.0: - resolution: {integrity: sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==} - engines: {node: '>= 0.4'} - - is-data-view@1.0.1: - resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} - engines: {node: '>= 0.4'} - - is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} - - 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'} - - is-module@1.0.0: - resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - - is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - - is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-obj@1.0.1: - resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} - engines: {node: '>=0.10.0'} - - is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} - - is-regexp@1.0.0: - resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} - engines: {node: '>=0.10.0'} - - is-shared-array-buffer@1.0.3: - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} - engines: {node: '>= 0.4'} - - is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - - is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} - - is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} - - is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} - engines: {node: '>= 0.4'} - - is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} - - is-what@4.1.16: - resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} - engines: {node: '>=12.13'} - - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - - isomorphic-ws@5.0.0: - resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} - peerDependencies: - ws: '*' - - jake@10.9.1: - resolution: {integrity: sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==} - engines: {node: '>=10'} - hasBin: true - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - jsesc@0.5.0: - resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} - hasBin: true - - jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - - json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - - json-schema@0.4.0: - resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} - - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - - jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - - jsonpointer@5.0.1: - resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} - engines: {node: '>=0.10.0'} - - leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - - lightningcss-darwin-arm64@1.25.1: - resolution: {integrity: sha512-G4Dcvv85bs5NLENcu/s1f7ehzE3D5ThnlWSDwE190tWXRQCQaqwcuHe+MGSVI/slm0XrxnaayXY+cNl3cSricw==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [darwin] - - lightningcss-darwin-x64@1.25.1: - resolution: {integrity: sha512-dYWuCzzfqRueDSmto6YU5SoGHvZTMU1Em9xvhcdROpmtOQLorurUZz8+xFxZ51lCO2LnYbfdjZ/gCqWEkwixNg==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [darwin] - - lightningcss-freebsd-x64@1.25.1: - resolution: {integrity: sha512-hXoy2s9A3KVNAIoKz+Fp6bNeY+h9c3tkcx1J3+pS48CqAt+5bI/R/YY4hxGL57fWAIquRjGKW50arltD6iRt/w==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [freebsd] - - lightningcss-linux-arm-gnueabihf@1.25.1: - resolution: {integrity: sha512-tWyMgHFlHlp1e5iW3EpqvH5MvsgoN7ZkylBbG2R2LWxnvH3FuWCJOhtGcYx9Ks0Kv0eZOBud789odkYLhyf1ng==} - engines: {node: '>= 12.0.0'} - cpu: [arm] - os: [linux] - - lightningcss-linux-arm64-gnu@1.25.1: - resolution: {integrity: sha512-Xjxsx286OT9/XSnVLIsFEDyDipqe4BcLeB4pXQ/FEA5+2uWCCuAEarUNQumRucnj7k6ftkAHUEph5r821KBccQ==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - - lightningcss-linux-arm64-musl@1.25.1: - resolution: {integrity: sha512-IhxVFJoTW8wq6yLvxdPvyHv4NjzcpN1B7gjxrY3uaykQNXPHNIpChLB52+wfH+yS58zm1PL4LemUp8u9Cfp6Bw==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - - lightningcss-linux-x64-gnu@1.25.1: - resolution: {integrity: sha512-RXIaru79KrREPEd6WLXfKfIp4QzoppZvD3x7vuTKkDA64PwTzKJ2jaC43RZHRt8BmyIkRRlmywNhTRMbmkPYpA==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - - lightningcss-linux-x64-musl@1.25.1: - resolution: {integrity: sha512-TdcNqFsAENEEFr8fJWg0Y4fZ/nwuqTRsIr7W7t2wmDUlA8eSXVepeeONYcb+gtTj1RaXn/WgNLB45SFkz+XBZA==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - - lightningcss-win32-x64-msvc@1.25.1: - resolution: {integrity: sha512-9KZZkmmy9oGDSrnyHuxP6iMhbsgChUiu/NSgOx+U1I/wTngBStDf2i2aGRCHvFqj19HqqBEI4WuGVQBa2V6e0A==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [win32] - - lightningcss@1.25.1: - resolution: {integrity: sha512-V0RMVZzK1+rCHpymRv4URK2lNhIRyO8g7U7zOFwVAhJuat74HtkjIQpQRKNCwFEYkRGpafOpmXXLoaoBcyVtBg==} - engines: {node: '>= 12.0.0'} - - lodash.debounce@4.0.8: - resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - - lodash.sortby@4.7.0: - resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} - - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - - lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} - - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - - magic-string@0.25.9: - resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} - - masto@6.8.0: - resolution: {integrity: sha512-amooNsp4mebu/dtBZfUHP6I0mcHSDB0JoTyrCWdw2YcCOIuPX6bM0gA60nEaLZqoHSF7xG63TpdDbAYI37Fnlg==} - - mdn-data@2.0.30: - resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} - - merge-anything@5.1.7: - resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==} - engines: {node: '>=12.13'} - - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - micromatch@4.0.7: - resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} - engines: {node: '>=8.6'} - - mime@3.0.0: - resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} - engines: {node: '>=10.0.0'} - hasBin: true - - miniflare@3.20240701.0: - resolution: {integrity: sha512-m9+I+7JNyqDGftCMKp9cK9pCZkK72hAL2mM9IWwhct+ZmucLBA8Uu6+rHQqA5iod86cpwOkrB2PrPA3wx9YNgw==} - engines: {node: '>=16.13'} - hasBin: true - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} - - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - - mustache@4.2.0: - resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} - hasBin: true - - nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - nanostores@0.9.5: - resolution: {integrity: sha512-Z+p+g8E7yzaWwOe5gEUB2Ox0rCEeXWYIZWmYvw/ajNYX8DlXdMvMDj8DWfM/subqPAcsf8l8Td4iAwO1DeIIRQ==} - engines: {node: ^16.0.0 || ^18.0.0 || >=20.0.0} - - no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - - node-fetch-native@1.6.4: - resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==} - - node-forge@1.3.1: - resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} - engines: {node: '>= 6.13.0'} - - 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'} - - object-inspect@1.13.2: - resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} - engines: {node: '>= 0.4'} - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} - engines: {node: '>= 0.4'} - - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - param-case@3.0.4: - resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} - - pascal-case@3.1.2: - resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} - - path-case@3.0.4: - resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} - - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - path-to-regexp@6.2.2: - resolution: {integrity: sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==} - - pathe@1.1.2: - resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} - - picocolors@1.0.1: - resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} - engines: {node: '>= 0.4'} - - postcss@8.4.39: - resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==} - engines: {node: ^10 || ^12 || >=14} - - prettier@3.3.2: - resolution: {integrity: sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==} - engines: {node: '>=14'} - hasBin: true - - pretty-bytes@5.6.0: - resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} - engines: {node: '>=6'} - - pretty-bytes@6.1.1: - resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} - engines: {node: ^14.13.1 || >=16.0.0} - - printable-characters@1.0.42: - resolution: {integrity: sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==} - - 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==} - - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - - regenerate-unicode-properties@10.1.1: - resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} - engines: {node: '>=4'} - - regenerate@1.4.2: - resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - - regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - - regenerator-transform@0.15.2: - resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} - - regexp.prototype.flags@1.5.2: - resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} - engines: {node: '>= 0.4'} - - regexpu-core@5.3.2: - resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} - engines: {node: '>=4'} - - regjsparser@0.9.1: - resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} - hasBin: true - - require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - - resolve.exports@2.0.2: - resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} - engines: {node: '>=10'} - - resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true - - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - rollup-plugin-inject@3.0.2: - resolution: {integrity: sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==} - deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject. - - rollup-plugin-node-polyfills@0.2.1: - resolution: {integrity: sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==} - - rollup-pluginutils@2.8.2: - resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} - - rollup@2.79.1: - resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} - engines: {node: '>=10.0.0'} - hasBin: true - - rollup@4.18.0: - resolution: {integrity: sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - safe-array-concat@1.1.2: - resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} - engines: {node: '>=0.4'} - - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - - safe-regex-test@1.0.3: - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} - engines: {node: '>= 0.4'} - - selfsigned@2.4.1: - resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} - engines: {node: '>=10'} - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - - sentence-case@3.0.4: - resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} - - serialize-javascript@6.0.2: - resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} - - seroval-plugins@1.0.7: - resolution: {integrity: sha512-GO7TkWvodGp6buMEX9p7tNyIkbwlyuAWbI6G9Ec5bhcm7mQdu3JOK1IXbEUwb3FVzSc363GraG/wLW23NSavIw==} - engines: {node: '>=10'} - peerDependencies: - seroval: ^1.0 - - seroval@1.0.7: - resolution: {integrity: sha512-n6ZMQX5q0Vn19Zq7CIKNIo7E75gPkGCFUEqDpa8jgwpYr/vScjqnQ6H09t1uIiZ0ZSK0ypEGvrYK2bhBGWsGdw==} - engines: {node: '>=10'} - - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - - set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} - - side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} - engines: {node: '>= 0.4'} - - smob@1.5.0: - resolution: {integrity: sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==} - - snake-case@3.0.4: - resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} - - solid-js@1.8.18: - resolution: {integrity: sha512-cpkxDPvO/AuKBugVv6xKFd1C9VC0XZMu4VtF56IlHoux8HgyW44uqNSWbozMnVcpIzHIhS3vVXPAVZYM26jpWw==} - - solid-refresh@0.6.3: - resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==} - peerDependencies: - solid-js: ^1.3 - - solid-styled@0.11.1: - resolution: {integrity: sha512-QZN9hj+lt3gai0HPqzN5kFTn3zHIlyKWXVcYJfiuPGgprRuEB3UvUNqNcOncknJrjHLdZAn/ItA01rs9sqh8hg==} - engines: {node: '>=12'} - peerDependencies: - solid-js: ^1 - - source-map-js@1.2.0: - resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} - engines: {node: '>=0.10.0'} - - source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - - source-map@0.8.0-beta.0: - resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} - engines: {node: '>= 8'} - - sourcemap-codec@1.4.8: - resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} - deprecated: Please use @jridgewell/sourcemap-codec instead - - stacktracey@2.1.8: - resolution: {integrity: sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==} - - stoppable@1.1.0: - resolution: {integrity: sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==} - engines: {node: '>=4', npm: '>=6'} - - string.prototype.matchall@4.0.11: - resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} - engines: {node: '>= 0.4'} - - string.prototype.trim@1.2.9: - resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.8: - resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} - - string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} - - stringify-object@3.3.0: - resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} - engines: {node: '>=4'} - - strip-comments@2.0.1: - resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==} - engines: {node: '>=10'} - - supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - temp-dir@2.0.0: - resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} - engines: {node: '>=8'} - - tempy@0.6.0: - resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==} - engines: {node: '>=10'} - - terser@5.31.2: - resolution: {integrity: sha512-LGyRZVFm/QElZHy/CPr/O4eNZOZIzsrQ92y4v9UJe/pFJjypje2yI3C2FmPtvUEnhadlSbmG2nXtdcjHOjCfxw==} - engines: {node: '>=10'} - hasBin: true - - to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - tr46@1.0.1: - resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} - - ts-custom-error@3.3.1: - resolution: {integrity: sha512-5OX1tzOjxWEgsr/YEUWSuPrQ00deKLh6D7OTWcvNHm12/7QPyRh8SYpyWvA4IZv8H/+GQWQEh/kwo95Q9OVW1A==} - engines: {node: '>=14.0.0'} - - tslib@2.6.3: - resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} - - type-fest@0.16.0: - resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} - engines: {node: '>=10'} - - typed-array-buffer@1.0.2: - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} - engines: {node: '>= 0.4'} - - typed-array-byte-length@1.0.1: - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.2: - resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} - engines: {node: '>= 0.4'} - - typed-array-length@1.0.6: - resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} - engines: {node: '>= 0.4'} - - typescript@5.5.2: - resolution: {integrity: sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==} - engines: {node: '>=14.17'} - hasBin: true - - ufo@1.5.3: - resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} - - unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - - undici@5.28.4: - resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} - engines: {node: '>=14.0'} - - unenv-nightly@1.10.0-1717606461.a117952: - resolution: {integrity: sha512-u3TfBX02WzbHTpaEfWEKwDijDSFAHcgXkayUZ+MVDrjhLFvgAJzFGTSTmwlEhwWi2exyRQey23ah9wELMM6etg==} - - unicode-canonical-property-names-ecmascript@2.0.0: - resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} - engines: {node: '>=4'} - - unicode-match-property-ecmascript@2.0.0: - resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} - engines: {node: '>=4'} - - unicode-match-property-value-ecmascript@2.1.0: - resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} - engines: {node: '>=4'} - - unicode-property-aliases-ecmascript@2.1.0: - resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} - engines: {node: '>=4'} - - unique-string@2.0.0: - resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} - engines: {node: '>=8'} - - universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - - unplugin-solid-styled@0.11.1: - resolution: {integrity: sha512-UrDGYSoo9WM1ITo2sz3ktX9RURRNVN5ewy+P7snIGECZE0n6ebrmdPwCFI3imXzZrCMlp/yZgFCrFOvsz8ms/Q==} - engines: {node: '>=10'} - peerDependencies: - solid-styled: '>=0.9' - vite: ^3 || ^4 || ^5 - peerDependenciesMeta: - vite: - optional: true - - unplugin@1.11.0: - resolution: {integrity: sha512-3r7VWZ/webh0SGgJScpWl2/MRCZK5d3ZYFcNaeci/GQ7Teop7zf0Nl2pUuz7G21BwPd9pcUPOC5KmJ2L3WgC5g==} - engines: {node: '>=14.0.0'} - - upath@1.2.0: - resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} - engines: {node: '>=4'} - - update-browserslist-db@1.0.16: - resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - upper-case-first@2.0.2: - resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} - - upper-case@2.0.2: - resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==} - - validate-html-nesting@1.2.2: - resolution: {integrity: sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg==} - - vite-plugin-package-version@1.1.0: - resolution: {integrity: sha512-TPoFZXNanzcaKCIrC3e2L/TVRkkRLB6l4RPN/S7KbG7rWfyLcCEGsnXvxn6qR7fyZwXalnnSN/I9d6pSFjHpEA==} - peerDependencies: - vite: '>=2.0.0-beta.69' - - vite-plugin-pwa@0.20.0: - resolution: {integrity: sha512-/kDZyqF8KqoXRpMUQtR5Atri/7BWayW8Gp7Kz/4bfstsV6zSFTxjREbXZYL7zSuRL40HGA+o2hvUAFRmC+bL7g==} - engines: {node: '>=16.0.0'} - peerDependencies: - '@vite-pwa/assets-generator': ^0.2.4 - vite: ^3.1.0 || ^4.0.0 || ^5.0.0 - workbox-build: ^7.1.0 - workbox-window: ^7.1.0 - peerDependenciesMeta: - '@vite-pwa/assets-generator': - optional: true - - vite-plugin-solid-styled@0.11.1: - resolution: {integrity: sha512-aqCCcaGo0EOVVt8JTmSgxBtYDMSDY/bti1WmNBZ6zDRkiN4oqfCQyqq9v+1XtYMhulldsufS3H9h3RXWmkvG4A==} - engines: {node: '>=10'} - peerDependencies: - solid-styled: '>=0.9' - vite: ^3 || ^4 || ^5 - - vite-plugin-solid@2.10.2: - resolution: {integrity: sha512-AOEtwMe2baBSXMXdo+BUwECC8IFHcKS6WQV/1NEd+Q7vHPap5fmIhLcAzr+DUJ04/KHx/1UBU0l1/GWP+rMAPQ==} - peerDependencies: - '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.* - solid-js: ^1.7.2 - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 - peerDependenciesMeta: - '@testing-library/jest-dom': - optional: true - - vite@5.3.2: - resolution: {integrity: sha512-6lA7OBHBlXUxiJxbO5aAY2fsHHzDr1q7DvXYnyZycRs2Dz+dXBWuhpWHvmljTRTpQC2uvGmUFFkSHF2vGo90MA==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 - 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 - - vitefu@0.2.5: - resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} - peerDependencies: - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 - peerDependenciesMeta: - vite: - optional: true - - webidl-conversions@4.0.2: - resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} - - webpack-sources@3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} - engines: {node: '>=10.13.0'} - - webpack-virtual-modules@0.6.2: - resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} - - whatwg-url@7.1.0: - resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} - - which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - - which-typed-array@1.1.15: - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} - engines: {node: '>= 0.4'} - - workbox-background-sync@7.1.0: - resolution: {integrity: sha512-rMbgrzueVWDFcEq1610YyDW71z0oAXLfdRHRQcKw4SGihkfOK0JUEvqWHFwA6rJ+6TClnMIn7KQI5PNN1XQXwQ==} - - workbox-broadcast-update@7.1.0: - resolution: {integrity: sha512-O36hIfhjej/c5ar95pO67k1GQw0/bw5tKP7CERNgK+JdxBANQhDmIuOXZTNvwb2IHBx9hj2kxvcDyRIh5nzOgQ==} - - workbox-build@7.1.1: - resolution: {integrity: sha512-WdkVdC70VMpf5NBCtNbiwdSZeKVuhTEd5PV3mAwpTQCGAB5XbOny1P9egEgNdetv4srAMmMKjvBk4RD58LpooA==} - engines: {node: '>=16.0.0'} - - workbox-cacheable-response@7.1.0: - resolution: {integrity: sha512-iwsLBll8Hvua3xCuBB9h92+/e0wdsmSVgR2ZlvcfjepZWwhd3osumQB3x9o7flj+FehtWM2VHbZn8UJeBXXo6Q==} - - workbox-core@7.1.0: - resolution: {integrity: sha512-5KB4KOY8rtL31nEF7BfvU7FMzKT4B5TkbYa2tzkS+Peqj0gayMT9SytSFtNzlrvMaWgv6y/yvP9C0IbpFjV30Q==} - - workbox-expiration@7.1.0: - resolution: {integrity: sha512-m5DcMY+A63rJlPTbbBNtpJ20i3enkyOtSgYfv/l8h+D6YbbNiA0zKEkCUaMsdDlxggla1oOfRkyqTvl5Ni5KQQ==} - - workbox-google-analytics@7.1.0: - resolution: {integrity: sha512-FvE53kBQHfVTcZyczeBVRexhh7JTkyQ8HAvbVY6mXd2n2A7Oyz/9fIwnY406ZcDhvE4NFfKGjW56N4gBiqkrew==} - - workbox-navigation-preload@7.1.0: - resolution: {integrity: sha512-4wyAbo0vNI/X0uWNJhCMKxnPanNyhybsReMGN9QUpaePLTiDpKxPqFxl4oUmBNddPwIXug01eTSLVIFXimRG/A==} - - workbox-precaching@7.1.0: - resolution: {integrity: sha512-LyxzQts+UEpgtmfnolo0hHdNjoB7EoRWcF7EDslt+lQGd0lW4iTvvSe3v5JiIckQSB5KTW5xiCqjFviRKPj1zA==} - - workbox-range-requests@7.1.0: - resolution: {integrity: sha512-m7+O4EHolNs5yb/79CrnwPR/g/PRzMFYEdo01LqwixVnc/sbzNSvKz0d04OE3aMRel1CwAAZQheRsqGDwATgPQ==} - - workbox-recipes@7.1.0: - resolution: {integrity: sha512-NRrk4ycFN9BHXJB6WrKiRX3W3w75YNrNrzSX9cEZgFB5ubeGoO8s/SDmOYVrFYp9HMw6sh1Pm3eAY/1gVS8YLg==} - - workbox-routing@7.1.0: - resolution: {integrity: sha512-oOYk+kLriUY2QyHkIilxUlVcFqwduLJB7oRZIENbqPGeBP/3TWHYNNdmGNhz1dvKuw7aqvJ7CQxn27/jprlTdg==} - - workbox-strategies@7.1.0: - resolution: {integrity: sha512-/UracPiGhUNehGjRm/tLUQ+9PtWmCbRufWtV0tNrALuf+HZ4F7cmObSEK+E4/Bx1p8Syx2tM+pkIrvtyetdlew==} - - workbox-streams@7.1.0: - resolution: {integrity: sha512-WyHAVxRXBMfysM8ORwiZnI98wvGWTVAq/lOyBjf00pXFvG0mNaVz4Ji+u+fKa/mf1i2SnTfikoYKto4ihHeS6w==} - - workbox-sw@7.1.0: - resolution: {integrity: sha512-Hml/9+/njUXBglv3dtZ9WBKHI235AQJyLBV1G7EFmh4/mUdSQuXui80RtjDeVRrXnm/6QWgRUEHG3/YBVbxtsA==} - - workbox-window@7.1.0: - resolution: {integrity: sha512-ZHeROyqR+AS5UPzholQRDttLFqGMwP0Np8MKWAdyxsDETxq3qOAyXvqessc3GniohG6e0mAqSQyKOHmT8zPF7g==} - - workerd@1.20240701.0: - resolution: {integrity: sha512-qSgNVqauqzNCij9MaJLF2c2ko3AnFioVSIxMSryGbRK+LvtGr9BKBt6JOxCb24DoJASoJDx3pe3DJHBVydUiBg==} - engines: {node: '>=16'} - hasBin: true - - wrangler@3.64.0: - resolution: {integrity: sha512-q2VQADJXzuOkXs9KIfPSx7UCZHBoxsqSNbJDLkc2pHpGmsyNQXsJRqjMoTg/Kls7O3K9A7EGnzGr7+Io2vE6AQ==} - engines: {node: '>=16.17.0'} - hasBin: true - peerDependencies: - '@cloudflare/workers-types': ^4.20240620.0 - peerDependenciesMeta: - '@cloudflare/workers-types': - optional: true - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - ws@8.17.1: - resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - xxhash-wasm@1.0.2: - resolution: {integrity: sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A==} - - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - - youch@3.3.3: - resolution: {integrity: sha512-qSFXUk3UZBLfggAW3dJKg0BMblG5biqSF8M34E06o5CSsZtH92u9Hqmj2RzGiHDi64fhe83+4tENFP2DB6t6ZA==} - - zod@3.23.8: - resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} - -snapshots: - - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - - '@apideck/better-ajv-errors@0.3.6(ajv@8.17.1)': - dependencies: - ajv: 8.17.1 - json-schema: 0.4.0 - jsonpointer: 5.0.1 - leven: 3.1.0 - - '@babel/code-frame@7.24.7': - dependencies: - '@babel/highlight': 7.24.7 - picocolors: 1.0.1 - - '@babel/compat-data@7.24.7': {} - - '@babel/compat-data@7.24.8': {} - - '@babel/core@7.24.7': - dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helpers': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/template': 7.24.7 - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - convert-source-map: 2.0.0 - debug: 4.3.5 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/generator@7.24.7': - dependencies: - '@babel/types': 7.24.7 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 - - '@babel/generator@7.24.8': - dependencies: - '@babel/types': 7.24.8 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 - - '@babel/helper-annotate-as-pure@7.24.7': - dependencies: - '@babel/types': 7.24.8 - - '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7': - dependencies: - '@babel/traverse': 7.24.8 - '@babel/types': 7.24.8 - transitivePeerDependencies: - - supports-color - - '@babel/helper-compilation-targets@7.24.7': - dependencies: - '@babel/compat-data': 7.24.7 - '@babel/helper-validator-option': 7.24.7 - browserslist: 4.23.1 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-compilation-targets@7.24.8': - dependencies: - '@babel/compat-data': 7.24.8 - '@babel/helper-validator-option': 7.24.8 - browserslist: 4.23.1 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-create-class-features-plugin@7.24.8(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-member-expression-to-functions': 7.24.8 - '@babel/helper-optimise-call-expression': 7.24.7 - '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7) - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/helper-create-regexp-features-plugin@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.24.7 - regexpu-core: 5.3.2 - semver: 6.3.1 - - '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-compilation-targets': 7.24.8 - '@babel/helper-plugin-utils': 7.24.8 - debug: 4.3.5 - lodash.debounce: 4.0.8 - resolve: 1.22.8 - transitivePeerDependencies: - - supports-color - - '@babel/helper-environment-visitor@7.24.7': - dependencies: - '@babel/types': 7.24.7 - - '@babel/helper-function-name@7.24.7': - dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.7 - - '@babel/helper-hoist-variables@7.24.7': - dependencies: - '@babel/types': 7.24.7 - - '@babel/helper-member-expression-to-functions@7.24.8': - dependencies: - '@babel/traverse': 7.24.8 - '@babel/types': 7.24.8 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-imports@7.18.6': - dependencies: - '@babel/types': 7.24.7 - - '@babel/helper-module-imports@7.24.7': - dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-simple-access': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.24.8(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-simple-access': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-optimise-call-expression@7.24.7': - dependencies: - '@babel/types': 7.24.8 - - '@babel/helper-plugin-utils@7.24.7': {} - - '@babel/helper-plugin-utils@7.24.8': {} - - '@babel/helper-remap-async-to-generator@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-wrap-function': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-replace-supers@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-member-expression-to-functions': 7.24.8 - '@babel/helper-optimise-call-expression': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-simple-access@7.24.7': - dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-skip-transparent-expression-wrappers@7.24.7': - dependencies: - '@babel/traverse': 7.24.8 - '@babel/types': 7.24.8 - transitivePeerDependencies: - - supports-color - - '@babel/helper-split-export-declaration@7.24.7': - dependencies: - '@babel/types': 7.24.7 - - '@babel/helper-string-parser@7.24.7': {} - - '@babel/helper-string-parser@7.24.8': {} - - '@babel/helper-validator-identifier@7.24.7': {} - - '@babel/helper-validator-option@7.24.7': {} - - '@babel/helper-validator-option@7.24.8': {} - - '@babel/helper-wrap-function@7.24.7': - dependencies: - '@babel/helper-function-name': 7.24.7 - '@babel/template': 7.24.7 - '@babel/traverse': 7.24.8 - '@babel/types': 7.24.8 - transitivePeerDependencies: - - supports-color - - '@babel/helpers@7.24.7': - dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.7 - - '@babel/highlight@7.24.7': - dependencies: - '@babel/helper-validator-identifier': 7.24.7 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.0.1 - - '@babel/parser@7.24.7': - dependencies: - '@babel/types': 7.24.7 - - '@babel/parser@7.24.8': - dependencies: - '@babel/types': 7.24.8 - - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-syntax-import-assertions@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-syntax-import-attributes@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-arrow-functions@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-async-generator-functions@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-remap-async-to-generator': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-async-to-generator@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-remap-async-to-generator': 7.24.7(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-block-scoped-functions@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-block-scoping@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-class-properties@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.8 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-class-static-block@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-classes@7.24.8(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-compilation-targets': 7.24.8 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7) - '@babel/helper-split-export-declaration': 7.24.7 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-computed-properties@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/template': 7.24.7 - - '@babel/plugin-transform-destructuring@7.24.8(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-dotall-regex@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-duplicate-keys@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-dynamic-import@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.7) - - '@babel/plugin-transform-exponentiation-operator@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-export-namespace-from@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.7) - - '@babel/plugin-transform-for-of@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-function-name@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-compilation-targets': 7.24.8 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-json-strings@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.7) - - '@babel/plugin-transform-literals@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-logical-assignment-operators@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.7) - - '@babel/plugin-transform-member-expression-literals@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-modules-amd@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-transforms': 7.24.8(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.8 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-modules-commonjs@7.24.8(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-transforms': 7.24.8(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-simple-access': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-modules-systemjs@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-module-transforms': 7.24.8(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-validator-identifier': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-modules-umd@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-transforms': 7.24.8(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.8 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-named-capturing-groups-regex@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-new-target@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-nullish-coalescing-operator@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7) - - '@babel/plugin-transform-numeric-separator@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.7) - - '@babel/plugin-transform-object-rest-spread@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-compilation-targets': 7.24.8 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.24.7) - - '@babel/plugin-transform-object-super@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-optional-catch-binding@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.7) - - '@babel/plugin-transform-optional-chaining@7.24.8(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-parameters@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-private-methods@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.8 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-private-property-in-object@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-property-literals@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-regenerator@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - regenerator-transform: 0.15.2 - - '@babel/plugin-transform-reserved-words@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-shorthand-properties@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-spread@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-sticky-regex@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-template-literals@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-typeof-symbol@7.24.8(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-unicode-escapes@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-unicode-property-regex@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-unicode-regex@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-unicode-sets-regex@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/preset-env@7.24.8(@babel/core@7.24.7)': - dependencies: - '@babel/compat-data': 7.24.8 - '@babel/core': 7.24.7 - '@babel/helper-compilation-targets': 7.24.8 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-validator-option': 7.24.8 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.7) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.7) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.7) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.7) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-import-assertions': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-syntax-import-attributes': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.7) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.7) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.7) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.7) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.7) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.7) - '@babel/plugin-transform-arrow-functions': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-async-generator-functions': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-async-to-generator': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-block-scoped-functions': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-block-scoping': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-class-properties': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-class-static-block': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-classes': 7.24.8(@babel/core@7.24.7) - '@babel/plugin-transform-computed-properties': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-destructuring': 7.24.8(@babel/core@7.24.7) - '@babel/plugin-transform-dotall-regex': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-duplicate-keys': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-dynamic-import': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-exponentiation-operator': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-export-namespace-from': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-for-of': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-function-name': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-json-strings': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-literals': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-logical-assignment-operators': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-member-expression-literals': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-modules-amd': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.24.7) - '@babel/plugin-transform-modules-systemjs': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-modules-umd': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-named-capturing-groups-regex': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-new-target': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-nullish-coalescing-operator': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-numeric-separator': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-object-rest-spread': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-object-super': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-optional-catch-binding': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.24.7) - '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-private-methods': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-private-property-in-object': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-property-literals': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-regenerator': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-reserved-words': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-shorthand-properties': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-spread': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-sticky-regex': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-template-literals': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-typeof-symbol': 7.24.8(@babel/core@7.24.7) - '@babel/plugin-transform-unicode-escapes': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-unicode-property-regex': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-unicode-regex': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-unicode-sets-regex': 7.24.7(@babel/core@7.24.7) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.7) - babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.7) - babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.7) - babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.7) - core-js-compat: 3.37.1 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/types': 7.24.8 - esutils: 2.0.3 - - '@babel/regjsgen@0.8.0': {} - - '@babel/runtime@7.24.8': - dependencies: - regenerator-runtime: 0.14.1 - - '@babel/template@7.24.7': - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - - '@babel/traverse@7.24.7': - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - debug: 4.3.5 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - - '@babel/traverse@7.24.8': - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.8 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/parser': 7.24.8 - '@babel/types': 7.24.8 - debug: 4.3.5 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - - '@babel/types@7.24.7': - dependencies: - '@babel/helper-string-parser': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - to-fast-properties: 2.0.0 - - '@babel/types@7.24.8': - dependencies: - '@babel/helper-string-parser': 7.24.8 - '@babel/helper-validator-identifier': 7.24.7 - to-fast-properties: 2.0.0 - - '@cloudflare/kv-asset-handler@0.3.4': - dependencies: - mime: 3.0.0 - - '@cloudflare/workerd-darwin-64@1.20240701.0': - optional: true - - '@cloudflare/workerd-darwin-arm64@1.20240701.0': - optional: true - - '@cloudflare/workerd-linux-64@1.20240701.0': - optional: true - - '@cloudflare/workerd-linux-arm64@1.20240701.0': - optional: true - - '@cloudflare/workerd-windows-64@1.20240701.0': - optional: true - - '@cspotcode/source-map-support@0.8.1': - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - - '@esbuild-plugins/node-globals-polyfill@0.2.3(esbuild@0.17.19)': - dependencies: - esbuild: 0.17.19 - - '@esbuild-plugins/node-modules-polyfill@0.2.2(esbuild@0.17.19)': - dependencies: - esbuild: 0.17.19 - escape-string-regexp: 4.0.0 - rollup-plugin-node-polyfills: 0.2.1 - - '@esbuild/aix-ppc64@0.21.5': - optional: true - - '@esbuild/android-arm64@0.17.19': - optional: true - - '@esbuild/android-arm64@0.21.5': - optional: true - - '@esbuild/android-arm@0.17.19': - optional: true - - '@esbuild/android-arm@0.21.5': - optional: true - - '@esbuild/android-x64@0.17.19': - optional: true - - '@esbuild/android-x64@0.21.5': - optional: true - - '@esbuild/darwin-arm64@0.17.19': - optional: true - - '@esbuild/darwin-arm64@0.21.5': - optional: true - - '@esbuild/darwin-x64@0.17.19': - optional: true - - '@esbuild/darwin-x64@0.21.5': - optional: true - - '@esbuild/freebsd-arm64@0.17.19': - optional: true - - '@esbuild/freebsd-arm64@0.21.5': - optional: true - - '@esbuild/freebsd-x64@0.17.19': - optional: true - - '@esbuild/freebsd-x64@0.21.5': - optional: true - - '@esbuild/linux-arm64@0.17.19': - optional: true - - '@esbuild/linux-arm64@0.21.5': - optional: true - - '@esbuild/linux-arm@0.17.19': - optional: true - - '@esbuild/linux-arm@0.21.5': - optional: true - - '@esbuild/linux-ia32@0.17.19': - optional: true - - '@esbuild/linux-ia32@0.21.5': - optional: true - - '@esbuild/linux-loong64@0.17.19': - optional: true - - '@esbuild/linux-loong64@0.21.5': - optional: true - - '@esbuild/linux-mips64el@0.17.19': - optional: true - - '@esbuild/linux-mips64el@0.21.5': - optional: true - - '@esbuild/linux-ppc64@0.17.19': - optional: true - - '@esbuild/linux-ppc64@0.21.5': - optional: true - - '@esbuild/linux-riscv64@0.17.19': - optional: true - - '@esbuild/linux-riscv64@0.21.5': - optional: true - - '@esbuild/linux-s390x@0.17.19': - optional: true - - '@esbuild/linux-s390x@0.21.5': - optional: true - - '@esbuild/linux-x64@0.17.19': - optional: true - - '@esbuild/linux-x64@0.21.5': - optional: true - - '@esbuild/netbsd-x64@0.17.19': - optional: true - - '@esbuild/netbsd-x64@0.21.5': - optional: true - - '@esbuild/openbsd-x64@0.17.19': - optional: true - - '@esbuild/openbsd-x64@0.21.5': - optional: true - - '@esbuild/sunos-x64@0.17.19': - optional: true - - '@esbuild/sunos-x64@0.21.5': - optional: true - - '@esbuild/win32-arm64@0.17.19': - optional: true - - '@esbuild/win32-arm64@0.21.5': - optional: true - - '@esbuild/win32-ia32@0.17.19': - optional: true - - '@esbuild/win32-ia32@0.21.5': - optional: true - - '@esbuild/win32-x64@0.17.19': - optional: true - - '@esbuild/win32-x64@0.21.5': - optional: true - - '@fastify/busboy@2.1.1': {} - - '@jridgewell/gen-mapping@0.3.5': - dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/set-array@1.2.1': {} - - '@jridgewell/source-map@0.3.6': - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/sourcemap-codec@1.4.15': {} - - '@jridgewell/trace-mapping@0.3.25': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - - '@jridgewell/trace-mapping@0.3.9': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - - '@nanostores/persistent@0.9.1(nanostores@0.9.5)': - dependencies: - nanostores: 0.9.5 - - '@nanostores/solid@0.4.2(nanostores@0.9.5)(solid-js@1.8.18)': - dependencies: - nanostores: 0.9.5 - solid-js: 1.8.18 - - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} - - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.1 - - '@popperjs/core@2.11.8': {} - - '@rollup/plugin-babel@5.3.1(@babel/core@7.24.7)(@types/babel__core@7.20.5)(rollup@2.79.1)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-imports': 7.24.7 - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - rollup: 2.79.1 - optionalDependencies: - '@types/babel__core': 7.20.5 - transitivePeerDependencies: - - supports-color - - '@rollup/plugin-node-resolve@15.2.3(rollup@2.79.1)': - dependencies: - '@rollup/pluginutils': 5.1.0(rollup@2.79.1) - '@types/resolve': 1.20.2 - deepmerge: 4.3.1 - is-builtin-module: 3.2.1 - is-module: 1.0.0 - resolve: 1.22.8 - optionalDependencies: - rollup: 2.79.1 - - '@rollup/plugin-replace@2.4.2(rollup@2.79.1)': - dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - magic-string: 0.25.9 - rollup: 2.79.1 - - '@rollup/plugin-terser@0.4.4(rollup@2.79.1)': - dependencies: - serialize-javascript: 6.0.2 - smob: 1.5.0 - terser: 5.31.2 - optionalDependencies: - rollup: 2.79.1 - - '@rollup/pluginutils@3.1.0(rollup@2.79.1)': - dependencies: - '@types/estree': 0.0.39 - estree-walker: 1.0.1 - picomatch: 2.3.1 - rollup: 2.79.1 - - '@rollup/pluginutils@5.1.0(rollup@2.79.1)': - dependencies: - '@types/estree': 1.0.5 - estree-walker: 2.0.2 - picomatch: 2.3.1 - optionalDependencies: - rollup: 2.79.1 - - '@rollup/rollup-android-arm-eabi@4.18.0': - optional: true - - '@rollup/rollup-android-arm64@4.18.0': - optional: true - - '@rollup/rollup-darwin-arm64@4.18.0': - optional: true - - '@rollup/rollup-darwin-x64@4.18.0': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.18.0': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.18.0': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.18.0': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.18.0': - optional: true - - '@rollup/rollup-linux-powerpc64le-gnu@4.18.0': - optional: true - - '@rollup/rollup-linux-riscv64-gnu@4.18.0': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.18.0': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.18.0': - optional: true - - '@rollup/rollup-linux-x64-musl@4.18.0': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.18.0': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.18.0': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.18.0': - optional: true - - '@solid-primitives/event-listener@2.3.3(solid-js@1.8.18)': - dependencies: - '@solid-primitives/utils': 6.2.3(solid-js@1.8.18) - solid-js: 1.8.18 - - '@solid-primitives/resize-observer@2.0.25(solid-js@1.8.18)': - dependencies: - '@solid-primitives/event-listener': 2.3.3(solid-js@1.8.18) - '@solid-primitives/rootless': 1.4.5(solid-js@1.8.18) - '@solid-primitives/static-store': 0.0.8(solid-js@1.8.18) - '@solid-primitives/utils': 6.2.3(solid-js@1.8.18) - solid-js: 1.8.18 - - '@solid-primitives/rootless@1.4.5(solid-js@1.8.18)': - dependencies: - '@solid-primitives/utils': 6.2.3(solid-js@1.8.18) - solid-js: 1.8.18 - - '@solid-primitives/static-store@0.0.8(solid-js@1.8.18)': - dependencies: - '@solid-primitives/utils': 6.2.3(solid-js@1.8.18) - solid-js: 1.8.18 - - '@solid-primitives/utils@6.2.3(solid-js@1.8.18)': - dependencies: - solid-js: 1.8.18 - - '@solidjs/router@0.11.5(solid-js@1.8.18)': - dependencies: - solid-js: 1.8.18 - - '@suid/base@0.9.0(solid-js@1.8.18)': - dependencies: - '@popperjs/core': 2.11.8 - '@suid/css': 0.4.0 - '@suid/system': 0.11.0(solid-js@1.8.18) - '@suid/types': 0.6.0(solid-js@1.8.18) - '@suid/utils': 0.9.0(solid-js@1.8.18) - clsx: 2.1.1 - solid-js: 1.8.18 - - '@suid/css@0.4.0': {} - - '@suid/icons-material@0.7.0(solid-js@1.8.18)': - dependencies: - '@suid/material': 0.16.0(solid-js@1.8.18) - solid-js: 1.8.18 - - '@suid/material@0.16.0(solid-js@1.8.18)': - dependencies: - '@suid/base': 0.9.0(solid-js@1.8.18) - '@suid/css': 0.4.0 - '@suid/system': 0.11.0(solid-js@1.8.18) - '@suid/types': 0.6.0(solid-js@1.8.18) - '@suid/utils': 0.9.0(solid-js@1.8.18) - clsx: 2.1.1 - solid-js: 1.8.18 - - '@suid/styled-engine@0.7.0(solid-js@1.8.18)': - dependencies: - '@suid/css': 0.4.0 - '@suid/utils': 0.9.0(solid-js@1.8.18) - solid-js: 1.8.18 - - '@suid/system@0.11.0(solid-js@1.8.18)': - dependencies: - '@suid/css': 0.4.0 - '@suid/styled-engine': 0.7.0(solid-js@1.8.18) - '@suid/types': 0.6.0(solid-js@1.8.18) - '@suid/utils': 0.9.0(solid-js@1.8.18) - clsx: 2.1.1 - csstype: 3.1.3 - solid-js: 1.8.18 - - '@suid/types@0.6.0(solid-js@1.8.18)': - dependencies: - solid-js: 1.8.18 - - '@suid/utils@0.9.0(solid-js@1.8.18)': - dependencies: - '@suid/types': 0.6.0(solid-js@1.8.18) - solid-js: 1.8.18 - - '@suid/vite-plugin@0.2.0(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2))': - dependencies: - '@babel/generator': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - '@types/babel__generator': 7.6.8 - '@types/babel__traverse': 7.20.6 - vite: 5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2) - transitivePeerDependencies: - - supports-color - - '@surma/rollup-plugin-off-main-thread@2.2.3': - dependencies: - ejs: 3.1.10 - json5: 2.2.3 - magic-string: 0.25.9 - string.prototype.matchall: 4.0.11 - - '@types/babel__core@7.20.5': - dependencies: - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - '@types/babel__generator': 7.6.8 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.6 - - '@types/babel__generator@7.6.8': - dependencies: - '@babel/types': 7.24.7 - - '@types/babel__template@7.4.4': - dependencies: - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - - '@types/babel__traverse@7.20.6': - dependencies: - '@babel/types': 7.24.7 - - '@types/css-tree@2.3.8': {} - - '@types/estree@0.0.39': {} - - '@types/estree@1.0.5': {} - - '@types/hammerjs@2.0.45': {} - - '@types/node-forge@1.3.11': - dependencies: - '@types/node': 20.14.10 - - '@types/node@20.14.10': - dependencies: - undici-types: 5.26.5 - - '@types/resolve@1.20.2': {} - - '@types/trusted-types@2.0.7': {} - - acorn-walk@8.3.3: - dependencies: - acorn: 8.12.0 - - acorn@8.12.0: {} - - ajv@8.17.1: - dependencies: - fast-deep-equal: 3.1.3 - fast-uri: 3.0.1 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - - ansi-styles@3.2.1: - dependencies: - color-convert: 1.9.3 - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - - array-buffer-byte-length@1.0.1: - dependencies: - call-bind: 1.0.7 - is-array-buffer: 3.0.4 - - arraybuffer.prototype.slice@1.0.3: - dependencies: - array-buffer-byte-length: 1.0.1 - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - is-array-buffer: 3.0.4 - is-shared-array-buffer: 1.0.3 - - as-table@1.0.55: - dependencies: - printable-characters: 1.0.42 - - async@3.2.5: {} - - at-least-node@1.0.0: {} - - available-typed-arrays@1.0.7: - dependencies: - possible-typed-array-names: 1.0.0 - - babel-plugin-jsx-dom-expressions@0.37.23(@babel/core@7.24.7): - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-imports': 7.18.6 - '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.7) - '@babel/types': 7.24.7 - html-entities: 2.3.3 - validate-html-nesting: 1.2.2 - - babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.24.7): - dependencies: - '@babel/compat-data': 7.24.8 - '@babel/core': 7.24.7 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.7) - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.7): - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.7) - core-js-compat: 3.37.1 - transitivePeerDependencies: - - supports-color - - babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.24.7): - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - - babel-preset-solid@1.8.18(@babel/core@7.24.7): - dependencies: - '@babel/core': 7.24.7 - babel-plugin-jsx-dom-expressions: 0.37.23(@babel/core@7.24.7) - - balanced-match@1.0.2: {} - - binary-extensions@2.3.0: {} - - blake3-wasm@2.1.5: {} - - blurhash@2.0.5: {} - - brace-expansion@1.1.11: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - brace-expansion@2.0.1: - dependencies: - balanced-match: 1.0.2 - - braces@3.0.3: - dependencies: - fill-range: 7.1.1 - - browserslist@4.23.1: - dependencies: - caniuse-lite: 1.0.30001639 - electron-to-chromium: 1.4.815 - node-releases: 2.0.14 - update-browserslist-db: 1.0.16(browserslist@4.23.1) - - buffer-from@1.1.2: {} - - builtin-modules@3.3.0: {} - - call-bind@1.0.7: - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - set-function-length: 1.2.2 - - camel-case@4.1.2: - dependencies: - pascal-case: 3.1.2 - tslib: 2.6.3 - - caniuse-lite@1.0.30001639: {} - - capital-case@1.0.4: - dependencies: - no-case: 3.0.4 - tslib: 2.6.3 - upper-case-first: 2.0.2 - - capnp-ts@0.7.0: - dependencies: - debug: 4.3.5 - tslib: 2.6.3 - transitivePeerDependencies: - - supports-color - - chalk@2.4.2: - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - change-case@4.1.2: - dependencies: - camel-case: 4.1.2 - capital-case: 1.0.4 - constant-case: 3.0.4 - dot-case: 3.0.4 - header-case: 2.0.4 - no-case: 3.0.4 - param-case: 3.0.4 - pascal-case: 3.1.2 - path-case: 3.0.4 - sentence-case: 3.0.4 - snake-case: 3.0.4 - tslib: 2.6.3 - - chokidar@3.6.0: - dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - 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 - - clsx@2.1.1: {} - - color-convert@1.9.3: - dependencies: - color-name: 1.1.3 - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.3: {} - - color-name@1.1.4: {} - - commander@2.20.3: {} - - common-tags@1.8.2: {} - - concat-map@0.0.1: {} - - consola@3.2.3: {} - - constant-case@3.0.4: - dependencies: - no-case: 3.0.4 - tslib: 2.6.3 - upper-case: 2.0.2 - - convert-source-map@2.0.0: {} - - cookie@0.5.0: {} - - core-js-compat@3.37.1: - dependencies: - browserslist: 4.23.1 - - crypto-random-string@2.0.0: {} - - css-tree@2.3.1: - dependencies: - mdn-data: 2.0.30 - source-map-js: 1.2.0 - - csstype@3.1.3: {} - - data-uri-to-buffer@2.0.2: {} - - data-view-buffer@1.0.1: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - - data-view-byte-length@1.0.1: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - - data-view-byte-offset@1.0.0: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - - date-fns@3.6.0: {} - - debug@4.3.5: - dependencies: - ms: 2.1.2 - - deepmerge@4.3.1: {} - - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - gopd: 1.0.1 - - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - - defu@6.1.4: {} - - detect-libc@1.0.3: {} - - dot-case@3.0.4: - dependencies: - no-case: 3.0.4 - tslib: 2.6.3 - - ejs@3.1.10: - dependencies: - jake: 10.9.1 - - electron-to-chromium@1.4.815: {} - - es-abstract@1.23.3: - dependencies: - array-buffer-byte-length: 1.0.1 - arraybuffer.prototype.slice: 1.0.3 - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - data-view-buffer: 1.0.1 - data-view-byte-length: 1.0.1 - data-view-byte-offset: 1.0.0 - es-define-property: 1.0.0 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-set-tostringtag: 2.0.3 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.4 - get-symbol-description: 1.0.2 - globalthis: 1.0.4 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - internal-slot: 1.0.7 - is-array-buffer: 3.0.4 - is-callable: 1.2.7 - is-data-view: 1.0.1 - is-negative-zero: 2.0.3 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.3 - is-string: 1.0.7 - is-typed-array: 1.1.13 - is-weakref: 1.0.2 - object-inspect: 1.13.2 - object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 - safe-array-concat: 1.1.2 - safe-regex-test: 1.0.3 - string.prototype.trim: 1.2.9 - string.prototype.trimend: 1.0.8 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.2 - typed-array-byte-length: 1.0.1 - typed-array-byte-offset: 1.0.2 - typed-array-length: 1.0.6 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.15 - - es-define-property@1.0.0: - dependencies: - get-intrinsic: 1.2.4 - - es-errors@1.3.0: {} - - es-object-atoms@1.0.0: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.0.3: - dependencies: - get-intrinsic: 1.2.4 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - es-to-primitive@1.2.1: - dependencies: - is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 - - esbuild@0.17.19: - optionalDependencies: - '@esbuild/android-arm': 0.17.19 - '@esbuild/android-arm64': 0.17.19 - '@esbuild/android-x64': 0.17.19 - '@esbuild/darwin-arm64': 0.17.19 - '@esbuild/darwin-x64': 0.17.19 - '@esbuild/freebsd-arm64': 0.17.19 - '@esbuild/freebsd-x64': 0.17.19 - '@esbuild/linux-arm': 0.17.19 - '@esbuild/linux-arm64': 0.17.19 - '@esbuild/linux-ia32': 0.17.19 - '@esbuild/linux-loong64': 0.17.19 - '@esbuild/linux-mips64el': 0.17.19 - '@esbuild/linux-ppc64': 0.17.19 - '@esbuild/linux-riscv64': 0.17.19 - '@esbuild/linux-s390x': 0.17.19 - '@esbuild/linux-x64': 0.17.19 - '@esbuild/netbsd-x64': 0.17.19 - '@esbuild/openbsd-x64': 0.17.19 - '@esbuild/sunos-x64': 0.17.19 - '@esbuild/win32-arm64': 0.17.19 - '@esbuild/win32-ia32': 0.17.19 - '@esbuild/win32-x64': 0.17.19 - - esbuild@0.21.5: - optionalDependencies: - '@esbuild/aix-ppc64': 0.21.5 - '@esbuild/android-arm': 0.21.5 - '@esbuild/android-arm64': 0.21.5 - '@esbuild/android-x64': 0.21.5 - '@esbuild/darwin-arm64': 0.21.5 - '@esbuild/darwin-x64': 0.21.5 - '@esbuild/freebsd-arm64': 0.21.5 - '@esbuild/freebsd-x64': 0.21.5 - '@esbuild/linux-arm': 0.21.5 - '@esbuild/linux-arm64': 0.21.5 - '@esbuild/linux-ia32': 0.21.5 - '@esbuild/linux-loong64': 0.21.5 - '@esbuild/linux-mips64el': 0.21.5 - '@esbuild/linux-ppc64': 0.21.5 - '@esbuild/linux-riscv64': 0.21.5 - '@esbuild/linux-s390x': 0.21.5 - '@esbuild/linux-x64': 0.21.5 - '@esbuild/netbsd-x64': 0.21.5 - '@esbuild/openbsd-x64': 0.21.5 - '@esbuild/sunos-x64': 0.21.5 - '@esbuild/win32-arm64': 0.21.5 - '@esbuild/win32-ia32': 0.21.5 - '@esbuild/win32-x64': 0.21.5 - - escalade@3.1.2: {} - - escape-string-regexp@1.0.5: {} - - escape-string-regexp@4.0.0: {} - - estree-walker@0.6.1: {} - - estree-walker@1.0.1: {} - - estree-walker@2.0.2: {} - - esutils@2.0.3: {} - - events-to-async@2.0.1: {} - - exit-hook@2.2.1: {} - - fast-deep-equal@3.1.3: {} - - fast-glob@3.3.2: - 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.7 - - fast-json-stable-stringify@2.1.0: {} - - fast-uri@3.0.1: {} - - fastq@1.17.1: - dependencies: - reusify: 1.0.4 - - filelist@1.0.4: - dependencies: - minimatch: 5.1.6 - - fill-range@7.1.1: - dependencies: - to-regex-range: 5.0.1 - - for-each@0.3.3: - dependencies: - is-callable: 1.2.7 - - fs-extra@9.1.0: - dependencies: - at-least-node: 1.0.0 - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - - fs.realpath@1.0.0: {} - - fsevents@2.3.3: - optional: true - - function-bind@1.1.2: {} - - function.prototype.name@1.1.6: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - functions-have-names: 1.2.3 - - functions-have-names@1.2.3: {} - - gensync@1.0.0-beta.2: {} - - get-intrinsic@1.2.4: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - - get-own-enumerable-property-symbols@3.0.2: {} - - get-source@2.0.12: - dependencies: - data-uri-to-buffer: 2.0.2 - source-map: 0.6.1 - - get-symbol-description@1.0.2: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - - glob-to-regexp@0.4.1: {} - - glob@7.2.3: - 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 - - globals@11.12.0: {} - - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.0.1 - - gopd@1.0.1: - dependencies: - get-intrinsic: 1.2.4 - - graceful-fs@4.2.11: {} - - hammerjs@2.0.8: {} - - has-bigints@1.0.2: {} - - has-flag@3.0.0: {} - - has-flag@4.0.0: {} - - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.0 - - has-proto@1.0.3: {} - - has-symbols@1.0.3: {} - - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.0.3 - - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - - header-case@2.0.4: - dependencies: - capital-case: 1.0.4 - tslib: 2.6.3 - - html-entities@2.3.3: {} - - idb@7.1.1: {} - - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - inherits@2.0.4: {} - - internal-slot@1.0.7: - dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.0.6 - - is-array-buffer@3.0.4: - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - - is-bigint@1.0.4: - dependencies: - has-bigints: 1.0.2 - - is-binary-path@2.1.0: - dependencies: - binary-extensions: 2.3.0 - - is-boolean-object@1.1.2: - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - - is-builtin-module@3.2.1: - dependencies: - builtin-modules: 3.3.0 - - is-callable@1.2.7: {} - - is-core-module@2.14.0: - dependencies: - hasown: 2.0.2 - - is-data-view@1.0.1: - dependencies: - is-typed-array: 1.1.13 - - is-date-object@1.0.5: - dependencies: - has-tostringtag: 1.0.2 - - is-extglob@2.1.1: {} - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-module@1.0.0: {} - - is-negative-zero@2.0.3: {} - - is-number-object@1.0.7: - dependencies: - has-tostringtag: 1.0.2 - - is-number@7.0.0: {} - - is-obj@1.0.1: {} - - is-regex@1.1.4: - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - - is-regexp@1.0.0: {} - - is-shared-array-buffer@1.0.3: - dependencies: - call-bind: 1.0.7 - - is-stream@2.0.1: {} - - is-string@1.0.7: - dependencies: - has-tostringtag: 1.0.2 - - is-symbol@1.0.4: - dependencies: - has-symbols: 1.0.3 - - is-typed-array@1.1.13: - dependencies: - which-typed-array: 1.1.15 - - is-weakref@1.0.2: - dependencies: - call-bind: 1.0.7 - - is-what@4.1.16: {} - - isarray@2.0.5: {} - - isomorphic-ws@5.0.0(ws@8.17.1): - dependencies: - ws: 8.17.1 - - jake@10.9.1: - dependencies: - async: 3.2.5 - chalk: 4.1.2 - filelist: 1.0.4 - minimatch: 3.1.2 - - js-tokens@4.0.0: {} - - jsesc@0.5.0: {} - - jsesc@2.5.2: {} - - json-schema-traverse@1.0.0: {} - - json-schema@0.4.0: {} - - json5@2.2.3: {} - - jsonfile@6.1.0: - dependencies: - universalify: 2.0.1 - optionalDependencies: - graceful-fs: 4.2.11 - - jsonpointer@5.0.1: {} - - leven@3.1.0: {} - - lightningcss-darwin-arm64@1.25.1: - optional: true - - lightningcss-darwin-x64@1.25.1: - optional: true - - lightningcss-freebsd-x64@1.25.1: - optional: true - - lightningcss-linux-arm-gnueabihf@1.25.1: - optional: true - - lightningcss-linux-arm64-gnu@1.25.1: - optional: true - - lightningcss-linux-arm64-musl@1.25.1: - optional: true - - lightningcss-linux-x64-gnu@1.25.1: - optional: true - - lightningcss-linux-x64-musl@1.25.1: - optional: true - - lightningcss-win32-x64-msvc@1.25.1: - optional: true - - lightningcss@1.25.1: - dependencies: - detect-libc: 1.0.3 - optionalDependencies: - lightningcss-darwin-arm64: 1.25.1 - lightningcss-darwin-x64: 1.25.1 - lightningcss-freebsd-x64: 1.25.1 - lightningcss-linux-arm-gnueabihf: 1.25.1 - lightningcss-linux-arm64-gnu: 1.25.1 - lightningcss-linux-arm64-musl: 1.25.1 - lightningcss-linux-x64-gnu: 1.25.1 - lightningcss-linux-x64-musl: 1.25.1 - lightningcss-win32-x64-msvc: 1.25.1 - - lodash.debounce@4.0.8: {} - - lodash.sortby@4.7.0: {} - - lodash@4.17.21: {} - - lower-case@2.0.2: - dependencies: - tslib: 2.6.3 - - lru-cache@5.1.1: - dependencies: - yallist: 3.1.1 - - magic-string@0.25.9: - dependencies: - sourcemap-codec: 1.4.8 - - masto@6.8.0: - dependencies: - change-case: 4.1.2 - events-to-async: 2.0.1 - isomorphic-ws: 5.0.0(ws@8.17.1) - ts-custom-error: 3.3.1 - ws: 8.17.1 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - mdn-data@2.0.30: {} - - merge-anything@5.1.7: - dependencies: - is-what: 4.1.16 - - merge2@1.4.1: {} - - micromatch@4.0.7: - dependencies: - braces: 3.0.3 - picomatch: 2.3.1 - - mime@3.0.0: {} - - miniflare@3.20240701.0: - dependencies: - '@cspotcode/source-map-support': 0.8.1 - acorn: 8.12.0 - acorn-walk: 8.3.3 - capnp-ts: 0.7.0 - exit-hook: 2.2.1 - glob-to-regexp: 0.4.1 - stoppable: 1.1.0 - undici: 5.28.4 - workerd: 1.20240701.0 - ws: 8.17.1 - youch: 3.3.3 - zod: 3.23.8 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.11 - - minimatch@5.1.6: - dependencies: - brace-expansion: 2.0.1 - - ms@2.1.2: {} - - mustache@4.2.0: {} - - nanoid@3.3.7: {} - - nanostores@0.9.5: {} - - no-case@3.0.4: - dependencies: - lower-case: 2.0.2 - tslib: 2.6.3 - - node-fetch-native@1.6.4: {} - - node-forge@1.3.1: {} - - node-releases@2.0.14: {} - - normalize-path@3.0.0: {} - - object-inspect@1.13.2: {} - - object-keys@1.1.1: {} - - object.assign@4.1.5: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - has-symbols: 1.0.3 - object-keys: 1.1.1 - - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - param-case@3.0.4: - dependencies: - dot-case: 3.0.4 - tslib: 2.6.3 - - pascal-case@3.1.2: - dependencies: - no-case: 3.0.4 - tslib: 2.6.3 - - path-case@3.0.4: - dependencies: - dot-case: 3.0.4 - tslib: 2.6.3 - - path-is-absolute@1.0.1: {} - - path-parse@1.0.7: {} - - path-to-regexp@6.2.2: {} - - pathe@1.1.2: {} - - picocolors@1.0.1: {} - - picomatch@2.3.1: {} - - possible-typed-array-names@1.0.0: {} - - postcss@8.4.39: - dependencies: - nanoid: 3.3.7 - picocolors: 1.0.1 - source-map-js: 1.2.0 - - prettier@3.3.2: {} - - pretty-bytes@5.6.0: {} - - pretty-bytes@6.1.1: {} - - printable-characters@1.0.42: {} - - punycode@2.3.1: {} - - queue-microtask@1.2.3: {} - - randombytes@2.1.0: - dependencies: - safe-buffer: 5.2.1 - - readdirp@3.6.0: - dependencies: - picomatch: 2.3.1 - - regenerate-unicode-properties@10.1.1: - dependencies: - regenerate: 1.4.2 - - regenerate@1.4.2: {} - - regenerator-runtime@0.14.1: {} - - regenerator-transform@0.15.2: - dependencies: - '@babel/runtime': 7.24.8 - - regexp.prototype.flags@1.5.2: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-errors: 1.3.0 - set-function-name: 2.0.2 - - regexpu-core@5.3.2: - dependencies: - '@babel/regjsgen': 0.8.0 - regenerate: 1.4.2 - regenerate-unicode-properties: 10.1.1 - regjsparser: 0.9.1 - unicode-match-property-ecmascript: 2.0.0 - unicode-match-property-value-ecmascript: 2.1.0 - - regjsparser@0.9.1: - dependencies: - jsesc: 0.5.0 - - require-from-string@2.0.2: {} - - resolve.exports@2.0.2: {} - - resolve@1.22.8: - dependencies: - is-core-module: 2.14.0 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - reusify@1.0.4: {} - - rollup-plugin-inject@3.0.2: - dependencies: - estree-walker: 0.6.1 - magic-string: 0.25.9 - rollup-pluginutils: 2.8.2 - - rollup-plugin-node-polyfills@0.2.1: - dependencies: - rollup-plugin-inject: 3.0.2 - - rollup-pluginutils@2.8.2: - dependencies: - estree-walker: 0.6.1 - - rollup@2.79.1: - optionalDependencies: - fsevents: 2.3.3 - - rollup@4.18.0: - dependencies: - '@types/estree': 1.0.5 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.18.0 - '@rollup/rollup-android-arm64': 4.18.0 - '@rollup/rollup-darwin-arm64': 4.18.0 - '@rollup/rollup-darwin-x64': 4.18.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.18.0 - '@rollup/rollup-linux-arm-musleabihf': 4.18.0 - '@rollup/rollup-linux-arm64-gnu': 4.18.0 - '@rollup/rollup-linux-arm64-musl': 4.18.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.18.0 - '@rollup/rollup-linux-riscv64-gnu': 4.18.0 - '@rollup/rollup-linux-s390x-gnu': 4.18.0 - '@rollup/rollup-linux-x64-gnu': 4.18.0 - '@rollup/rollup-linux-x64-musl': 4.18.0 - '@rollup/rollup-win32-arm64-msvc': 4.18.0 - '@rollup/rollup-win32-ia32-msvc': 4.18.0 - '@rollup/rollup-win32-x64-msvc': 4.18.0 - fsevents: 2.3.3 - - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - - safe-array-concat@1.1.2: - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - isarray: 2.0.5 - - safe-buffer@5.2.1: {} - - safe-regex-test@1.0.3: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-regex: 1.1.4 - - selfsigned@2.4.1: - dependencies: - '@types/node-forge': 1.3.11 - node-forge: 1.3.1 - - semver@6.3.1: {} - - sentence-case@3.0.4: - dependencies: - no-case: 3.0.4 - tslib: 2.6.3 - upper-case-first: 2.0.2 - - serialize-javascript@6.0.2: - dependencies: - randombytes: 2.1.0 - - seroval-plugins@1.0.7(seroval@1.0.7): - dependencies: - seroval: 1.0.7 - - seroval@1.0.7: {} - - set-function-length@1.2.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - - set-function-name@2.0.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - - side-channel@1.0.6: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - object-inspect: 1.13.2 - - smob@1.5.0: {} - - snake-case@3.0.4: - dependencies: - dot-case: 3.0.4 - tslib: 2.6.3 - - solid-js@1.8.18: - dependencies: - csstype: 3.1.3 - seroval: 1.0.7 - seroval-plugins: 1.0.7(seroval@1.0.7) - - solid-refresh@0.6.3(solid-js@1.8.18): - dependencies: - '@babel/generator': 7.24.7 - '@babel/helper-module-imports': 7.24.7 - '@babel/types': 7.24.7 - solid-js: 1.8.18 - transitivePeerDependencies: - - supports-color - - solid-styled@0.11.1(solid-js@1.8.18): - dependencies: - '@babel/core': 7.24.7 - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - '@types/css-tree': 2.3.8 - browserslist: 4.23.1 - css-tree: 2.3.1 - lightningcss: 1.25.1 - solid-js: 1.8.18 - transitivePeerDependencies: - - supports-color - - source-map-js@1.2.0: {} - - source-map-support@0.5.21: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - - source-map@0.6.1: {} - - source-map@0.8.0-beta.0: - dependencies: - whatwg-url: 7.1.0 - - sourcemap-codec@1.4.8: {} - - stacktracey@2.1.8: - dependencies: - as-table: 1.0.55 - get-source: 2.0.12 - - stoppable@1.1.0: {} - - string.prototype.matchall@4.0.11: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.4 - gopd: 1.0.1 - has-symbols: 1.0.3 - internal-slot: 1.0.7 - regexp.prototype.flags: 1.5.2 - set-function-name: 2.0.2 - side-channel: 1.0.6 - - string.prototype.trim@1.2.9: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - - string.prototype.trimend@1.0.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - - string.prototype.trimstart@1.0.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - - stringify-object@3.3.0: - dependencies: - get-own-enumerable-property-symbols: 3.0.2 - is-obj: 1.0.1 - is-regexp: 1.0.0 - - strip-comments@2.0.1: {} - - supports-color@5.5.0: - dependencies: - has-flag: 3.0.0 - - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - - supports-preserve-symlinks-flag@1.0.0: {} - - temp-dir@2.0.0: {} - - tempy@0.6.0: - dependencies: - is-stream: 2.0.1 - temp-dir: 2.0.0 - type-fest: 0.16.0 - unique-string: 2.0.0 - - terser@5.31.2: - dependencies: - '@jridgewell/source-map': 0.3.6 - acorn: 8.12.0 - commander: 2.20.3 - source-map-support: 0.5.21 - - to-fast-properties@2.0.0: {} - - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - - tr46@1.0.1: - dependencies: - punycode: 2.3.1 - - ts-custom-error@3.3.1: {} - - tslib@2.6.3: {} - - type-fest@0.16.0: {} - - typed-array-buffer@1.0.2: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-typed-array: 1.1.13 - - typed-array-byte-length@1.0.1: - dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - - typed-array-byte-offset@1.0.2: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - - typed-array-length@1.0.6: - dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - possible-typed-array-names: 1.0.0 - - typescript@5.5.2: {} - - ufo@1.5.3: {} - - unbox-primitive@1.0.2: - dependencies: - call-bind: 1.0.7 - has-bigints: 1.0.2 - has-symbols: 1.0.3 - which-boxed-primitive: 1.0.2 - - undici-types@5.26.5: {} - - undici@5.28.4: - dependencies: - '@fastify/busboy': 2.1.1 - - unenv-nightly@1.10.0-1717606461.a117952: - dependencies: - consola: 3.2.3 - defu: 6.1.4 - mime: 3.0.0 - node-fetch-native: 1.6.4 - pathe: 1.1.2 - ufo: 1.5.3 - - unicode-canonical-property-names-ecmascript@2.0.0: {} - - unicode-match-property-ecmascript@2.0.0: - dependencies: - unicode-canonical-property-names-ecmascript: 2.0.0 - unicode-property-aliases-ecmascript: 2.1.0 - - unicode-match-property-value-ecmascript@2.1.0: {} - - unicode-property-aliases-ecmascript@2.1.0: {} - - unique-string@2.0.0: - dependencies: - crypto-random-string: 2.0.0 - - universalify@2.0.1: {} - - unplugin-solid-styled@0.11.1(rollup@2.79.1)(solid-styled@0.11.1(solid-js@1.8.18))(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)): - dependencies: - '@rollup/pluginutils': 5.1.0(rollup@2.79.1) - solid-styled: 0.11.1(solid-js@1.8.18) - unplugin: 1.11.0 - optionalDependencies: - vite: 5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2) - transitivePeerDependencies: - - rollup - - unplugin@1.11.0: - dependencies: - acorn: 8.12.0 - chokidar: 3.6.0 - webpack-sources: 3.2.3 - webpack-virtual-modules: 0.6.2 - - upath@1.2.0: {} - - update-browserslist-db@1.0.16(browserslist@4.23.1): - dependencies: - browserslist: 4.23.1 - escalade: 3.1.2 - picocolors: 1.0.1 - - upper-case-first@2.0.2: - dependencies: - tslib: 2.6.3 - - upper-case@2.0.2: - dependencies: - tslib: 2.6.3 - - validate-html-nesting@1.2.2: {} - - vite-plugin-package-version@1.1.0(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)): - dependencies: - vite: 5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2) - - vite-plugin-pwa@0.20.0(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.1.0): - dependencies: - debug: 4.3.5 - fast-glob: 3.3.2 - pretty-bytes: 6.1.1 - vite: 5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2) - workbox-build: 7.1.1(@types/babel__core@7.20.5) - workbox-window: 7.1.0 - transitivePeerDependencies: - - supports-color - - vite-plugin-solid-styled@0.11.1(rollup@2.79.1)(solid-styled@0.11.1(solid-js@1.8.18))(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)): - dependencies: - solid-styled: 0.11.1(solid-js@1.8.18) - unplugin-solid-styled: 0.11.1(rollup@2.79.1)(solid-styled@0.11.1(solid-js@1.8.18))(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)) - vite: 5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2) - transitivePeerDependencies: - - rollup - - vite-plugin-solid@2.10.2(solid-js@1.8.18)(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)): - dependencies: - '@babel/core': 7.24.7 - '@types/babel__core': 7.20.5 - babel-preset-solid: 1.8.18(@babel/core@7.24.7) - merge-anything: 5.1.7 - solid-js: 1.8.18 - solid-refresh: 0.6.3(solid-js@1.8.18) - vite: 5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2) - vitefu: 0.2.5(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)) - transitivePeerDependencies: - - supports-color - - vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2): - dependencies: - esbuild: 0.21.5 - postcss: 8.4.39 - rollup: 4.18.0 - optionalDependencies: - '@types/node': 20.14.10 - fsevents: 2.3.3 - lightningcss: 1.25.1 - terser: 5.31.2 - - vitefu@0.2.5(vite@5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2)): - optionalDependencies: - vite: 5.3.2(@types/node@20.14.10)(lightningcss@1.25.1)(terser@5.31.2) - - webidl-conversions@4.0.2: {} - - webpack-sources@3.2.3: {} - - webpack-virtual-modules@0.6.2: {} - - whatwg-url@7.1.0: - dependencies: - lodash.sortby: 4.7.0 - tr46: 1.0.1 - webidl-conversions: 4.0.2 - - which-boxed-primitive@1.0.2: - dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.7 - is-string: 1.0.7 - is-symbol: 1.0.4 - - which-typed-array@1.1.15: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.2 - - workbox-background-sync@7.1.0: - dependencies: - idb: 7.1.1 - workbox-core: 7.1.0 - - workbox-broadcast-update@7.1.0: - dependencies: - workbox-core: 7.1.0 - - workbox-build@7.1.1(@types/babel__core@7.20.5): - dependencies: - '@apideck/better-ajv-errors': 0.3.6(ajv@8.17.1) - '@babel/core': 7.24.7 - '@babel/preset-env': 7.24.8(@babel/core@7.24.7) - '@babel/runtime': 7.24.8 - '@rollup/plugin-babel': 5.3.1(@babel/core@7.24.7)(@types/babel__core@7.20.5)(rollup@2.79.1) - '@rollup/plugin-node-resolve': 15.2.3(rollup@2.79.1) - '@rollup/plugin-replace': 2.4.2(rollup@2.79.1) - '@rollup/plugin-terser': 0.4.4(rollup@2.79.1) - '@surma/rollup-plugin-off-main-thread': 2.2.3 - ajv: 8.17.1 - common-tags: 1.8.2 - fast-json-stable-stringify: 2.1.0 - fs-extra: 9.1.0 - glob: 7.2.3 - lodash: 4.17.21 - pretty-bytes: 5.6.0 - rollup: 2.79.1 - source-map: 0.8.0-beta.0 - stringify-object: 3.3.0 - strip-comments: 2.0.1 - tempy: 0.6.0 - upath: 1.2.0 - workbox-background-sync: 7.1.0 - workbox-broadcast-update: 7.1.0 - workbox-cacheable-response: 7.1.0 - workbox-core: 7.1.0 - workbox-expiration: 7.1.0 - workbox-google-analytics: 7.1.0 - workbox-navigation-preload: 7.1.0 - workbox-precaching: 7.1.0 - workbox-range-requests: 7.1.0 - workbox-recipes: 7.1.0 - workbox-routing: 7.1.0 - workbox-strategies: 7.1.0 - workbox-streams: 7.1.0 - workbox-sw: 7.1.0 - workbox-window: 7.1.0 - transitivePeerDependencies: - - '@types/babel__core' - - supports-color - - workbox-cacheable-response@7.1.0: - dependencies: - workbox-core: 7.1.0 - - workbox-core@7.1.0: {} - - workbox-expiration@7.1.0: - dependencies: - idb: 7.1.1 - workbox-core: 7.1.0 - - workbox-google-analytics@7.1.0: - dependencies: - workbox-background-sync: 7.1.0 - workbox-core: 7.1.0 - workbox-routing: 7.1.0 - workbox-strategies: 7.1.0 - - workbox-navigation-preload@7.1.0: - dependencies: - workbox-core: 7.1.0 - - workbox-precaching@7.1.0: - dependencies: - workbox-core: 7.1.0 - workbox-routing: 7.1.0 - workbox-strategies: 7.1.0 - - workbox-range-requests@7.1.0: - dependencies: - workbox-core: 7.1.0 - - workbox-recipes@7.1.0: - dependencies: - workbox-cacheable-response: 7.1.0 - workbox-core: 7.1.0 - workbox-expiration: 7.1.0 - workbox-precaching: 7.1.0 - workbox-routing: 7.1.0 - workbox-strategies: 7.1.0 - - workbox-routing@7.1.0: - dependencies: - workbox-core: 7.1.0 - - workbox-strategies@7.1.0: - dependencies: - workbox-core: 7.1.0 - - workbox-streams@7.1.0: - dependencies: - workbox-core: 7.1.0 - workbox-routing: 7.1.0 - - workbox-sw@7.1.0: {} - - workbox-window@7.1.0: - dependencies: - '@types/trusted-types': 2.0.7 - workbox-core: 7.1.0 - - workerd@1.20240701.0: - optionalDependencies: - '@cloudflare/workerd-darwin-64': 1.20240701.0 - '@cloudflare/workerd-darwin-arm64': 1.20240701.0 - '@cloudflare/workerd-linux-64': 1.20240701.0 - '@cloudflare/workerd-linux-arm64': 1.20240701.0 - '@cloudflare/workerd-windows-64': 1.20240701.0 - - wrangler@3.64.0: - dependencies: - '@cloudflare/kv-asset-handler': 0.3.4 - '@esbuild-plugins/node-globals-polyfill': 0.2.3(esbuild@0.17.19) - '@esbuild-plugins/node-modules-polyfill': 0.2.2(esbuild@0.17.19) - blake3-wasm: 2.1.5 - chokidar: 3.6.0 - date-fns: 3.6.0 - esbuild: 0.17.19 - miniflare: 3.20240701.0 - nanoid: 3.3.7 - path-to-regexp: 6.2.2 - resolve: 1.22.8 - resolve.exports: 2.0.2 - selfsigned: 2.4.1 - source-map: 0.6.1 - unenv: unenv-nightly@1.10.0-1717606461.a117952 - xxhash-wasm: 1.0.2 - optionalDependencies: - fsevents: 2.3.3 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - wrappy@1.0.2: {} - - ws@8.17.1: {} - - xxhash-wasm@1.0.2: {} - - yallist@3.1.1: {} - - youch@3.3.3: - dependencies: - cookie: 0.5.0 - mustache: 4.2.0 - stacktracey: 2.1.8 - - zod@3.23.8: {} From f06a7a6da1bc70d15110e5e6e004ca744c42dbc7 Mon Sep 17 00:00:00 2001 From: thislight Date: Mon, 5 Aug 2024 15:11:22 +0800 Subject: [PATCH 037/300] timelines: workaround to a bug moves the panels --- src/timelines/Home.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/timelines/Home.tsx b/src/timelines/Home.tsx index c70cf39..509a2f1 100644 --- a/src/timelines/Home.tsx +++ b/src/timelines/Home.tsx @@ -229,7 +229,7 @@ const Home: ParentComponent = (props) => { const onTabClick = (idx: number) => { const items = panelList.querySelectorAll(".tab-panel"); if (items.length > idx) { - items.item(idx).scrollIntoView({ block: "nearest", behavior: "smooth" }); + items.item(idx).scrollIntoView({ block: "start", behavior: "smooth" }); } }; From 91999a63033f63e96a86652add3828924055a1e1 Mon Sep 17 00:00:00 2001 From: thislight Date: Mon, 5 Aug 2024 15:11:22 +0800 Subject: [PATCH 038/300] timelines: workaround to a bug moves the panels --- src/timelines/Home.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/timelines/Home.tsx b/src/timelines/Home.tsx index c70cf39..509a2f1 100644 --- a/src/timelines/Home.tsx +++ b/src/timelines/Home.tsx @@ -229,7 +229,7 @@ const Home: ParentComponent = (props) => { const onTabClick = (idx: number) => { const items = panelList.querySelectorAll(".tab-panel"); if (items.length > idx) { - items.item(idx).scrollIntoView({ block: "nearest", behavior: "smooth" }); + items.item(idx).scrollIntoView({ block: "start", behavior: "smooth" }); } }; From 93b4cd065af0edc65b6c21dcff03d355ab0aca76 Mon Sep 17 00:00:00 2001 From: thislight Date: Mon, 5 Aug 2024 15:33:00 +0800 Subject: [PATCH 039/300] format code using prettier --- src/App.css | 2 +- src/accounts/MastodonOAuth2Callback.tsx | 30 +++-- src/accounts/SignIn.tsx | 6 +- src/accounts/stores.ts | 10 +- src/index.tsx | 8 +- src/masto/timelines.ts | 4 +- src/material/BottomSheet.module.css | 4 +- src/material/BottomSheet.tsx | 8 +- src/material/Button.tsx | 4 +- src/material/cards.module.css | 9 +- src/material/form.module.css | 106 +++++++++-------- src/material/material.module.css | 35 +++--- src/material/mui.ts | 21 ++-- src/material/theme.css | 25 ++-- src/material/typography.tsx | 34 +++--- src/platform/anim.ts | 10 +- src/settings/stores.ts | 18 +-- src/timelines/CompactToot.tsx | 10 +- src/timelines/Home.tsx | 21 +++- src/timelines/MediaAttachmentGrid.tsx | 2 +- src/timelines/MediaViewer.tsx | 10 +- src/timelines/ProfileMenuButton.tsx | 150 ++++++++++++------------ src/timelines/RegularToot.tsx | 2 +- src/timelines/TootBottomSheet.tsx | 7 +- src/timelines/TootThread.tsx | 9 +- src/timelines/toot.module.css | 21 ++-- src/utils.tsx | 20 ++-- 27 files changed, 326 insertions(+), 260 deletions(-) diff --git a/src/App.css b/src/App.css index bba585f..b912c3a 100644 --- a/src/App.css +++ b/src/App.css @@ -9,4 +9,4 @@ .custom-emoji { width: 1.25em; -} \ No newline at end of file +} diff --git a/src/accounts/MastodonOAuth2Callback.tsx b/src/accounts/MastodonOAuth2Callback.tsx index 2b34af9..249c58f 100644 --- a/src/accounts/MastodonOAuth2Callback.tsx +++ b/src/accounts/MastodonOAuth2Callback.tsx @@ -44,12 +44,12 @@ const MastodonOAuth2Callback: Component = () => { setDocumentTitle(`Back from ${ins.title}...`); setSiteTitle(ins.title); - const srcset = [] + const srcset = []; if (ins.thumbnail.versions["@1x"]) { - srcset.push(`${ins.thumbnail.versions["@1x"]} 1x`) + srcset.push(`${ins.thumbnail.versions["@1x"]} 1x`); } if (ins.thumbnail.versions["@2x"]) { - srcset.push(`${ins.thumbnail.versions["@2x"]} 2x`) + srcset.push(`${ins.thumbnail.versions["@2x"]} 2x`); } setSiteImg({ @@ -66,8 +66,8 @@ const MastodonOAuth2Callback: Component = () => { onGoingOAuth2Process, params.code, ); - $settings.setKey('onGoingOAuth2Process', undefined) - navigate('/', {replace: true}) + $settings.setKey("onGoingOAuth2Process", undefined); + navigate("/", { replace: true }); return; } @@ -95,18 +95,27 @@ const MastodonOAuth2Callback: Component = () => {
    - }> + + } + > {`Banner @@ -114,7 +123,8 @@ const MastodonOAuth2Callback: Component = () => { Contracting {siteTitle}...

    - If this page stays too long, you can close this page and sign in again. + If this page stays too long, you can close this page and sign in + again.

    diff --git a/src/accounts/SignIn.tsx b/src/accounts/SignIn.tsx index 0d0cf94..bd6c95b 100644 --- a/src/accounts/SignIn.tsx +++ b/src/accounts/SignIn.tsx @@ -69,8 +69,8 @@ const SignIn: Component = () => { }); onMount(() => { - $settings.setKey('onGoingOAuth2Process', undefined) - }) + $settings.setKey("onGoingOAuth2Process", undefined); + }); const onStartOAuth2 = async (e: Event) => { e.preventDefault(); @@ -107,7 +107,7 @@ const SignIn: Component = () => { for (const [k, v] of Object.entries(args)) { searches.set(k, v); } - $settings.setKey("onGoingOAuth2Process", url) + $settings.setKey("onGoingOAuth2Process", url); window.location.href = authStart.toString(); } catch (e) { setServerUrlHelperText( diff --git a/src/accounts/stores.ts b/src/accounts/stores.ts index 9668d2a..d34a420 100644 --- a/src/accounts/stores.ts +++ b/src/accounts/stores.ts @@ -95,9 +95,13 @@ export const updateAcctInf = action( }, ); -export const signOut = action($accounts, "signOut", ($store, predicate: (acct: Account) => boolean) => { - $store.set($store.get().filter(a => !predicate(a))); -}); +export const signOut = action( + $accounts, + "signOut", + ($store, predicate: (acct: Account) => boolean) => { + $store.set($store.get().filter((a) => !predicate(a))); + }, +); export type RegisteredApp = { site: string; diff --git a/src/index.tsx b/src/index.tsx index 9430fe8..0b9e3a9 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,5 +1,5 @@ -import {render} from 'solid-js/web' -import App from './App.js' -import "./material/theme.css" +import { render } from "solid-js/web"; +import App from "./App.js"; +import "./material/theme.css"; -render(() => , document.getElementById("root")!) +render(() => , document.getElementById("root")!); diff --git a/src/masto/timelines.ts b/src/masto/timelines.ts index a2e7b21..91e1d84 100644 --- a/src/masto/timelines.ts +++ b/src/masto/timelines.ts @@ -12,9 +12,7 @@ type Timeline = { }): mastodon.Paginator; }; -export function useTimeline( - timeline: Accessor, -) { +export function useTimeline(timeline: Accessor) { let minId: string | undefined; let maxId: string | undefined; let otl: Timeline | undefined; diff --git a/src/material/BottomSheet.module.css b/src/material/BottomSheet.module.css index 1a15849..1f428c8 100644 --- a/src/material/BottomSheet.module.css +++ b/src/material/BottomSheet.module.css @@ -1,5 +1,5 @@ .bottomSheet { - composes: surface from 'material.module.css'; + composes: surface from "material.module.css"; border: none; position: absolute; left: 50%; @@ -29,4 +29,4 @@ height: 100dvh; } } -} \ No newline at end of file +} diff --git a/src/material/BottomSheet.tsx b/src/material/BottomSheet.tsx index 112a17e..eeefcc5 100644 --- a/src/material/BottomSheet.tsx +++ b/src/material/BottomSheet.tsx @@ -1,5 +1,5 @@ import { createEffect, type ParentComponent } from "solid-js"; -import styles from './BottomSheet.module.css' +import styles from "./BottomSheet.module.css"; export type BottomSheetProps = { open?: boolean; @@ -20,7 +20,11 @@ const BottomSheet: ParentComponent = (props) => { } }); - return {props.children}; + return ( + + {props.children} + + ); }; export default BottomSheet; diff --git a/src/material/Button.tsx b/src/material/Button.tsx index 7b0051d..1e08e41 100644 --- a/src/material/Button.tsx +++ b/src/material/Button.tsx @@ -9,12 +9,12 @@ import materialStyles from "./material.module.css"; const Button: Component> = ( props, ) => { - const [managed, passthough] = splitProps(props, ["class", 'type']); + const [managed, passthough] = splitProps(props, ["class", "type"]); const classes = () => managed.class ? [materialStyles.button, managed.class].join(" ") : materialStyles.button; - const type = () => managed.type ?? 'button' + const type = () => managed.type ?? "button"; return ; }; diff --git a/src/material/cards.module.css b/src/material/cards.module.css index b5966e3..2b1cc41 100644 --- a/src/material/cards.module.css +++ b/src/material/cards.module.css @@ -1,5 +1,5 @@ .card { - composes: surface from 'material.module.css'; + composes: surface from "material.module.css"; border-radius: 2px; box-shadow: var(--tutu-shadow-e2); transition: var(--tutu-transition-shadow); @@ -12,7 +12,7 @@ } &:not(.manualMargin) { - &>:not(.cardNoPad) { + & > :not(.cardNoPad) { margin-inline: var(--card-pad, 20px); } @@ -20,7 +20,7 @@ margin-top: var(--card-gut, 20px); } - >.cardGutSkip+*:not(.cardGutSkip) { + > .cardGutSkip + *:not(.cardGutSkip) { margin-top: var(--card-gut, 20px); } @@ -28,7 +28,6 @@ margin-bottom: var(--card-gut, 20px); } } - } .layoutCentered { @@ -52,4 +51,4 @@ overflow: auto; } } -} \ No newline at end of file +} diff --git a/src/material/form.module.css b/src/material/form.module.css index 5e7dfb7..1fde099 100644 --- a/src/material/form.module.css +++ b/src/material/form.module.css @@ -1,5 +1,5 @@ .textfield { - composes: touchTarget from 'material.module.css'; + composes: touchTarget from "material.module.css"; --border-color: var(--tutu-color-inactive-on-surface); --active-border-color: var(--tutu-color-primary); @@ -7,74 +7,78 @@ --active-label-color: var(--tutu-color-primary); --helper-text-color: var(--tutu-color-inactive-on-surface); - &>* { - width: 100%; + & > * { + width: 100%; } - &.error, &:has(>input[aria-invalid="true"]) { - &:not(:focus-within) { - --border-color: var(--tutu-color-error-on-surface); - --label-color: var(--tutu-color-error-on-surface); - --helper-text-color: var(--tutu-color-error-on-surface); - } + &.error, + &:has(> input[aria-invalid="true"]) { + &:not(:focus-within) { + --border-color: var(--tutu-color-error-on-surface); + --label-color: var(--tutu-color-error-on-surface); + --helper-text-color: var(--tutu-color-error-on-surface); + } - &:focus-within { - --helper-text-color: var(--tutu-color-error-on-surface); - } + &:focus-within { + --helper-text-color: var(--tutu-color-error-on-surface); + } } - position: relative; - &>label { - position: absolute; - left: 0; - bottom: calc(10px + var(--bottom-height, 0px)); - color: var(--label-color); - transition: bottom .2s ease-in-out, font-size .2s ease-in-out, color .2s ease-in-out; - cursor: text; - font-size: 0.8125rem; + & > label { + position: absolute; + left: 0; + bottom: calc(10px + var(--bottom-height, 0px)); + color: var(--label-color); + transition: + bottom 0.2s ease-in-out, + font-size 0.2s ease-in-out, + color 0.2s ease-in-out; + cursor: text; + font-size: 0.8125rem; } - &>label:has(+ input:not(:placeholder-shown)) { - bottom: calc(100% - 0.8125rem); + & > label:has(+ input:not(:placeholder-shown)) { + bottom: calc(100% - 0.8125rem); } - &:focus-within>label, &.float-label>label { - bottom: calc(100% - 0.8125rem); - color: var(--active-label-color); + &:focus-within > label, + &.float-label > label { + bottom: calc(100% - 0.8125rem); + color: var(--active-label-color); } - &>input[type='text'], - &>input[type='password'] { - border: none; - outline: none; - border-bottom: 1px solid var(--border-color); - background-color: transparent; - padding-top: 16px; - padding-bottom: 8px; - margin-bottom: 1px; - transition: border-color .2s ease-in-out; + & > input[type="text"], + & > input[type="password"] { + border: none; + outline: none; + border-bottom: 1px solid var(--border-color); + background-color: transparent; + padding-top: 16px; + padding-bottom: 8px; + margin-bottom: 1px; + transition: border-color 0.2s ease-in-out; - &:focus { - border-bottom: 2px solid var(--active-border-color); - margin-bottom: 0; - } + &:focus { + border-bottom: 2px solid var(--active-border-color); + margin-bottom: 0; + } } &.withHelperText { - --bottom-height: 0.8125rem; + --bottom-height: 0.8125rem; } & .helperText { - color: var(--helper-text-color); - font-size: 0.8125rem; - line-height: 100%; - -webkit-line-clamp: 1; - line-clamp: 1; - display: flex; - justify-content: space-between; - min-height: 0.8125rem; - cursor: auto; + color: var(--helper-text-color); + font-size: 0.8125rem; + line-height: 100%; + -webkit-line-clamp: 1; + line-clamp: 1; + display: flex; + justify-content: space-between; + min-height: 0.8125rem; + cursor: auto; } -} \ No newline at end of file +} diff --git a/src/material/material.module.css b/src/material/material.module.css index d51a179..3443756 100644 --- a/src/material/material.module.css +++ b/src/material/material.module.css @@ -10,7 +10,7 @@ } .button { - composes: buttonText from './typography.module.css'; + composes: buttonText from "./typography.module.css"; composes: touchTarget; border: none; @@ -18,28 +18,34 @@ color: var(--tutu-color-primary); font-family: inherit; - &:focus,&:hover,&:focus-visible { - background-color: var(--tutu-color-surface-dd); + &:focus, + &:hover, + &:focus-visible { + background-color: var(--tutu-color-surface-dd); } &.pressed { - background-color: var(--tutu-color-surface-d); + background-color: var(--tutu-color-surface-d); } &.raised { - background-color: var(--tutu-color-primary); - color: var(--tutu-color-on-primary); + background-color: var(--tutu-color-primary); + color: var(--tutu-color-on-primary); } - &:disabled, &[aria-disabled]:not([aria-disabled="false"]) { - color: #9e9e9e; + &:disabled, + &[aria-disabled]:not([aria-disabled="false"]) { + color: #9e9e9e; - &:focus,&:hover,&:focus-visible { - background-color: transparent; - } + &:focus, + &:hover, + &:focus-visible { + background-color: transparent; + } } - .toolbar &, .appbar & { + .toolbar &, + .appbar & { height: 100%; margin-block: 0; padding-block: 0; @@ -49,7 +55,9 @@ .appbar & { color: var(--tutu-color-on-primary); - &:focus,&:hover,&:focus-visible { + &:focus, + &:hover, + &:focus-visible { background-color: var(--tutu-color-primary-ll); } @@ -62,4 +70,3 @@ color: var(--tutu-color-on-surface); } } - diff --git a/src/material/mui.ts b/src/material/mui.ts index 15511ac..6527cc4 100644 --- a/src/material/mui.ts +++ b/src/material/mui.ts @@ -2,15 +2,16 @@ import { Theme, createTheme } from "@suid/material/styles"; import { deepPurple, amber } from "@suid/material/colors"; import { Accessor } from "solid-js"; -export function useRootTheme() : Accessor { - return () => createTheme({ - palette: { - primary: { - main: deepPurple[500] +export function useRootTheme(): Accessor { + return () => + createTheme({ + palette: { + primary: { + main: deepPurple[500], + }, + secondary: { + main: amber.A200, + }, }, - secondary: { - main: amber.A200 - } - } - }) + }); } diff --git a/src/material/theme.css b/src/material/theme.css index 5d26879..76bfab4 100644 --- a/src/material/theme.css +++ b/src/material/theme.css @@ -1,5 +1,6 @@ :root, -[lang^="en"], [lang="en"] { +[lang^="en"], +[lang="en"] { --md-typography-type: "regular"; --title-size: 1.25rem; --title-weight: 500; @@ -19,9 +20,12 @@ } } -[lang^="zh"], [lang="zh"], -[lang^="kr"], [lang="kr"], -[lang^="ja"], [lang="ja"] { +[lang^="zh"], +[lang="zh"], +[lang^="kr"], +[lang="kr"], +[lang^="ja"], +[lang="ja"] { --md-typography-type: "dense"; --title-size: 1.4375rem; --subheading-size: 1.1875rem; @@ -95,7 +99,6 @@ --tutu-anim-curve-sharp: cubic-bezier(0.4, 0, 0.6, 1); @media (max-width: 300px) { - /* XS screen, like wearables */ & { --tutu-transition-shadow: box-shadow 157.5ms var(--tutu-anim-curve-std); @@ -103,7 +106,6 @@ } @media (max-width: 600px) { - /* Mobile */ & { --tutu-transition-shadow: box-shadow 225ms var(--tutu-anim-curve-std); @@ -111,7 +113,6 @@ } @media (max-width: 1200px) { - /* Tablet */ & { --tutu-transition-shadow: box-shadow 292.5ms var(--tutu-anim-curve-std); @@ -125,11 +126,17 @@ } * { - font-family: Roboto, "Noto Sans", system-ui, -apple-system, BlinkMacSystemFont, sans-serif; + font-family: + Roboto, + "Noto Sans", + system-ui, + -apple-system, + BlinkMacSystemFont, + sans-serif; box-sizing: border-box; margin: 0; } body { font-size: var(--body-size, 1rem); -} \ No newline at end of file +} diff --git a/src/material/typography.tsx b/src/material/typography.tsx index 2121266..2ea0fd3 100644 --- a/src/material/typography.tsx +++ b/src/material/typography.tsx @@ -3,7 +3,7 @@ import { Dynamic } from "solid-js/web"; import typography from "./typography.module.css"; import { mergeClass } from "../utils"; -type AnyElement = keyof JSX.IntrinsicElements | ParentComponent +type AnyElement = keyof JSX.IntrinsicElements | ParentComponent; type PropsOf = E extends ParentComponent @@ -12,9 +12,7 @@ type PropsOf = ? JSX.IntrinsicElements[E] : JSX.HTMLAttributes; -export type TypographyProps< - E extends AnyElement, -> = { +export type TypographyProps = { ref?: Ref; component?: E; class?: string; @@ -33,7 +31,9 @@ type TypographyKind = | "caption" | "buttonText"; -export function Typography(props: {typography: TypographyKind } & TypographyProps) { +export function Typography( + props: { typography: TypographyKind } & TypographyProps, +) { const [managed, passthough] = splitProps(props, [ "ref", "component", @@ -50,38 +50,38 @@ export function Typography(props: {typography: TypographyK {...passthough} > ); -}; +} export function Display4(props: TypographyProps) { - return + return ; } export function Display3(props: TypographyProps) { - return + return ; } export function Display2(props: TypographyProps) { - return + return ; } export function Display1(props: TypographyProps) { - return + return ; } export function Headline(props: TypographyProps) { - return + return ; } export function Title(props: TypographyProps) { - return + return ; } export function Subheading(props: TypographyProps) { - return + return ; } export function Body1(props: TypographyProps) { - return + return ; } export function Body2(props: TypographyProps) { - return + return ; } export function Caption(props: TypographyProps) { - return + return ; } export function ButtonText(props: TypographyProps) { - return + return ; } diff --git a/src/platform/anim.ts b/src/platform/anim.ts index eead57a..75446ef 100644 --- a/src/platform/anim.ts +++ b/src/platform/anim.ts @@ -1,11 +1,13 @@ import { createContext, useContext, type Accessor } from "solid-js"; -export type HeroSource = {[key: string | symbol | number]: HTMLElement | undefined} +export type HeroSource = { + [key: string | symbol | number]: HTMLElement | undefined; +}; -const HeroSourceContext = createContext>(() => ({})) +const HeroSourceContext = createContext>(() => ({})); -export const HeroSourceProvider = HeroSourceContext.Provider +export const HeroSourceProvider = HeroSourceContext.Provider; export function useHeroSource() { - return useContext(HeroSourceContext) + return useContext(HeroSourceContext); } diff --git a/src/settings/stores.ts b/src/settings/stores.ts index d3ddc24..25f6484 100644 --- a/src/settings/stores.ts +++ b/src/settings/stores.ts @@ -1,11 +1,15 @@ import { persistentMap } from "@nanostores/persistent"; type Settings = { - onGoingOAuth2Process?: string - prefetchTootsDisabled?: boolean -} + onGoingOAuth2Process?: string; + prefetchTootsDisabled?: boolean; +}; -export const $settings = persistentMap("settings::", {}, { - encode: JSON.stringify, - decode: JSON.parse -}) +export const $settings = persistentMap( + "settings::", + {}, + { + encode: JSON.stringify, + decode: JSON.parse, + }, +); diff --git a/src/timelines/CompactToot.tsx b/src/timelines/CompactToot.tsx index b8db733..0d58b3d 100644 --- a/src/timelines/CompactToot.tsx +++ b/src/timelines/CompactToot.tsx @@ -18,16 +18,14 @@ const CompactToot: Component = (props) => { const toot = () => props.status; return (
    -
    +
    { appliedCustomEmoji( @@ -48,7 +46,7 @@ const CompactToot: Component = (props) => { ref={(e: { innerHTML: string }) => { appliedCustomEmoji(e, toot().content, toot().emojis); }} - class={[tootStyle.compactTootContent].join(' ')} + class={[tootStyle.compactTootContent].join(" ")} >
    ); diff --git a/src/timelines/Home.tsx b/src/timelines/Home.tsx index 509a2f1..44682e1 100644 --- a/src/timelines/Home.tsx +++ b/src/timelines/Home.tsx @@ -155,20 +155,20 @@ const Home: ParentComponent = (props) => { useDocumentTitle("Timelines"); const now = createTimeSource(); - const settings$ = useStore($settings) + const settings$ = useStore($settings); const sessions = useSessions(); const client = () => sessions()[0].client; const [profile] = useAcctProfile(client); const [panelOffset, setPanelOffset] = createSignal(0); - const prefetching = () => !settings$().prefetchTootsDisabled + const prefetching = () => !settings$().prefetchTootsDisabled; const [currentFocusOn, setCurrentFocusOn] = createSignal([]); const [focusRange, setFocusRange] = createSignal([0, 0] as readonly [ number, number, ]); - const child = children(() => props.children) + const child = children(() => props.children); let scrollEventLockReleased = true; @@ -269,7 +269,11 @@ const Home: ParentComponent = (props) => { - + Home @@ -282,7 +286,14 @@ const Home: ParentComponent = (props) => { - $settings.setKey("prefetchTootsDisabled", !$settings.get().prefetchTootsDisabled)}> + + $settings.setKey( + "prefetchTootsDisabled", + !$settings.get().prefetchTootsDisabled, + ) + } + > Prefetch Toots diff --git a/src/timelines/MediaAttachmentGrid.tsx b/src/timelines/MediaAttachmentGrid.tsx index f98df53..198de31 100644 --- a/src/timelines/MediaAttachmentGrid.tsx +++ b/src/timelines/MediaAttachmentGrid.tsx @@ -11,7 +11,7 @@ const MediaAttachmentGrid: Component<{ }> = (props) => { let rootRef: HTMLElement; const [viewerIndex, setViewerIndex] = createSignal(); - const viewerOpened = () => typeof viewerIndex() !== "undefined" + const viewerOpened = () => typeof viewerIndex() !== "undefined"; const gridTemplateColumns = () => { const l = props.attachments.length; if (l < 2) { diff --git a/src/timelines/MediaViewer.tsx b/src/timelines/MediaViewer.tsx index 5e73f4c..577dd12 100644 --- a/src/timelines/MediaViewer.tsx +++ b/src/timelines/MediaViewer.tsx @@ -36,7 +36,7 @@ function within(n: number, target: number, range: number) { } function clamp(input: number, min: number, max: number) { - return Math.min(Math.max(input, min), max) + return Math.min(Math.max(input, min), max); } const MediaViewer: ParentComponent = (props) => { @@ -207,7 +207,13 @@ const MediaViewer: ParentComponent = (props) => { move: number, idx: number, ) => { - const { ref, top: otop, left: oleft, scale: oscale, osize: [owidth, oheight] } = state[idx]; + const { + ref, + top: otop, + left: oleft, + scale: oscale, + osize: [owidth, oheight], + } = state[idx]; const [cx, cy] = center; const iy = clamp(cy - otop, 0, oheight), ix = clamp(cx - oleft, 0, owidth); // in image coordinate system diff --git a/src/timelines/ProfileMenuButton.tsx b/src/timelines/ProfileMenuButton.tsx index b997041..4fe8f04 100644 --- a/src/timelines/ProfileMenuButton.tsx +++ b/src/timelines/ProfileMenuButton.tsx @@ -8,7 +8,13 @@ import { Menu, MenuItem, } from "@suid/material"; -import { Show, createSignal, createUniqueId, type ParentComponent } from "solid-js"; +import { + ErrorBoundary, + Show, + createSignal, + createUniqueId, + type ParentComponent, +} from "solid-js"; import { Settings as SettingsIcon, Bookmark as BookmarkIcon, @@ -42,79 +48,79 @@ const ProfileMenuButton: ParentComponent<{ return ( <> - - - - - - - - - - + + + + + + + + + + - - - - - Bookmarks - - - - - - Likes - - - - - - Lists - - - - {props.children} + + + + + Bookmarks + + + + + + Likes + + + + + + Lists + - - - - - - Settings - - + + {props.children} + + + + + + + Settings + + ); }; diff --git a/src/timelines/RegularToot.tsx b/src/timelines/RegularToot.tsx index 7d9b694..28bc4d8 100644 --- a/src/timelines/RegularToot.tsx +++ b/src/timelines/RegularToot.tsx @@ -211,7 +211,7 @@ const RegularToot: Component = (props) => { classList={{ [tootStyle.toot]: true, [tootStyle.expanded]: managed.evaluated, - [managed.class || ""]: true + [managed.class || ""]: true, }} ref={rootRef!} lang={toot().language || managed.lang} diff --git a/src/timelines/TootBottomSheet.tsx b/src/timelines/TootBottomSheet.tsx index 0b40aa0..eb11704 100644 --- a/src/timelines/TootBottomSheet.tsx +++ b/src/timelines/TootBottomSheet.tsx @@ -1,8 +1,7 @@ import type { Component } from "solid-js"; - const TootBottomSheet: Component = (props) => { - return <> -} + return <>; +}; -export default TootBottomSheet +export default TootBottomSheet; diff --git a/src/timelines/TootThread.tsx b/src/timelines/TootThread.tsx index cf4c226..c23b8f4 100644 --- a/src/timelines/TootThread.tsx +++ b/src/timelines/TootThread.tsx @@ -38,7 +38,9 @@ const TootThread: Component = (props) => { css` article { - transition: margin 90ms var(--tutu-anim-curve-sharp), var(--tutu-transition-shadow); + transition: + margin 90ms var(--tutu-anim-curve-sharp), + var(--tutu-transition-shadow); user-select: none; cursor: pointer; } @@ -64,7 +66,10 @@ const TootThread: Component = (props) => { `; return ( -
    setExpanded((x) => !x)}> +
    setExpanded((x) => !x)} + > .toot { + & > .toot { box-shadow: none; } @@ -46,11 +47,11 @@ display: grid; grid-template-columns: 1fr auto; - >* { + > * { color: var(--tutu-color-secondary-text-on-surface); } - >:last-child { + > :last-child { grid-column: 1 /3; } @@ -80,7 +81,7 @@ } .tootContent { - composes: cardNoPad from '../material/cards.module.css'; + composes: cardNoPad from "../material/cards.module.css"; margin-left: calc(var(--card-pad, 0) + var(--toot-avatar-size, 0) + 8px); margin-right: var(--card-pad, 0); line-height: 1.5; @@ -150,14 +151,14 @@ } .tootAttachmentGrp { - composes: cardNoPad from '../material/cards.module.css'; + composes: cardNoPad from "../material/cards.module.css"; margin-top: 1em; margin-left: calc(var(--card-pad, 0) + var(--toot-avatar-size, 0) + 8px); margin-right: var(--card-pad, 0); display: grid; gap: 4px; - >:where(img) { + > :where(img) { max-height: 35vh; min-height: 40px; object-fit: none; @@ -168,7 +169,7 @@ } .tootBottomActionGrp { - composes: cardGutSkip from '../material/cards.module.css'; + composes: cardGutSkip from "../material/cards.module.css"; padding-block: calc((var(--card-gut) - 10px) / 2); animation: 225ms var(--tutu-anim-curve-std) tootBottomExpanding; @@ -176,7 +177,7 @@ flex-flow: row wrap; justify-content: space-evenly; - > button{ + > button { color: var(--tutu-color-on-surface); padding: 10px 8px; @@ -206,4 +207,4 @@ 100% { opacity: 1; } -} \ No newline at end of file +} diff --git a/src/utils.tsx b/src/utils.tsx index 51091ca..9ca5052 100644 --- a/src/utils.tsx +++ b/src/utils.tsx @@ -1,26 +1,26 @@ import { createRenderEffect, createSignal, onCleanup } from "solid-js"; export function useDocumentTitle(newTitle?: string) { - const capturedTitle = document.title - const [title, setTitle] = createSignal(newTitle ?? capturedTitle) + const capturedTitle = document.title; + const [title, setTitle] = createSignal(newTitle ?? capturedTitle); createRenderEffect(() => { - document.title = title() - }) + document.title = title(); + }); onCleanup(() => { - document.title = capturedTitle - }) + document.title = capturedTitle; + }); - return setTitle + return setTitle; } export function mergeClass(c1: string | undefined, c2: string | undefined) { if (!c1) { - return c2 + return c2; } if (!c2) { - return c1 + return c1; } - return [c1, c2].join(' ') + return [c1, c2].join(" "); } From abde6817f03a737235023cca381990de40b2e70f Mon Sep 17 00:00:00 2001 From: thislight Date: Mon, 5 Aug 2024 15:33:00 +0800 Subject: [PATCH 040/300] format code using prettier --- src/App.css | 2 +- src/accounts/MastodonOAuth2Callback.tsx | 30 +++-- src/accounts/SignIn.tsx | 6 +- src/accounts/stores.ts | 10 +- src/index.tsx | 8 +- src/masto/timelines.ts | 4 +- src/material/BottomSheet.module.css | 4 +- src/material/BottomSheet.tsx | 8 +- src/material/Button.tsx | 4 +- src/material/cards.module.css | 9 +- src/material/form.module.css | 106 +++++++++-------- src/material/material.module.css | 35 +++--- src/material/mui.ts | 21 ++-- src/material/theme.css | 25 ++-- src/material/typography.tsx | 34 +++--- src/platform/anim.ts | 10 +- src/settings/stores.ts | 18 +-- src/timelines/CompactToot.tsx | 10 +- src/timelines/Home.tsx | 21 +++- src/timelines/MediaAttachmentGrid.tsx | 2 +- src/timelines/MediaViewer.tsx | 10 +- src/timelines/ProfileMenuButton.tsx | 150 ++++++++++++------------ src/timelines/RegularToot.tsx | 2 +- src/timelines/TootBottomSheet.tsx | 7 +- src/timelines/TootThread.tsx | 9 +- src/timelines/toot.module.css | 21 ++-- src/utils.tsx | 20 ++-- 27 files changed, 326 insertions(+), 260 deletions(-) diff --git a/src/App.css b/src/App.css index bba585f..b912c3a 100644 --- a/src/App.css +++ b/src/App.css @@ -9,4 +9,4 @@ .custom-emoji { width: 1.25em; -} \ No newline at end of file +} diff --git a/src/accounts/MastodonOAuth2Callback.tsx b/src/accounts/MastodonOAuth2Callback.tsx index 2b34af9..249c58f 100644 --- a/src/accounts/MastodonOAuth2Callback.tsx +++ b/src/accounts/MastodonOAuth2Callback.tsx @@ -44,12 +44,12 @@ const MastodonOAuth2Callback: Component = () => { setDocumentTitle(`Back from ${ins.title}...`); setSiteTitle(ins.title); - const srcset = [] + const srcset = []; if (ins.thumbnail.versions["@1x"]) { - srcset.push(`${ins.thumbnail.versions["@1x"]} 1x`) + srcset.push(`${ins.thumbnail.versions["@1x"]} 1x`); } if (ins.thumbnail.versions["@2x"]) { - srcset.push(`${ins.thumbnail.versions["@2x"]} 2x`) + srcset.push(`${ins.thumbnail.versions["@2x"]} 2x`); } setSiteImg({ @@ -66,8 +66,8 @@ const MastodonOAuth2Callback: Component = () => { onGoingOAuth2Process, params.code, ); - $settings.setKey('onGoingOAuth2Process', undefined) - navigate('/', {replace: true}) + $settings.setKey("onGoingOAuth2Process", undefined); + navigate("/", { replace: true }); return; } @@ -95,18 +95,27 @@ const MastodonOAuth2Callback: Component = () => {
    - }> + + } + > {`Banner @@ -114,7 +123,8 @@ const MastodonOAuth2Callback: Component = () => { Contracting {siteTitle}...

    - If this page stays too long, you can close this page and sign in again. + If this page stays too long, you can close this page and sign in + again.

    diff --git a/src/accounts/SignIn.tsx b/src/accounts/SignIn.tsx index 0d0cf94..bd6c95b 100644 --- a/src/accounts/SignIn.tsx +++ b/src/accounts/SignIn.tsx @@ -69,8 +69,8 @@ const SignIn: Component = () => { }); onMount(() => { - $settings.setKey('onGoingOAuth2Process', undefined) - }) + $settings.setKey("onGoingOAuth2Process", undefined); + }); const onStartOAuth2 = async (e: Event) => { e.preventDefault(); @@ -107,7 +107,7 @@ const SignIn: Component = () => { for (const [k, v] of Object.entries(args)) { searches.set(k, v); } - $settings.setKey("onGoingOAuth2Process", url) + $settings.setKey("onGoingOAuth2Process", url); window.location.href = authStart.toString(); } catch (e) { setServerUrlHelperText( diff --git a/src/accounts/stores.ts b/src/accounts/stores.ts index 9668d2a..d34a420 100644 --- a/src/accounts/stores.ts +++ b/src/accounts/stores.ts @@ -95,9 +95,13 @@ export const updateAcctInf = action( }, ); -export const signOut = action($accounts, "signOut", ($store, predicate: (acct: Account) => boolean) => { - $store.set($store.get().filter(a => !predicate(a))); -}); +export const signOut = action( + $accounts, + "signOut", + ($store, predicate: (acct: Account) => boolean) => { + $store.set($store.get().filter((a) => !predicate(a))); + }, +); export type RegisteredApp = { site: string; diff --git a/src/index.tsx b/src/index.tsx index 9430fe8..0b9e3a9 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,5 +1,5 @@ -import {render} from 'solid-js/web' -import App from './App.js' -import "./material/theme.css" +import { render } from "solid-js/web"; +import App from "./App.js"; +import "./material/theme.css"; -render(() => , document.getElementById("root")!) +render(() => , document.getElementById("root")!); diff --git a/src/masto/timelines.ts b/src/masto/timelines.ts index a2e7b21..91e1d84 100644 --- a/src/masto/timelines.ts +++ b/src/masto/timelines.ts @@ -12,9 +12,7 @@ type Timeline = { }): mastodon.Paginator; }; -export function useTimeline( - timeline: Accessor, -) { +export function useTimeline(timeline: Accessor) { let minId: string | undefined; let maxId: string | undefined; let otl: Timeline | undefined; diff --git a/src/material/BottomSheet.module.css b/src/material/BottomSheet.module.css index 1a15849..1f428c8 100644 --- a/src/material/BottomSheet.module.css +++ b/src/material/BottomSheet.module.css @@ -1,5 +1,5 @@ .bottomSheet { - composes: surface from 'material.module.css'; + composes: surface from "material.module.css"; border: none; position: absolute; left: 50%; @@ -29,4 +29,4 @@ height: 100dvh; } } -} \ No newline at end of file +} diff --git a/src/material/BottomSheet.tsx b/src/material/BottomSheet.tsx index 112a17e..eeefcc5 100644 --- a/src/material/BottomSheet.tsx +++ b/src/material/BottomSheet.tsx @@ -1,5 +1,5 @@ import { createEffect, type ParentComponent } from "solid-js"; -import styles from './BottomSheet.module.css' +import styles from "./BottomSheet.module.css"; export type BottomSheetProps = { open?: boolean; @@ -20,7 +20,11 @@ const BottomSheet: ParentComponent = (props) => { } }); - return {props.children}; + return ( + + {props.children} + + ); }; export default BottomSheet; diff --git a/src/material/Button.tsx b/src/material/Button.tsx index 7b0051d..1e08e41 100644 --- a/src/material/Button.tsx +++ b/src/material/Button.tsx @@ -9,12 +9,12 @@ import materialStyles from "./material.module.css"; const Button: Component> = ( props, ) => { - const [managed, passthough] = splitProps(props, ["class", 'type']); + const [managed, passthough] = splitProps(props, ["class", "type"]); const classes = () => managed.class ? [materialStyles.button, managed.class].join(" ") : materialStyles.button; - const type = () => managed.type ?? 'button' + const type = () => managed.type ?? "button"; return ; }; diff --git a/src/material/cards.module.css b/src/material/cards.module.css index b5966e3..2b1cc41 100644 --- a/src/material/cards.module.css +++ b/src/material/cards.module.css @@ -1,5 +1,5 @@ .card { - composes: surface from 'material.module.css'; + composes: surface from "material.module.css"; border-radius: 2px; box-shadow: var(--tutu-shadow-e2); transition: var(--tutu-transition-shadow); @@ -12,7 +12,7 @@ } &:not(.manualMargin) { - &>:not(.cardNoPad) { + & > :not(.cardNoPad) { margin-inline: var(--card-pad, 20px); } @@ -20,7 +20,7 @@ margin-top: var(--card-gut, 20px); } - >.cardGutSkip+*:not(.cardGutSkip) { + > .cardGutSkip + *:not(.cardGutSkip) { margin-top: var(--card-gut, 20px); } @@ -28,7 +28,6 @@ margin-bottom: var(--card-gut, 20px); } } - } .layoutCentered { @@ -52,4 +51,4 @@ overflow: auto; } } -} \ No newline at end of file +} diff --git a/src/material/form.module.css b/src/material/form.module.css index 5e7dfb7..1fde099 100644 --- a/src/material/form.module.css +++ b/src/material/form.module.css @@ -1,5 +1,5 @@ .textfield { - composes: touchTarget from 'material.module.css'; + composes: touchTarget from "material.module.css"; --border-color: var(--tutu-color-inactive-on-surface); --active-border-color: var(--tutu-color-primary); @@ -7,74 +7,78 @@ --active-label-color: var(--tutu-color-primary); --helper-text-color: var(--tutu-color-inactive-on-surface); - &>* { - width: 100%; + & > * { + width: 100%; } - &.error, &:has(>input[aria-invalid="true"]) { - &:not(:focus-within) { - --border-color: var(--tutu-color-error-on-surface); - --label-color: var(--tutu-color-error-on-surface); - --helper-text-color: var(--tutu-color-error-on-surface); - } + &.error, + &:has(> input[aria-invalid="true"]) { + &:not(:focus-within) { + --border-color: var(--tutu-color-error-on-surface); + --label-color: var(--tutu-color-error-on-surface); + --helper-text-color: var(--tutu-color-error-on-surface); + } - &:focus-within { - --helper-text-color: var(--tutu-color-error-on-surface); - } + &:focus-within { + --helper-text-color: var(--tutu-color-error-on-surface); + } } - position: relative; - &>label { - position: absolute; - left: 0; - bottom: calc(10px + var(--bottom-height, 0px)); - color: var(--label-color); - transition: bottom .2s ease-in-out, font-size .2s ease-in-out, color .2s ease-in-out; - cursor: text; - font-size: 0.8125rem; + & > label { + position: absolute; + left: 0; + bottom: calc(10px + var(--bottom-height, 0px)); + color: var(--label-color); + transition: + bottom 0.2s ease-in-out, + font-size 0.2s ease-in-out, + color 0.2s ease-in-out; + cursor: text; + font-size: 0.8125rem; } - &>label:has(+ input:not(:placeholder-shown)) { - bottom: calc(100% - 0.8125rem); + & > label:has(+ input:not(:placeholder-shown)) { + bottom: calc(100% - 0.8125rem); } - &:focus-within>label, &.float-label>label { - bottom: calc(100% - 0.8125rem); - color: var(--active-label-color); + &:focus-within > label, + &.float-label > label { + bottom: calc(100% - 0.8125rem); + color: var(--active-label-color); } - &>input[type='text'], - &>input[type='password'] { - border: none; - outline: none; - border-bottom: 1px solid var(--border-color); - background-color: transparent; - padding-top: 16px; - padding-bottom: 8px; - margin-bottom: 1px; - transition: border-color .2s ease-in-out; + & > input[type="text"], + & > input[type="password"] { + border: none; + outline: none; + border-bottom: 1px solid var(--border-color); + background-color: transparent; + padding-top: 16px; + padding-bottom: 8px; + margin-bottom: 1px; + transition: border-color 0.2s ease-in-out; - &:focus { - border-bottom: 2px solid var(--active-border-color); - margin-bottom: 0; - } + &:focus { + border-bottom: 2px solid var(--active-border-color); + margin-bottom: 0; + } } &.withHelperText { - --bottom-height: 0.8125rem; + --bottom-height: 0.8125rem; } & .helperText { - color: var(--helper-text-color); - font-size: 0.8125rem; - line-height: 100%; - -webkit-line-clamp: 1; - line-clamp: 1; - display: flex; - justify-content: space-between; - min-height: 0.8125rem; - cursor: auto; + color: var(--helper-text-color); + font-size: 0.8125rem; + line-height: 100%; + -webkit-line-clamp: 1; + line-clamp: 1; + display: flex; + justify-content: space-between; + min-height: 0.8125rem; + cursor: auto; } -} \ No newline at end of file +} diff --git a/src/material/material.module.css b/src/material/material.module.css index d51a179..3443756 100644 --- a/src/material/material.module.css +++ b/src/material/material.module.css @@ -10,7 +10,7 @@ } .button { - composes: buttonText from './typography.module.css'; + composes: buttonText from "./typography.module.css"; composes: touchTarget; border: none; @@ -18,28 +18,34 @@ color: var(--tutu-color-primary); font-family: inherit; - &:focus,&:hover,&:focus-visible { - background-color: var(--tutu-color-surface-dd); + &:focus, + &:hover, + &:focus-visible { + background-color: var(--tutu-color-surface-dd); } &.pressed { - background-color: var(--tutu-color-surface-d); + background-color: var(--tutu-color-surface-d); } &.raised { - background-color: var(--tutu-color-primary); - color: var(--tutu-color-on-primary); + background-color: var(--tutu-color-primary); + color: var(--tutu-color-on-primary); } - &:disabled, &[aria-disabled]:not([aria-disabled="false"]) { - color: #9e9e9e; + &:disabled, + &[aria-disabled]:not([aria-disabled="false"]) { + color: #9e9e9e; - &:focus,&:hover,&:focus-visible { - background-color: transparent; - } + &:focus, + &:hover, + &:focus-visible { + background-color: transparent; + } } - .toolbar &, .appbar & { + .toolbar &, + .appbar & { height: 100%; margin-block: 0; padding-block: 0; @@ -49,7 +55,9 @@ .appbar & { color: var(--tutu-color-on-primary); - &:focus,&:hover,&:focus-visible { + &:focus, + &:hover, + &:focus-visible { background-color: var(--tutu-color-primary-ll); } @@ -62,4 +70,3 @@ color: var(--tutu-color-on-surface); } } - diff --git a/src/material/mui.ts b/src/material/mui.ts index 15511ac..6527cc4 100644 --- a/src/material/mui.ts +++ b/src/material/mui.ts @@ -2,15 +2,16 @@ import { Theme, createTheme } from "@suid/material/styles"; import { deepPurple, amber } from "@suid/material/colors"; import { Accessor } from "solid-js"; -export function useRootTheme() : Accessor { - return () => createTheme({ - palette: { - primary: { - main: deepPurple[500] +export function useRootTheme(): Accessor { + return () => + createTheme({ + palette: { + primary: { + main: deepPurple[500], + }, + secondary: { + main: amber.A200, + }, }, - secondary: { - main: amber.A200 - } - } - }) + }); } diff --git a/src/material/theme.css b/src/material/theme.css index 5d26879..76bfab4 100644 --- a/src/material/theme.css +++ b/src/material/theme.css @@ -1,5 +1,6 @@ :root, -[lang^="en"], [lang="en"] { +[lang^="en"], +[lang="en"] { --md-typography-type: "regular"; --title-size: 1.25rem; --title-weight: 500; @@ -19,9 +20,12 @@ } } -[lang^="zh"], [lang="zh"], -[lang^="kr"], [lang="kr"], -[lang^="ja"], [lang="ja"] { +[lang^="zh"], +[lang="zh"], +[lang^="kr"], +[lang="kr"], +[lang^="ja"], +[lang="ja"] { --md-typography-type: "dense"; --title-size: 1.4375rem; --subheading-size: 1.1875rem; @@ -95,7 +99,6 @@ --tutu-anim-curve-sharp: cubic-bezier(0.4, 0, 0.6, 1); @media (max-width: 300px) { - /* XS screen, like wearables */ & { --tutu-transition-shadow: box-shadow 157.5ms var(--tutu-anim-curve-std); @@ -103,7 +106,6 @@ } @media (max-width: 600px) { - /* Mobile */ & { --tutu-transition-shadow: box-shadow 225ms var(--tutu-anim-curve-std); @@ -111,7 +113,6 @@ } @media (max-width: 1200px) { - /* Tablet */ & { --tutu-transition-shadow: box-shadow 292.5ms var(--tutu-anim-curve-std); @@ -125,11 +126,17 @@ } * { - font-family: Roboto, "Noto Sans", system-ui, -apple-system, BlinkMacSystemFont, sans-serif; + font-family: + Roboto, + "Noto Sans", + system-ui, + -apple-system, + BlinkMacSystemFont, + sans-serif; box-sizing: border-box; margin: 0; } body { font-size: var(--body-size, 1rem); -} \ No newline at end of file +} diff --git a/src/material/typography.tsx b/src/material/typography.tsx index 2121266..2ea0fd3 100644 --- a/src/material/typography.tsx +++ b/src/material/typography.tsx @@ -3,7 +3,7 @@ import { Dynamic } from "solid-js/web"; import typography from "./typography.module.css"; import { mergeClass } from "../utils"; -type AnyElement = keyof JSX.IntrinsicElements | ParentComponent +type AnyElement = keyof JSX.IntrinsicElements | ParentComponent; type PropsOf = E extends ParentComponent @@ -12,9 +12,7 @@ type PropsOf = ? JSX.IntrinsicElements[E] : JSX.HTMLAttributes; -export type TypographyProps< - E extends AnyElement, -> = { +export type TypographyProps = { ref?: Ref; component?: E; class?: string; @@ -33,7 +31,9 @@ type TypographyKind = | "caption" | "buttonText"; -export function Typography(props: {typography: TypographyKind } & TypographyProps) { +export function Typography( + props: { typography: TypographyKind } & TypographyProps, +) { const [managed, passthough] = splitProps(props, [ "ref", "component", @@ -50,38 +50,38 @@ export function Typography(props: {typography: TypographyK {...passthough} > ); -}; +} export function Display4(props: TypographyProps) { - return + return ; } export function Display3(props: TypographyProps) { - return + return ; } export function Display2(props: TypographyProps) { - return + return ; } export function Display1(props: TypographyProps) { - return + return ; } export function Headline(props: TypographyProps) { - return + return ; } export function Title(props: TypographyProps) { - return + return ; } export function Subheading(props: TypographyProps) { - return + return ; } export function Body1(props: TypographyProps) { - return + return ; } export function Body2(props: TypographyProps) { - return + return ; } export function Caption(props: TypographyProps) { - return + return ; } export function ButtonText(props: TypographyProps) { - return + return ; } diff --git a/src/platform/anim.ts b/src/platform/anim.ts index eead57a..75446ef 100644 --- a/src/platform/anim.ts +++ b/src/platform/anim.ts @@ -1,11 +1,13 @@ import { createContext, useContext, type Accessor } from "solid-js"; -export type HeroSource = {[key: string | symbol | number]: HTMLElement | undefined} +export type HeroSource = { + [key: string | symbol | number]: HTMLElement | undefined; +}; -const HeroSourceContext = createContext>(() => ({})) +const HeroSourceContext = createContext>(() => ({})); -export const HeroSourceProvider = HeroSourceContext.Provider +export const HeroSourceProvider = HeroSourceContext.Provider; export function useHeroSource() { - return useContext(HeroSourceContext) + return useContext(HeroSourceContext); } diff --git a/src/settings/stores.ts b/src/settings/stores.ts index d3ddc24..25f6484 100644 --- a/src/settings/stores.ts +++ b/src/settings/stores.ts @@ -1,11 +1,15 @@ import { persistentMap } from "@nanostores/persistent"; type Settings = { - onGoingOAuth2Process?: string - prefetchTootsDisabled?: boolean -} + onGoingOAuth2Process?: string; + prefetchTootsDisabled?: boolean; +}; -export const $settings = persistentMap("settings::", {}, { - encode: JSON.stringify, - decode: JSON.parse -}) +export const $settings = persistentMap( + "settings::", + {}, + { + encode: JSON.stringify, + decode: JSON.parse, + }, +); diff --git a/src/timelines/CompactToot.tsx b/src/timelines/CompactToot.tsx index b8db733..0d58b3d 100644 --- a/src/timelines/CompactToot.tsx +++ b/src/timelines/CompactToot.tsx @@ -18,16 +18,14 @@ const CompactToot: Component = (props) => { const toot = () => props.status; return (
    -
    +
    { appliedCustomEmoji( @@ -48,7 +46,7 @@ const CompactToot: Component = (props) => { ref={(e: { innerHTML: string }) => { appliedCustomEmoji(e, toot().content, toot().emojis); }} - class={[tootStyle.compactTootContent].join(' ')} + class={[tootStyle.compactTootContent].join(" ")} >
    ); diff --git a/src/timelines/Home.tsx b/src/timelines/Home.tsx index 509a2f1..44682e1 100644 --- a/src/timelines/Home.tsx +++ b/src/timelines/Home.tsx @@ -155,20 +155,20 @@ const Home: ParentComponent = (props) => { useDocumentTitle("Timelines"); const now = createTimeSource(); - const settings$ = useStore($settings) + const settings$ = useStore($settings); const sessions = useSessions(); const client = () => sessions()[0].client; const [profile] = useAcctProfile(client); const [panelOffset, setPanelOffset] = createSignal(0); - const prefetching = () => !settings$().prefetchTootsDisabled + const prefetching = () => !settings$().prefetchTootsDisabled; const [currentFocusOn, setCurrentFocusOn] = createSignal([]); const [focusRange, setFocusRange] = createSignal([0, 0] as readonly [ number, number, ]); - const child = children(() => props.children) + const child = children(() => props.children); let scrollEventLockReleased = true; @@ -269,7 +269,11 @@ const Home: ParentComponent = (props) => { - + Home @@ -282,7 +286,14 @@ const Home: ParentComponent = (props) => { - $settings.setKey("prefetchTootsDisabled", !$settings.get().prefetchTootsDisabled)}> + + $settings.setKey( + "prefetchTootsDisabled", + !$settings.get().prefetchTootsDisabled, + ) + } + > Prefetch Toots diff --git a/src/timelines/MediaAttachmentGrid.tsx b/src/timelines/MediaAttachmentGrid.tsx index f98df53..198de31 100644 --- a/src/timelines/MediaAttachmentGrid.tsx +++ b/src/timelines/MediaAttachmentGrid.tsx @@ -11,7 +11,7 @@ const MediaAttachmentGrid: Component<{ }> = (props) => { let rootRef: HTMLElement; const [viewerIndex, setViewerIndex] = createSignal(); - const viewerOpened = () => typeof viewerIndex() !== "undefined" + const viewerOpened = () => typeof viewerIndex() !== "undefined"; const gridTemplateColumns = () => { const l = props.attachments.length; if (l < 2) { diff --git a/src/timelines/MediaViewer.tsx b/src/timelines/MediaViewer.tsx index 5e73f4c..577dd12 100644 --- a/src/timelines/MediaViewer.tsx +++ b/src/timelines/MediaViewer.tsx @@ -36,7 +36,7 @@ function within(n: number, target: number, range: number) { } function clamp(input: number, min: number, max: number) { - return Math.min(Math.max(input, min), max) + return Math.min(Math.max(input, min), max); } const MediaViewer: ParentComponent = (props) => { @@ -207,7 +207,13 @@ const MediaViewer: ParentComponent = (props) => { move: number, idx: number, ) => { - const { ref, top: otop, left: oleft, scale: oscale, osize: [owidth, oheight] } = state[idx]; + const { + ref, + top: otop, + left: oleft, + scale: oscale, + osize: [owidth, oheight], + } = state[idx]; const [cx, cy] = center; const iy = clamp(cy - otop, 0, oheight), ix = clamp(cx - oleft, 0, owidth); // in image coordinate system diff --git a/src/timelines/ProfileMenuButton.tsx b/src/timelines/ProfileMenuButton.tsx index b997041..4fe8f04 100644 --- a/src/timelines/ProfileMenuButton.tsx +++ b/src/timelines/ProfileMenuButton.tsx @@ -8,7 +8,13 @@ import { Menu, MenuItem, } from "@suid/material"; -import { Show, createSignal, createUniqueId, type ParentComponent } from "solid-js"; +import { + ErrorBoundary, + Show, + createSignal, + createUniqueId, + type ParentComponent, +} from "solid-js"; import { Settings as SettingsIcon, Bookmark as BookmarkIcon, @@ -42,79 +48,79 @@ const ProfileMenuButton: ParentComponent<{ return ( <> - - - - - - - - - - + + + + + + + + + + - - - - - Bookmarks - - - - - - Likes - - - - - - Lists - - - - {props.children} + + + + + Bookmarks + + + + + + Likes + + + + + + Lists + - - - - - - Settings - - + + {props.children} + + + + + + + Settings + + ); }; diff --git a/src/timelines/RegularToot.tsx b/src/timelines/RegularToot.tsx index 7d9b694..28bc4d8 100644 --- a/src/timelines/RegularToot.tsx +++ b/src/timelines/RegularToot.tsx @@ -211,7 +211,7 @@ const RegularToot: Component = (props) => { classList={{ [tootStyle.toot]: true, [tootStyle.expanded]: managed.evaluated, - [managed.class || ""]: true + [managed.class || ""]: true, }} ref={rootRef!} lang={toot().language || managed.lang} diff --git a/src/timelines/TootBottomSheet.tsx b/src/timelines/TootBottomSheet.tsx index 0b40aa0..eb11704 100644 --- a/src/timelines/TootBottomSheet.tsx +++ b/src/timelines/TootBottomSheet.tsx @@ -1,8 +1,7 @@ import type { Component } from "solid-js"; - const TootBottomSheet: Component = (props) => { - return <> -} + return <>; +}; -export default TootBottomSheet +export default TootBottomSheet; diff --git a/src/timelines/TootThread.tsx b/src/timelines/TootThread.tsx index cf4c226..c23b8f4 100644 --- a/src/timelines/TootThread.tsx +++ b/src/timelines/TootThread.tsx @@ -38,7 +38,9 @@ const TootThread: Component = (props) => { css` article { - transition: margin 90ms var(--tutu-anim-curve-sharp), var(--tutu-transition-shadow); + transition: + margin 90ms var(--tutu-anim-curve-sharp), + var(--tutu-transition-shadow); user-select: none; cursor: pointer; } @@ -64,7 +66,10 @@ const TootThread: Component = (props) => { `; return ( -
    setExpanded((x) => !x)}> +
    setExpanded((x) => !x)} + > .toot { + & > .toot { box-shadow: none; } @@ -46,11 +47,11 @@ display: grid; grid-template-columns: 1fr auto; - >* { + > * { color: var(--tutu-color-secondary-text-on-surface); } - >:last-child { + > :last-child { grid-column: 1 /3; } @@ -80,7 +81,7 @@ } .tootContent { - composes: cardNoPad from '../material/cards.module.css'; + composes: cardNoPad from "../material/cards.module.css"; margin-left: calc(var(--card-pad, 0) + var(--toot-avatar-size, 0) + 8px); margin-right: var(--card-pad, 0); line-height: 1.5; @@ -150,14 +151,14 @@ } .tootAttachmentGrp { - composes: cardNoPad from '../material/cards.module.css'; + composes: cardNoPad from "../material/cards.module.css"; margin-top: 1em; margin-left: calc(var(--card-pad, 0) + var(--toot-avatar-size, 0) + 8px); margin-right: var(--card-pad, 0); display: grid; gap: 4px; - >:where(img) { + > :where(img) { max-height: 35vh; min-height: 40px; object-fit: none; @@ -168,7 +169,7 @@ } .tootBottomActionGrp { - composes: cardGutSkip from '../material/cards.module.css'; + composes: cardGutSkip from "../material/cards.module.css"; padding-block: calc((var(--card-gut) - 10px) / 2); animation: 225ms var(--tutu-anim-curve-std) tootBottomExpanding; @@ -176,7 +177,7 @@ flex-flow: row wrap; justify-content: space-evenly; - > button{ + > button { color: var(--tutu-color-on-surface); padding: 10px 8px; @@ -206,4 +207,4 @@ 100% { opacity: 1; } -} \ No newline at end of file +} diff --git a/src/utils.tsx b/src/utils.tsx index 51091ca..9ca5052 100644 --- a/src/utils.tsx +++ b/src/utils.tsx @@ -1,26 +1,26 @@ import { createRenderEffect, createSignal, onCleanup } from "solid-js"; export function useDocumentTitle(newTitle?: string) { - const capturedTitle = document.title - const [title, setTitle] = createSignal(newTitle ?? capturedTitle) + const capturedTitle = document.title; + const [title, setTitle] = createSignal(newTitle ?? capturedTitle); createRenderEffect(() => { - document.title = title() - }) + document.title = title(); + }); onCleanup(() => { - document.title = capturedTitle - }) + document.title = capturedTitle; + }); - return setTitle + return setTitle; } export function mergeClass(c1: string | undefined, c2: string | undefined) { if (!c1) { - return c2 + return c2; } if (!c2) { - return c1 + return c1; } - return [c1, c2].join(' ') + return [c1, c2].join(" "); } From 4b17c426aba69422542b0f69374f95eca3d1da97 Mon Sep 17 00:00:00 2001 From: thislight Date: Mon, 5 Aug 2024 16:24:34 +0800 Subject: [PATCH 041/300] added recover page on unexpected error --- bun.lockb | Bin 233176 -> 235447 bytes package.json | 3 ++- src/App.tsx | 4 +++- src/UnexpectedError.tsx | 40 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 src/UnexpectedError.tsx diff --git a/bun.lockb b/bun.lockb index c0145f0bf66ad2e28083aa3f7fb0a9c6996162c3..16c0c62643a328abbaa36a81a12ea09f40e33ad6 100755 GIT binary patch delta 45013 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 delta 44173 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 M3${DHW-40)0QDY31ONa4 diff --git a/package.json b/package.json index 056139a..b5fb7a4 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,8 @@ "masto": "^6.8.0", "nanostores": "^0.9.5", "solid-js": "^1.8.18", - "solid-styled": "^0.11.1" + "solid-styled": "^0.11.1", + "stacktrace-js": "^2.0.2" }, "packageManager": "bun@1.1.21" } diff --git a/src/App.tsx b/src/App.tsx index 55e9971..1522795 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -53,11 +53,13 @@ const App: Component = () => { ); }); +const UnexpectedError = lazy(() => import("./UnexpectedError.js")) + return ( { console.error(err); - return <>; + return ; }} > diff --git a/src/UnexpectedError.tsx b/src/UnexpectedError.tsx new file mode 100644 index 0000000..38e3c70 --- /dev/null +++ b/src/UnexpectedError.tsx @@ -0,0 +1,40 @@ +import { Button } from '@suid/material'; +import {Component, createResource} from 'solid-js' +import { css } from 'solid-styled'; + +const UnexpectedError: Component<{error?: any}> = (props) => { + + const [errorMsg] = createResource(() => props.error, async (err) => { + if (err instanceof Error) { + const mod = await import('stacktrace-js') + const stacktrace = await mod.fromError(err) + const strackMsg = stacktrace.map(entry => `${entry.functionName ?? ""}@${entry.fileName}:(${entry.lineNumber}:${entry.columnNumber})`).join('\n') + return `${err.name}: ${err.message}\n${strackMsg}` + } + + return err.toString() + }) + + css` + main { + padding: calc(var(--safe-area-inset-top) + 20px) calc(var(--safe-area-inset-right) + 20px) calc(var(--safe-area-inset-bottom) + 20px) calc(var(--safe-area-inset-left) + 20px); + } + ` + + return
    +

    Oh, it is our fault.

    +

    There is an unexpected error in our app, and it's not your fault.

    +

    You can reload to see if this guy is gone. If you meet this guy repeatly, please report to us.

    +
    + +
    +
    + {errorMsg.loading ? 'Generating ' : " "}Technical Infomation (Bring to us if you report the problem) +
    +        {errorMsg()}
    +      
    +
    +
    +} + +export default UnexpectedError; From dbb14e3d747bbdb7e88fbf7b763b0a13c17a3868 Mon Sep 17 00:00:00 2001 From: thislight Date: Mon, 5 Aug 2024 16:24:34 +0800 Subject: [PATCH 042/300] added recover page on unexpected error --- bun.lockb | Bin 233176 -> 235447 bytes package.json | 3 ++- src/App.tsx | 4 +++- src/UnexpectedError.tsx | 40 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 src/UnexpectedError.tsx diff --git a/bun.lockb b/bun.lockb index c0145f0bf66ad2e28083aa3f7fb0a9c6996162c3..16c0c62643a328abbaa36a81a12ea09f40e33ad6 100755 GIT binary patch delta 45013 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 delta 44173 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
    %4RP8!@@7C{Isr6{akuZMKzTDK@E8e!# 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 M3${DHW-40)0QDY31ONa4 diff --git a/package.json b/package.json index 056139a..b5fb7a4 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,8 @@ "masto": "^6.8.0", "nanostores": "^0.9.5", "solid-js": "^1.8.18", - "solid-styled": "^0.11.1" + "solid-styled": "^0.11.1", + "stacktrace-js": "^2.0.2" }, "packageManager": "bun@1.1.21" } diff --git a/src/App.tsx b/src/App.tsx index 55e9971..1522795 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -53,11 +53,13 @@ const App: Component = () => { ); }); +const UnexpectedError = lazy(() => import("./UnexpectedError.js")) + return ( { console.error(err); - return <>; + return ; }} > diff --git a/src/UnexpectedError.tsx b/src/UnexpectedError.tsx new file mode 100644 index 0000000..38e3c70 --- /dev/null +++ b/src/UnexpectedError.tsx @@ -0,0 +1,40 @@ +import { Button } from '@suid/material'; +import {Component, createResource} from 'solid-js' +import { css } from 'solid-styled'; + +const UnexpectedError: Component<{error?: any}> = (props) => { + + const [errorMsg] = createResource(() => props.error, async (err) => { + if (err instanceof Error) { + const mod = await import('stacktrace-js') + const stacktrace = await mod.fromError(err) + const strackMsg = stacktrace.map(entry => `${entry.functionName ?? ""}@${entry.fileName}:(${entry.lineNumber}:${entry.columnNumber})`).join('\n') + return `${err.name}: ${err.message}\n${strackMsg}` + } + + return err.toString() + }) + + css` + main { + padding: calc(var(--safe-area-inset-top) + 20px) calc(var(--safe-area-inset-right) + 20px) calc(var(--safe-area-inset-bottom) + 20px) calc(var(--safe-area-inset-left) + 20px); + } + ` + + return
    +

    Oh, it is our fault.

    +

    There is an unexpected error in our app, and it's not your fault.

    +

    You can reload to see if this guy is gone. If you meet this guy repeatly, please report to us.

    +
    + +
    +
    + {errorMsg.loading ? 'Generating ' : " "}Technical Infomation (Bring to us if you report the problem) +
    +        {errorMsg()}
    +      
    +
    +
    +} + +export default UnexpectedError; From 94088768babf701d7c4662b438589bde455fb46a Mon Sep 17 00:00:00 2001 From: thislight Date: Mon, 5 Aug 2024 16:28:50 +0800 Subject: [PATCH 043/300] BottomSheet: position below the insets top --- src/material/BottomSheet.module.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/material/BottomSheet.module.css b/src/material/BottomSheet.module.css index 1f428c8..0295b86 100644 --- a/src/material/BottomSheet.module.css +++ b/src/material/BottomSheet.module.css @@ -22,7 +22,7 @@ @media (max-width: 560px) { & { left: 0; - top: 0; + top: var(--safe-area-inset-top, 0); transform: none; bottom: 0; height: 100vh; From 147a5bb48870d8d83b94dc19a6cf2f2f1a0d8dfa Mon Sep 17 00:00:00 2001 From: thislight Date: Mon, 5 Aug 2024 16:28:50 +0800 Subject: [PATCH 044/300] BottomSheet: position below the insets top --- src/material/BottomSheet.module.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/material/BottomSheet.module.css b/src/material/BottomSheet.module.css index 1f428c8..0295b86 100644 --- a/src/material/BottomSheet.module.css +++ b/src/material/BottomSheet.module.css @@ -22,7 +22,7 @@ @media (max-width: 560px) { & { left: 0; - top: 0; + top: var(--safe-area-inset-top, 0); transform: none; bottom: 0; height: 100vh; From 66366e648626c841839b3af2c92b0e6ecf0e66e2 Mon Sep 17 00:00:00 2001 From: thislight Date: Mon, 5 Aug 2024 16:44:12 +0800 Subject: [PATCH 045/300] MediaViewer: apply insets padding --- src/timelines/MediaViewer.tsx | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/timelines/MediaViewer.tsx b/src/timelines/MediaViewer.tsx index 577dd12..65da782 100644 --- a/src/timelines/MediaViewer.tsx +++ b/src/timelines/MediaViewer.tsx @@ -128,6 +128,13 @@ const MediaViewer: ParentComponent = (props) => { left: 0; z-index: 1; cursor: ${dragging() ? "grabbing" : "grab"}; + padding-left: var(--safe-area-inset-left, 0); + padding-right: var(--safe-area-inset-right, 0); + padding-bottom: var(--safe-area-inset-bottom, 0); + + :global(> .MuiToolbar-root) { + padding-top: var(--safe-area-inset-top, 0); + } } .left-dock { From ac178986d8b3df59cff24b4a542d40ab83aa63ec Mon Sep 17 00:00:00 2001 From: thislight Date: Mon, 5 Aug 2024 16:44:12 +0800 Subject: [PATCH 046/300] MediaViewer: apply insets padding --- src/timelines/MediaViewer.tsx | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/timelines/MediaViewer.tsx b/src/timelines/MediaViewer.tsx index 577dd12..65da782 100644 --- a/src/timelines/MediaViewer.tsx +++ b/src/timelines/MediaViewer.tsx @@ -128,6 +128,13 @@ const MediaViewer: ParentComponent = (props) => { left: 0; z-index: 1; cursor: ${dragging() ? "grabbing" : "grab"}; + padding-left: var(--safe-area-inset-left, 0); + padding-right: var(--safe-area-inset-right, 0); + padding-bottom: var(--safe-area-inset-bottom, 0); + + :global(> .MuiToolbar-root) { + padding-top: var(--safe-area-inset-top, 0); + } } .left-dock { From 44d7d7d8a5016cbc3c5c73aad14b3afbcc3039ed Mon Sep 17 00:00:00 2001 From: thislight Date: Mon, 5 Aug 2024 16:45:33 +0800 Subject: [PATCH 047/300] start of v1.0.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b5fb7a4..953d8c5 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package", "name": "tutu", - "version": "1.0.2", + "version": "1.0.3", "description": "", "private": true, "type": "module", From c611216e1795f83bfb402e7bb5834350b6b70e4d Mon Sep 17 00:00:00 2001 From: thislight Date: Mon, 5 Aug 2024 16:45:33 +0800 Subject: [PATCH 048/300] start of v1.0.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b5fb7a4..953d8c5 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package", "name": "tutu", - "version": "1.0.2", + "version": "1.0.3", "description": "", "private": true, "type": "module", From 95fe954c5ea229df28e81b2620a2a9ac34dbcf25 Mon Sep 17 00:00:00 2001 From: thislight Date: Mon, 5 Aug 2024 18:57:43 +0800 Subject: [PATCH 049/300] Settings: fix prefetch toot option is unresponsive --- src/settings/Settings.tsx | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/settings/Settings.tsx b/src/settings/Settings.tsx index 36a4026..31a7424 100644 --- a/src/settings/Settings.tsx +++ b/src/settings/Settings.tsx @@ -94,16 +94,15 @@ const Settings: ParentComponent = () => { Fonts - + + $settings.setKey("prefetchTootsDisabled", !settings$().prefetchTootsDisabled) + }> Prefetch Toots - $settings.setKey("prefetchTootsDisabled", !e.target.checked) - } /> From ed901edea68b0b41c8dd7936278b1e0d3bdd66b0 Mon Sep 17 00:00:00 2001 From: thislight Date: Mon, 5 Aug 2024 18:57:43 +0800 Subject: [PATCH 050/300] Settings: fix prefetch toot option is unresponsive --- src/settings/Settings.tsx | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/settings/Settings.tsx b/src/settings/Settings.tsx index 36a4026..31a7424 100644 --- a/src/settings/Settings.tsx +++ b/src/settings/Settings.tsx @@ -94,16 +94,15 @@ const Settings: ParentComponent = () => { Fonts - + + $settings.setKey("prefetchTootsDisabled", !settings$().prefetchTootsDisabled) + }> Prefetch Toots - $settings.setKey("prefetchTootsDisabled", !e.target.checked) - } /> From 2de1960fb53fb9e68b7b676858cc8ff95886a355 Mon Sep 17 00:00:00 2001 From: thislight Date: Mon, 5 Aug 2024 19:05:39 +0800 Subject: [PATCH 051/300] BottomSheet: fix visual problem on iOS --- src/material/BottomSheet.module.css | 3 ++- src/settings/Settings.tsx | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/material/BottomSheet.module.css b/src/material/BottomSheet.module.css index 0295b86..e48ce13 100644 --- a/src/material/BottomSheet.module.css +++ b/src/material/BottomSheet.module.css @@ -22,11 +22,12 @@ @media (max-width: 560px) { & { left: 0; - top: var(--safe-area-inset-top, 0); + top: 0; transform: none; bottom: 0; height: 100vh; height: 100dvh; + max-height: 100%; } } } diff --git a/src/settings/Settings.tsx b/src/settings/Settings.tsx index 31a7424..0a76743 100644 --- a/src/settings/Settings.tsx +++ b/src/settings/Settings.tsx @@ -49,7 +49,7 @@ const Settings: ParentComponent = () => { - + From 40ca089f029e4231bfe5924f813563fb2cf99739 Mon Sep 17 00:00:00 2001 From: thislight Date: Mon, 5 Aug 2024 19:05:39 +0800 Subject: [PATCH 052/300] BottomSheet: fix visual problem on iOS --- src/material/BottomSheet.module.css | 3 ++- src/settings/Settings.tsx | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/material/BottomSheet.module.css b/src/material/BottomSheet.module.css index 0295b86..e48ce13 100644 --- a/src/material/BottomSheet.module.css +++ b/src/material/BottomSheet.module.css @@ -22,11 +22,12 @@ @media (max-width: 560px) { & { left: 0; - top: var(--safe-area-inset-top, 0); + top: 0; transform: none; bottom: 0; height: 100vh; height: 100dvh; + max-height: 100%; } } } diff --git a/src/settings/Settings.tsx b/src/settings/Settings.tsx index 31a7424..0a76743 100644 --- a/src/settings/Settings.tsx +++ b/src/settings/Settings.tsx @@ -49,7 +49,7 @@ const Settings: ParentComponent = () => { - + From 9486ac34ea0302c94398631509c5f4b20d5121bf Mon Sep 17 00:00:00 2001 From: thislight Date: Mon, 5 Aug 2024 21:10:48 +0800 Subject: [PATCH 053/300] SignIn: applied safe-aera-inset --- src/accounts/SignIn.tsx | 3 +++ src/material/cards.module.css | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/accounts/SignIn.tsx b/src/accounts/SignIn.tsx index bd6c95b..73fa34d 100644 --- a/src/accounts/SignIn.tsx +++ b/src/accounts/SignIn.tsx @@ -138,6 +138,9 @@ const SignIn: Component = () => { aria-describedby={ currentState() !== "inactive" ? progressId : undefined } + style={{ + padding: `var(--safe-area-inset-top) var(--safe-area-inset-right) var(--safe-area-inset-bottom) var(--safe-area-inset-left)`, + }} > :not(.cardNoPad) { + &> :not(.cardNoPad) { margin-inline: var(--card-pad, 20px); } @@ -20,7 +20,7 @@ margin-top: var(--card-gut, 20px); } - > .cardGutSkip + *:not(.cardGutSkip) { + >.cardGutSkip+*:not(.cardGutSkip) { margin-top: var(--card-gut, 20px); } From cde30f8e2964128aec66f2adb22256f118c41102 Mon Sep 17 00:00:00 2001 From: thislight Date: Mon, 5 Aug 2024 21:10:48 +0800 Subject: [PATCH 054/300] SignIn: applied safe-aera-inset --- src/accounts/SignIn.tsx | 3 +++ src/material/cards.module.css | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/accounts/SignIn.tsx b/src/accounts/SignIn.tsx index bd6c95b..73fa34d 100644 --- a/src/accounts/SignIn.tsx +++ b/src/accounts/SignIn.tsx @@ -138,6 +138,9 @@ const SignIn: Component = () => { aria-describedby={ currentState() !== "inactive" ? progressId : undefined } + style={{ + padding: `var(--safe-area-inset-top) var(--safe-area-inset-right) var(--safe-area-inset-bottom) var(--safe-area-inset-left)`, + }} > :not(.cardNoPad) { + &> :not(.cardNoPad) { margin-inline: var(--card-pad, 20px); } @@ -20,7 +20,7 @@ margin-top: var(--card-gut, 20px); } - > .cardGutSkip + *:not(.cardGutSkip) { + >.cardGutSkip+*:not(.cardGutSkip) { margin-top: var(--card-gut, 20px); } From fc8d4899773bc0090e425633ec15309c37f09190 Mon Sep 17 00:00:00 2001 From: thislight Date: Tue, 6 Aug 2024 20:27:30 +0800 Subject: [PATCH 055/300] useTimeline: use store to provide partial editing --- src/masto/timelines.ts | 44 +++++++++++++++++++++++++++------------ src/platform/hardware.ts | 6 ++++++ src/timelines/Home.tsx | 45 +++++++++++++++++++++++++--------------- 3 files changed, 65 insertions(+), 30 deletions(-) create mode 100644 src/platform/hardware.ts diff --git a/src/masto/timelines.ts b/src/masto/timelines.ts index 91e1d84..55d1276 100644 --- a/src/masto/timelines.ts +++ b/src/masto/timelines.ts @@ -1,5 +1,6 @@ import { type mastodon } from "masto"; -import { Accessor, createResource, createSignal } from "solid-js"; +import { Accessor, createEffect, createResource, createSignal } from "solid-js"; +import { createStore } from "solid-js/store"; type TimelineFetchTips = { direction?: "new" | "old"; @@ -17,8 +18,8 @@ export function useTimeline(timeline: Accessor) { let maxId: string | undefined; let otl: Timeline | undefined; const idSet = new Set(); - return createResource< - mastodon.v1.Status[], + const [snapshot, { refetch }] = createResource< + { records: mastodon.v1.Status[]; direction: "old" | "new" }, [Timeline], TimelineFetchTips | undefined >( @@ -28,7 +29,6 @@ export function useTimeline(timeline: Accessor) { minId = undefined; maxId = undefined; idSet.clear(); - info.value = []; otl = tl; } const direction = @@ -44,7 +44,6 @@ export function useTimeline(timeline: Accessor) { minId: maxId, }, ); - const old = info.value || []; const diff = pager.filter((x) => !idSet.has(x.id)); for (const v of diff.map((x) => x.id)) { idSet.add(v); @@ -54,20 +53,39 @@ export function useTimeline(timeline: Accessor) { if (!maxId && pager.length > 0) { maxId = pager[0].id; } - return [...old, ...diff]; + return { + direction: "old" as const, + records: diff, + }; } else { maxId = pager.length > 0 ? pager[0].id : undefined; if (!minId && pager.length > 0) { minId = pager[pager.length - 1]?.id; } - return [...diff, ...old]; + return { direction: "new" as const, records: diff }; } }, - { - initialValue: [], - storage(init) { - return createSignal(init, { equals: false }); - }, - }, ); + + const [store, setStore] = createStore([] as mastodon.v1.Status[]); + + createEffect(() => { + const shot = snapshot(); + if (!shot) return; + const { direction, records } = shot; + if (direction == "new") { + setStore((x) => [...records, ...x]); + } else if (direction == "old") { + setStore((x) => [...x, ...records]); + } + }); + + return [ + store, + snapshot, + { + refetch, + mutate: setStore, + }, + ] as const; } diff --git a/src/platform/hardware.ts b/src/platform/hardware.ts new file mode 100644 index 0000000..2d1d0d6 --- /dev/null +++ b/src/platform/hardware.ts @@ -0,0 +1,6 @@ +export function vibrate(pattern: number | number[]) { + if (typeof navigator.vibrate !== "undefined") { + return navigator.vibrate(pattern); + } + return false; +} diff --git a/src/timelines/Home.tsx b/src/timelines/Home.tsx index 44682e1..2a193f0 100644 --- a/src/timelines/Home.tsx +++ b/src/timelines/Home.tsx @@ -37,21 +37,25 @@ import { makeEventListener } from "@solid-primitives/event-listener"; import BottomSheet from "../material/BottomSheet"; import { $settings } from "../settings/stores"; import { useStore } from "@nanostores/solid"; +import { vibrate } from "../platform/hardware"; const TimelinePanel: Component<{ client: mastodon.rest.Client; name: "home" | "public" | "trends"; prefetch?: boolean; }> = (props) => { - const [timeline, { refetch: refetchTimeline, mutate: mutateTimeline }] = - useTimeline(() => - props.name !== "trends" - ? props.client.v1.timelines[props.name] - : props.client.v1.trends.statuses, - ); + const [ + timeline, + snapshot, + { refetch: refetchTimeline, mutate: mutateTimeline }, + ] = useTimeline(() => + props.name !== "trends" + ? props.client.v1.timelines[props.name] + : props.client.v1.trends.statuses, + ); const tlEndObserver = new IntersectionObserver(() => { - if (untrack(() => props.prefetch) && !timeline.loading) + if (untrack(() => props.prefetch) && !snapshot.loading) refetchTimeline({ direction: "old" }); }); @@ -76,12 +80,19 @@ const TimelinePanel: Component<{ client: mastodon.rest.Client, status: mastodon.v1.Status, ) => { - const reblogged = false; - mutateTimeline((o) => { - Object.assign(o[index].reblog ?? o[index], { - reblogged: !reblogged, - }); - return o; + const reblogged = status.reblog + ? status.reblog.reblogged + : status.reblogged; + vibrate(50); + mutateTimeline(index, (x) => { + if (x.reblog) { + x.reblog = { ...x.reblog, reblogged: !reblogged }; + return Object.assign({}, x); + } else { + return Object.assign({}, x, { + reblogged: !reblogged, + }); + } }); const result = reblogged ? await client.v1.statuses.$select(status.id).unreblog() @@ -98,7 +109,7 @@ const TimelinePanel: Component<{ return ( <>
    - + {(item, index) => { return (
    tlEndObserver.observe(e)}>
    - +
    - +
    - +
    Date: Tue, 6 Aug 2024 20:27:30 +0800 Subject: [PATCH 056/300] useTimeline: use store to provide partial editing --- src/masto/timelines.ts | 44 +++++++++++++++++++++++++++------------ src/platform/hardware.ts | 6 ++++++ src/timelines/Home.tsx | 45 +++++++++++++++++++++++++--------------- 3 files changed, 65 insertions(+), 30 deletions(-) create mode 100644 src/platform/hardware.ts diff --git a/src/masto/timelines.ts b/src/masto/timelines.ts index 91e1d84..55d1276 100644 --- a/src/masto/timelines.ts +++ b/src/masto/timelines.ts @@ -1,5 +1,6 @@ import { type mastodon } from "masto"; -import { Accessor, createResource, createSignal } from "solid-js"; +import { Accessor, createEffect, createResource, createSignal } from "solid-js"; +import { createStore } from "solid-js/store"; type TimelineFetchTips = { direction?: "new" | "old"; @@ -17,8 +18,8 @@ export function useTimeline(timeline: Accessor) { let maxId: string | undefined; let otl: Timeline | undefined; const idSet = new Set(); - return createResource< - mastodon.v1.Status[], + const [snapshot, { refetch }] = createResource< + { records: mastodon.v1.Status[]; direction: "old" | "new" }, [Timeline], TimelineFetchTips | undefined >( @@ -28,7 +29,6 @@ export function useTimeline(timeline: Accessor) { minId = undefined; maxId = undefined; idSet.clear(); - info.value = []; otl = tl; } const direction = @@ -44,7 +44,6 @@ export function useTimeline(timeline: Accessor) { minId: maxId, }, ); - const old = info.value || []; const diff = pager.filter((x) => !idSet.has(x.id)); for (const v of diff.map((x) => x.id)) { idSet.add(v); @@ -54,20 +53,39 @@ export function useTimeline(timeline: Accessor) { if (!maxId && pager.length > 0) { maxId = pager[0].id; } - return [...old, ...diff]; + return { + direction: "old" as const, + records: diff, + }; } else { maxId = pager.length > 0 ? pager[0].id : undefined; if (!minId && pager.length > 0) { minId = pager[pager.length - 1]?.id; } - return [...diff, ...old]; + return { direction: "new" as const, records: diff }; } }, - { - initialValue: [], - storage(init) { - return createSignal(init, { equals: false }); - }, - }, ); + + const [store, setStore] = createStore([] as mastodon.v1.Status[]); + + createEffect(() => { + const shot = snapshot(); + if (!shot) return; + const { direction, records } = shot; + if (direction == "new") { + setStore((x) => [...records, ...x]); + } else if (direction == "old") { + setStore((x) => [...x, ...records]); + } + }); + + return [ + store, + snapshot, + { + refetch, + mutate: setStore, + }, + ] as const; } diff --git a/src/platform/hardware.ts b/src/platform/hardware.ts new file mode 100644 index 0000000..2d1d0d6 --- /dev/null +++ b/src/platform/hardware.ts @@ -0,0 +1,6 @@ +export function vibrate(pattern: number | number[]) { + if (typeof navigator.vibrate !== "undefined") { + return navigator.vibrate(pattern); + } + return false; +} diff --git a/src/timelines/Home.tsx b/src/timelines/Home.tsx index 44682e1..2a193f0 100644 --- a/src/timelines/Home.tsx +++ b/src/timelines/Home.tsx @@ -37,21 +37,25 @@ import { makeEventListener } from "@solid-primitives/event-listener"; import BottomSheet from "../material/BottomSheet"; import { $settings } from "../settings/stores"; import { useStore } from "@nanostores/solid"; +import { vibrate } from "../platform/hardware"; const TimelinePanel: Component<{ client: mastodon.rest.Client; name: "home" | "public" | "trends"; prefetch?: boolean; }> = (props) => { - const [timeline, { refetch: refetchTimeline, mutate: mutateTimeline }] = - useTimeline(() => - props.name !== "trends" - ? props.client.v1.timelines[props.name] - : props.client.v1.trends.statuses, - ); + const [ + timeline, + snapshot, + { refetch: refetchTimeline, mutate: mutateTimeline }, + ] = useTimeline(() => + props.name !== "trends" + ? props.client.v1.timelines[props.name] + : props.client.v1.trends.statuses, + ); const tlEndObserver = new IntersectionObserver(() => { - if (untrack(() => props.prefetch) && !timeline.loading) + if (untrack(() => props.prefetch) && !snapshot.loading) refetchTimeline({ direction: "old" }); }); @@ -76,12 +80,19 @@ const TimelinePanel: Component<{ client: mastodon.rest.Client, status: mastodon.v1.Status, ) => { - const reblogged = false; - mutateTimeline((o) => { - Object.assign(o[index].reblog ?? o[index], { - reblogged: !reblogged, - }); - return o; + const reblogged = status.reblog + ? status.reblog.reblogged + : status.reblogged; + vibrate(50); + mutateTimeline(index, (x) => { + if (x.reblog) { + x.reblog = { ...x.reblog, reblogged: !reblogged }; + return Object.assign({}, x); + } else { + return Object.assign({}, x, { + reblogged: !reblogged, + }); + } }); const result = reblogged ? await client.v1.statuses.$select(status.id).unreblog() @@ -98,7 +109,7 @@ const TimelinePanel: Component<{ return ( <>
    - + {(item, index) => { return (
    tlEndObserver.observe(e)}>
    - +
    - +
    - +
    Date: Wed, 7 Aug 2024 17:04:54 +0800 Subject: [PATCH 057/300] PullDownToRefresh: init prototype --- bun.lockb | Bin 235447 -> 235946 bytes package.json | 1 + src/timelines/Home.tsx | 18 ++- src/timelines/PullDownToRefresh.tsx | 200 ++++++++++++++++++++++++++++ 4 files changed, 217 insertions(+), 2 deletions(-) create mode 100644 src/timelines/PullDownToRefresh.tsx diff --git a/bun.lockb b/bun.lockb index 16c0c62643a328abbaa36a81a12ea09f40e33ad6..be11679add9a734b762efc04028879c2d2e61fad 100755 GIT binary patch delta 41405 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 diff --git a/package.json b/package.json index 953d8c5..54e32ca 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "@nanostores/persistent": "^0.9.1", "@nanostores/solid": "^0.4.2", "@solid-primitives/event-listener": "^2.3.3", + "@solid-primitives/intersection-observer": "^2.1.6", "@solid-primitives/resize-observer": "^2.0.25", "@solidjs/router": "^0.11.5", "@suid/icons-material": "^0.7.0", diff --git a/src/timelines/Home.tsx b/src/timelines/Home.tsx index 2a193f0..2330354 100644 --- a/src/timelines/Home.tsx +++ b/src/timelines/Home.tsx @@ -38,12 +38,14 @@ import BottomSheet from "../material/BottomSheet"; import { $settings } from "../settings/stores"; import { useStore } from "@nanostores/solid"; import { vibrate } from "../platform/hardware"; +import PullDownToRefresh from "./PullDownToRefresh"; const TimelinePanel: Component<{ client: mastodon.rest.Client; name: "home" | "public" | "trends"; prefetch?: boolean; }> = (props) => { + const [scrollLinked, setScrollLinked] = createSignal(); const [ timeline, snapshot, @@ -108,7 +110,18 @@ const TimelinePanel: Component<{ return ( <> -
    + refetchTimeline({ direction: "new" })} + /> +
    + setTimeout(() => { + setScrollLinked(e.parentElement!); + }, 0) + } + > {(item, index) => { return ( @@ -249,8 +262,9 @@ const Home: ParentComponent = (props) => { overflow: visible auto; max-width: 560px; height: 100%; - padding: 40px 16px; + padding: 0 16px; scroll-snap-align: center; + overscroll-behavior-block: none; @media (max-width: 600px) { padding: 0; diff --git a/src/timelines/PullDownToRefresh.tsx b/src/timelines/PullDownToRefresh.tsx new file mode 100644 index 0000000..81590ea --- /dev/null +++ b/src/timelines/PullDownToRefresh.tsx @@ -0,0 +1,200 @@ +import { + createEffect, + createRenderEffect, + createSignal, + onCleanup, + Show, + untrack, + type Component, + type Signal, +} from "solid-js"; +import { css } from "solid-styled"; +import { Refresh as RefreshIcon } from "@suid/icons-material"; +import { CircularProgress } from "@suid/material"; +import { + createEventListener, + makeEventListener, +} from "@solid-primitives/event-listener"; +import { + createViewportObserver, + createVisibilityObserver, +} from "@solid-primitives/intersection-observer"; + +const PullDownToRefresh: Component<{ + loading?: boolean; + linkedElement?: HTMLElement; + onRefresh?: () => void; +}> = (props) => { + let rootElement: HTMLDivElement; + const [pullDown, setPullDown] = createSignal(0); + + const pullDownDistance = () => { + if (props.loading) { + return 140; + } + return Math.max(Math.min(160, pullDown()), 0); + }; + + const obvx = createVisibilityObserver({ + threshold: 0.0001, + }); + + const rootVisible = obvx(() => rootElement); + + let released = true; + let v = 0; + let lts = -1; + let ds = 0; + let holding = false; + const M = 1; + const K = -10; + const D = -10; + const updatePullDown = (ts: number) => { + released = false; + try { + const x = untrack(pullDown); + const dt = lts !== -1 ? ts - lts : 1 / 60; + const fs = (ds / Math.pow(dt, 2)) * M; + const fh = (x + ds) * K + D * v; + const f = fs + fh; + const a = f / M; + v += a * dt; + if (holding && v < 0) { + v = 0 + } + setPullDown(x + v * dt); + if (Math.abs(x) > 1 || Math.abs(v) > 1) { + requestAnimationFrame(updatePullDown); + } else { + v = 0; + lts = -1; + } + if (!holding && untrack(pullDownDistance) >= 160 && !props.loading && props.onRefresh) { + setTimeout(props.onRefresh, 0) + } + } finally { + ds = 0; + released = true; + } + }; + const handleLinkedWheel = (event: WheelEvent) => { + const scrollTop = (event.target as HTMLElement).scrollTop; + if (scrollTop >= 0 && scrollTop < 1) { + ds = -(event.deltaY / window.devicePixelRatio); + if (released) { + released = false; + requestAnimationFrame(updatePullDown); + } + } + }; + + createEffect((cleanup?: () => void) => { + if (!rootVisible()) { + return; + } + cleanup?.(); + const element = props.linkedElement; + if (!element) return; + return makeEventListener(element, "wheel", handleLinkedWheel); + }); + + let lastTouchId: number | undefined = undefined; + let lastTouchScreenY = 0; + const handleTouch = (event: TouchEvent) => { + if (event.targetTouches.length > 1) { + lastTouchId = 0; + lastTouchScreenY; + return; + } + const item = event.targetTouches.item(0)!; + if (lastTouchId && item.identifier !== lastTouchId) { + lastTouchId = undefined; + lastTouchScreenY = 0; + return; + } + holding = true; + if (lastTouchScreenY !== 0) { + ds = item.screenY - lastTouchScreenY; + } + lastTouchScreenY = item.screenY; + if (released) { + released = false; + requestAnimationFrame(updatePullDown); + } + }; + + const handleTouchEnd = () => { + lastTouchId = undefined; + lastTouchScreenY = 0; + holding = false; + if (untrack(pullDownDistance) >= 160 && !props.loading && props.onRefresh) { + setTimeout(props.onRefresh, 0) + } + }; + + createEffect((cleanup?: () => void) => { + if (!rootVisible()) { + return; + } + cleanup?.(); + const element = props.linkedElement; + if (!element) return; + const cleanup0 = makeEventListener(element, "touchmove", handleTouch); + const cleanup1 = makeEventListener(element, "touchend", handleTouchEnd); + return () => (cleanup0(), cleanup1()); + }); + + css` + .pull-down { + width: 100%; + display: flex; + justify-content: center; + margin-top: -2rem; + height: calc(1px + 2rem); + } + + .indicator { + display: inline-flex; + justify-content: center; + align-items: center; + box-shadow: ${props.loading + ? "var(--tutu-shadow-e12)" + : "var(--tutu-shadow-e1)"}; + border-radius: 50%; + aspect-ratio: 1/1; + width: 2rem; + color: var(--tutu-color-primary); + transform: translateY(${`${pullDownDistance() - 2}px`}); + will-change: transform; + z-index: var(--tutu-zidx-nav); + background-color: var(--tutu-color-surface); + + > :global(.refresh-icon) { + transform: rotate( + ${`${((pullDownDistance() / 160) * 180).toString()}deg`} + ); + will-change: transform; + } + + > :global(.refresh-indicator) { + width: 1.5rem; + height: 1.5rem; + aspect-ratio: 1/1; + } + } + `; + return ( +
    + + } + > + + + +
    + ); +}; + +export default PullDownToRefresh; From 7db55298a3ffa6d7e59055eaeb3fcd0e23b4c8a7 Mon Sep 17 00:00:00 2001 From: thislight Date: Wed, 7 Aug 2024 17:04:54 +0800 Subject: [PATCH 058/300] PullDownToRefresh: init prototype --- bun.lockb | Bin 235447 -> 235946 bytes package.json | 1 + src/timelines/Home.tsx | 18 ++- src/timelines/PullDownToRefresh.tsx | 200 ++++++++++++++++++++++++++++ 4 files changed, 217 insertions(+), 2 deletions(-) create mode 100644 src/timelines/PullDownToRefresh.tsx diff --git a/bun.lockb b/bun.lockb index 16c0c62643a328abbaa36a81a12ea09f40e33ad6..be11679add9a734b762efc04028879c2d2e61fad 100755 GIT binary patch delta 41405 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 diff --git a/package.json b/package.json index 953d8c5..54e32ca 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "@nanostores/persistent": "^0.9.1", "@nanostores/solid": "^0.4.2", "@solid-primitives/event-listener": "^2.3.3", + "@solid-primitives/intersection-observer": "^2.1.6", "@solid-primitives/resize-observer": "^2.0.25", "@solidjs/router": "^0.11.5", "@suid/icons-material": "^0.7.0", diff --git a/src/timelines/Home.tsx b/src/timelines/Home.tsx index 2a193f0..2330354 100644 --- a/src/timelines/Home.tsx +++ b/src/timelines/Home.tsx @@ -38,12 +38,14 @@ import BottomSheet from "../material/BottomSheet"; import { $settings } from "../settings/stores"; import { useStore } from "@nanostores/solid"; import { vibrate } from "../platform/hardware"; +import PullDownToRefresh from "./PullDownToRefresh"; const TimelinePanel: Component<{ client: mastodon.rest.Client; name: "home" | "public" | "trends"; prefetch?: boolean; }> = (props) => { + const [scrollLinked, setScrollLinked] = createSignal(); const [ timeline, snapshot, @@ -108,7 +110,18 @@ const TimelinePanel: Component<{ return ( <> -
    + refetchTimeline({ direction: "new" })} + /> +
    + setTimeout(() => { + setScrollLinked(e.parentElement!); + }, 0) + } + > {(item, index) => { return ( @@ -249,8 +262,9 @@ const Home: ParentComponent = (props) => { overflow: visible auto; max-width: 560px; height: 100%; - padding: 40px 16px; + padding: 0 16px; scroll-snap-align: center; + overscroll-behavior-block: none; @media (max-width: 600px) { padding: 0; diff --git a/src/timelines/PullDownToRefresh.tsx b/src/timelines/PullDownToRefresh.tsx new file mode 100644 index 0000000..81590ea --- /dev/null +++ b/src/timelines/PullDownToRefresh.tsx @@ -0,0 +1,200 @@ +import { + createEffect, + createRenderEffect, + createSignal, + onCleanup, + Show, + untrack, + type Component, + type Signal, +} from "solid-js"; +import { css } from "solid-styled"; +import { Refresh as RefreshIcon } from "@suid/icons-material"; +import { CircularProgress } from "@suid/material"; +import { + createEventListener, + makeEventListener, +} from "@solid-primitives/event-listener"; +import { + createViewportObserver, + createVisibilityObserver, +} from "@solid-primitives/intersection-observer"; + +const PullDownToRefresh: Component<{ + loading?: boolean; + linkedElement?: HTMLElement; + onRefresh?: () => void; +}> = (props) => { + let rootElement: HTMLDivElement; + const [pullDown, setPullDown] = createSignal(0); + + const pullDownDistance = () => { + if (props.loading) { + return 140; + } + return Math.max(Math.min(160, pullDown()), 0); + }; + + const obvx = createVisibilityObserver({ + threshold: 0.0001, + }); + + const rootVisible = obvx(() => rootElement); + + let released = true; + let v = 0; + let lts = -1; + let ds = 0; + let holding = false; + const M = 1; + const K = -10; + const D = -10; + const updatePullDown = (ts: number) => { + released = false; + try { + const x = untrack(pullDown); + const dt = lts !== -1 ? ts - lts : 1 / 60; + const fs = (ds / Math.pow(dt, 2)) * M; + const fh = (x + ds) * K + D * v; + const f = fs + fh; + const a = f / M; + v += a * dt; + if (holding && v < 0) { + v = 0 + } + setPullDown(x + v * dt); + if (Math.abs(x) > 1 || Math.abs(v) > 1) { + requestAnimationFrame(updatePullDown); + } else { + v = 0; + lts = -1; + } + if (!holding && untrack(pullDownDistance) >= 160 && !props.loading && props.onRefresh) { + setTimeout(props.onRefresh, 0) + } + } finally { + ds = 0; + released = true; + } + }; + const handleLinkedWheel = (event: WheelEvent) => { + const scrollTop = (event.target as HTMLElement).scrollTop; + if (scrollTop >= 0 && scrollTop < 1) { + ds = -(event.deltaY / window.devicePixelRatio); + if (released) { + released = false; + requestAnimationFrame(updatePullDown); + } + } + }; + + createEffect((cleanup?: () => void) => { + if (!rootVisible()) { + return; + } + cleanup?.(); + const element = props.linkedElement; + if (!element) return; + return makeEventListener(element, "wheel", handleLinkedWheel); + }); + + let lastTouchId: number | undefined = undefined; + let lastTouchScreenY = 0; + const handleTouch = (event: TouchEvent) => { + if (event.targetTouches.length > 1) { + lastTouchId = 0; + lastTouchScreenY; + return; + } + const item = event.targetTouches.item(0)!; + if (lastTouchId && item.identifier !== lastTouchId) { + lastTouchId = undefined; + lastTouchScreenY = 0; + return; + } + holding = true; + if (lastTouchScreenY !== 0) { + ds = item.screenY - lastTouchScreenY; + } + lastTouchScreenY = item.screenY; + if (released) { + released = false; + requestAnimationFrame(updatePullDown); + } + }; + + const handleTouchEnd = () => { + lastTouchId = undefined; + lastTouchScreenY = 0; + holding = false; + if (untrack(pullDownDistance) >= 160 && !props.loading && props.onRefresh) { + setTimeout(props.onRefresh, 0) + } + }; + + createEffect((cleanup?: () => void) => { + if (!rootVisible()) { + return; + } + cleanup?.(); + const element = props.linkedElement; + if (!element) return; + const cleanup0 = makeEventListener(element, "touchmove", handleTouch); + const cleanup1 = makeEventListener(element, "touchend", handleTouchEnd); + return () => (cleanup0(), cleanup1()); + }); + + css` + .pull-down { + width: 100%; + display: flex; + justify-content: center; + margin-top: -2rem; + height: calc(1px + 2rem); + } + + .indicator { + display: inline-flex; + justify-content: center; + align-items: center; + box-shadow: ${props.loading + ? "var(--tutu-shadow-e12)" + : "var(--tutu-shadow-e1)"}; + border-radius: 50%; + aspect-ratio: 1/1; + width: 2rem; + color: var(--tutu-color-primary); + transform: translateY(${`${pullDownDistance() - 2}px`}); + will-change: transform; + z-index: var(--tutu-zidx-nav); + background-color: var(--tutu-color-surface); + + > :global(.refresh-icon) { + transform: rotate( + ${`${((pullDownDistance() / 160) * 180).toString()}deg`} + ); + will-change: transform; + } + + > :global(.refresh-indicator) { + width: 1.5rem; + height: 1.5rem; + aspect-ratio: 1/1; + } + } + `; + return ( +
    + + } + > + + + +
    + ); +}; + +export default PullDownToRefresh; From 1e6d4933b9046fb6b681747ac28020b49b5371ea Mon Sep 17 00:00:00 2001 From: thislight Date: Mon, 12 Aug 2024 11:05:20 +0800 Subject: [PATCH 059/300] PullDownToRefresh: adjust multiply rate for wheel --- src/timelines/PullDownToRefresh.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/timelines/PullDownToRefresh.tsx b/src/timelines/PullDownToRefresh.tsx index 81590ea..3aa7195 100644 --- a/src/timelines/PullDownToRefresh.tsx +++ b/src/timelines/PullDownToRefresh.tsx @@ -80,7 +80,7 @@ const PullDownToRefresh: Component<{ const handleLinkedWheel = (event: WheelEvent) => { const scrollTop = (event.target as HTMLElement).scrollTop; if (scrollTop >= 0 && scrollTop < 1) { - ds = -(event.deltaY / window.devicePixelRatio); + ds = -(event.deltaY / window.devicePixelRatio / 4); if (released) { released = false; requestAnimationFrame(updatePullDown); From 8787cb7ad038b6cfa4e88e24285c7da87e6b111f Mon Sep 17 00:00:00 2001 From: thislight Date: Mon, 12 Aug 2024 11:05:20 +0800 Subject: [PATCH 060/300] PullDownToRefresh: adjust multiply rate for wheel --- src/timelines/PullDownToRefresh.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/timelines/PullDownToRefresh.tsx b/src/timelines/PullDownToRefresh.tsx index 81590ea..3aa7195 100644 --- a/src/timelines/PullDownToRefresh.tsx +++ b/src/timelines/PullDownToRefresh.tsx @@ -80,7 +80,7 @@ const PullDownToRefresh: Component<{ const handleLinkedWheel = (event: WheelEvent) => { const scrollTop = (event.target as HTMLElement).scrollTop; if (scrollTop >= 0 && scrollTop < 1) { - ds = -(event.deltaY / window.devicePixelRatio); + ds = -(event.deltaY / window.devicePixelRatio / 4); if (released) { released = false; requestAnimationFrame(updatePullDown); From 1c0a83dbab78758961b2081ea57a5b31723d6e66 Mon Sep 17 00:00:00 2001 From: thislight Date: Mon, 12 Aug 2024 12:22:13 +0800 Subject: [PATCH 061/300] TimelinePanel: rewrite thread expand algorithm --- src/timelines/Home.tsx | 56 +++++++++++++++++++----------------- src/timelines/TootThread.tsx | 11 ++++--- 2 files changed, 36 insertions(+), 31 deletions(-) diff --git a/src/timelines/Home.tsx b/src/timelines/Home.tsx index 2330354..901fc37 100644 --- a/src/timelines/Home.tsx +++ b/src/timelines/Home.tsx @@ -55,6 +55,7 @@ const TimelinePanel: Component<{ ? props.client.v1.timelines[props.name] : props.client.v1.trends.statuses, ); + const [expandedThreadId, setExpandedThreadId] = createSignal(); const tlEndObserver = new IntersectionObserver(() => { if (untrack(() => props.prefetch) && !snapshot.loading) @@ -130,6 +131,12 @@ const TimelinePanel: Component<{ onBoost={(...args) => onBoost(index(), ...args)} onBookmark={(...args) => onBookmark(index(), ...args)} client={props.client} + expanded={item.id === expandedThreadId() ? 1 : 0} + onExpandChange={() => + setExpandedThreadId( + item.id !== expandedThreadId() ? item.id : undefined, + ) + } /> ); }} @@ -138,38 +145,33 @@ const TimelinePanel: Component<{
    tlEndObserver.observe(e)}>
    -
    +
    - -
    + -
    -
    - -
    - -
    -
    + + +
    ); }; diff --git a/src/timelines/TootThread.tsx b/src/timelines/TootThread.tsx index c23b8f4..bde32d4 100644 --- a/src/timelines/TootThread.tsx +++ b/src/timelines/TootThread.tsx @@ -13,12 +13,13 @@ type TootThreadProps = { onBoost?(client: mastodon.rest.Client, status: mastodon.v1.Status): void; onBookmark?(client: mastodon.rest.Client, status: mastodon.v1.Status): void; + onExpandChange?(level: 0 | 1 | 2): void; }; const TootThread: Component = (props) => { const status = () => props.status; const now = useTimeSource(); - const [expanded, setExpanded] = createSignal(false); + const expanded = () => props.expanded ?? 0; const [inReplyTo] = createResource( () => [props.client, status().inReplyToId || null] as const, @@ -65,10 +66,12 @@ const TootThread: Component = (props) => { } `; + const nextExpandLevel = [1, 2, 2] as const; + return (
    setExpanded((x) => !x)} + classList={{ "thread-line": !!inReplyTo(), expanded: expanded() > 0 }} + onClick={() => props.onExpandChange?.(nextExpandLevel[expanded()])} > = (props) => { 0} onBookmark={(s) => bookmark(s)} onRetoot={(s) => boost(s)} /> From 7c0fac95a0bb50b9aaa8aa4250d399240475a84e Mon Sep 17 00:00:00 2001 From: thislight Date: Mon, 12 Aug 2024 12:22:13 +0800 Subject: [PATCH 062/300] TimelinePanel: rewrite thread expand algorithm --- src/timelines/Home.tsx | 56 +++++++++++++++++++----------------- src/timelines/TootThread.tsx | 11 ++++--- 2 files changed, 36 insertions(+), 31 deletions(-) diff --git a/src/timelines/Home.tsx b/src/timelines/Home.tsx index 2330354..901fc37 100644 --- a/src/timelines/Home.tsx +++ b/src/timelines/Home.tsx @@ -55,6 +55,7 @@ const TimelinePanel: Component<{ ? props.client.v1.timelines[props.name] : props.client.v1.trends.statuses, ); + const [expandedThreadId, setExpandedThreadId] = createSignal(); const tlEndObserver = new IntersectionObserver(() => { if (untrack(() => props.prefetch) && !snapshot.loading) @@ -130,6 +131,12 @@ const TimelinePanel: Component<{ onBoost={(...args) => onBoost(index(), ...args)} onBookmark={(...args) => onBookmark(index(), ...args)} client={props.client} + expanded={item.id === expandedThreadId() ? 1 : 0} + onExpandChange={() => + setExpandedThreadId( + item.id !== expandedThreadId() ? item.id : undefined, + ) + } /> ); }} @@ -138,38 +145,33 @@ const TimelinePanel: Component<{
    tlEndObserver.observe(e)}>
    -
    +
    - -
    + -
    -
    - -
    - -
    -
    + + +
    ); }; diff --git a/src/timelines/TootThread.tsx b/src/timelines/TootThread.tsx index c23b8f4..bde32d4 100644 --- a/src/timelines/TootThread.tsx +++ b/src/timelines/TootThread.tsx @@ -13,12 +13,13 @@ type TootThreadProps = { onBoost?(client: mastodon.rest.Client, status: mastodon.v1.Status): void; onBookmark?(client: mastodon.rest.Client, status: mastodon.v1.Status): void; + onExpandChange?(level: 0 | 1 | 2): void; }; const TootThread: Component = (props) => { const status = () => props.status; const now = useTimeSource(); - const [expanded, setExpanded] = createSignal(false); + const expanded = () => props.expanded ?? 0; const [inReplyTo] = createResource( () => [props.client, status().inReplyToId || null] as const, @@ -65,10 +66,12 @@ const TootThread: Component = (props) => { } `; + const nextExpandLevel = [1, 2, 2] as const; + return (
    setExpanded((x) => !x)} + classList={{ "thread-line": !!inReplyTo(), expanded: expanded() > 0 }} + onClick={() => props.onExpandChange?.(nextExpandLevel[expanded()])} > = (props) => { 0} onBookmark={(s) => bookmark(s)} onRetoot={(s) => boost(s)} /> From 2d7b931ef86b2425fc36baf33e6bb8298b80c601 Mon Sep 17 00:00:00 2001 From: thislight Date: Mon, 12 Aug 2024 17:25:03 +0800 Subject: [PATCH 063/300] BottomSheet: first attempt for animation --- bun.lockb | Bin 235946 -> 236309 bytes index.html | 1 + package.json | 3 +- src/App.tsx | 4 +- src/material/BottomSheet.module.css | 5 +++ src/material/BottomSheet.tsx | 65 +++++++++++++++++++++++++++- src/platform/anim.ts | 42 ++++++++++++++++-- src/platform/host.ts | 12 +++++ src/platform/polyfills.ts | 8 ++++ src/timelines/Home.tsx | 50 ++++++++++++++++++--- src/timelines/MediaViewer.tsx | 4 -- src/timelines/TootBottomSheet.tsx | 18 +++++++- src/timelines/TootThread.tsx | 4 +- 13 files changed, 196 insertions(+), 20 deletions(-) create mode 100644 src/platform/host.ts create mode 100644 src/platform/polyfills.ts diff --git a/bun.lockb b/bun.lockb index be11679add9a734b762efc04028879c2d2e61fad..85207b1f00320ff6a328b0386731c22f601daf23 100755 GIT binary patch delta 41839 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 Tutu + diff --git a/package.json b/package.json index 54e32ca..e0b0a54 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,8 @@ "nanostores": "^0.9.5", "solid-js": "^1.8.18", "solid-styled": "^0.11.1", - "stacktrace-js": "^2.0.2" + "stacktrace-js": "^2.0.2", + "web-animations-js": "^2.3.2" }, "packageManager": "bun@1.1.21" } diff --git a/src/App.tsx b/src/App.tsx index 1522795..c3573a5 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -22,6 +22,7 @@ const AccountMastodonOAuth2Callback = lazy( ); const TimelineHome = lazy(() => import("./timelines/Home.js")); const Settings = lazy(() => import("./settings/Settings.js")); +const TootBottomSheet = lazy(() => import("./timelines/TootBottomSheet.js")); const Routing: Component = () => { return ( @@ -29,6 +30,7 @@ const Routing: Component = () => { + @@ -53,7 +55,7 @@ const App: Component = () => { ); }); -const UnexpectedError = lazy(() => import("./UnexpectedError.js")) + const UnexpectedError = lazy(() => import("./UnexpectedError.js")); return ( ) { + return { + top: `${top}px`, + left: `${left}px`, + height: `${height}px`, + width: `${width}px`, + }; +} + +const MOVE_SPEED = 1400; // 1400px/s, bottom sheet is big and a bit heavier than small papers + const BottomSheet: ParentComponent = (props) => { let element: HTMLDialogElement; + let animation: Animation | undefined; + const hero = useHeroSignal(HERO); createEffect(() => { if (props.open) { if (!element.open) { element.showModal(); + animateOpen(); } } else { if (element.open) { + if (animation) { + animation.cancel(); + } element.close(); } } }); + const animateOpen = () => { + // Do hero animation + const startRect = hero(); + console.debug("capture hero source", startRect); + if (!startRect) return; + const endRect = element.getBoundingClientRect(); + const easing = "ease-in-out"; + console.debug("easing", easing); + element.classList.add(styles.animated); + const distance = Math.sqrt( + Math.pow(Math.abs(startRect.top - endRect.top), 2) + + Math.pow(Math.abs(startRect.left - startRect.top), 2), + ); + const duration = (distance / MOVE_SPEED) * 1000; + animation = element.animate( + [composeAnimationFrame(startRect), composeAnimationFrame(endRect)], + { easing, duration }, + ); + const onAnimationEnd = () => { + element.classList.remove(styles.animated); + animation = undefined; + }; + animation.addEventListener("finish", onAnimationEnd); + animation.addEventListener("cancel", onAnimationEnd); + }; + + onCleanup(() => { + if (animation) { + animation.cancel(); + } + }); + return ( {props.children} diff --git a/src/platform/anim.ts b/src/platform/anim.ts index 75446ef..8fbcf29 100644 --- a/src/platform/anim.ts +++ b/src/platform/anim.ts @@ -1,13 +1,47 @@ -import { createContext, useContext, type Accessor } from "solid-js"; +import { + createContext, + createRenderEffect, + createSignal, + untrack, + useContext, + type Accessor, + type Signal, +} from "solid-js"; export type HeroSource = { - [key: string | symbol | number]: HTMLElement | undefined; + [key: string | symbol | number]: DOMRect | undefined; }; -const HeroSourceContext = createContext>(() => ({})); +const HeroSourceContext = createContext>(undefined); export const HeroSourceProvider = HeroSourceContext.Provider; -export function useHeroSource() { +function useHeroSource() { return useContext(HeroSourceContext); } + +export function useHeroSignal( + key: string | symbol | number, +): Accessor { + const source = useHeroSource(); + if (source) { + const [get, set] = createSignal(); + + createRenderEffect(() => { + const value = source[0](); + console.debug("value", value); + if (value[key]) { + set(value[key]); + source[1]((x) => { + const cpy = Object.assign({}, x); + delete cpy[key]; + return cpy; + }); + } + }); + + return get; + } else { + return () => undefined; + } +} diff --git a/src/platform/host.ts b/src/platform/host.ts new file mode 100644 index 0000000..f1a2e27 --- /dev/null +++ b/src/platform/host.ts @@ -0,0 +1,12 @@ +export function isiOS() { + return [ + 'iPad Simulator', + 'iPhone Simulator', + 'iPod Simulator', + 'iPad', + 'iPhone', + 'iPod' + ].includes(navigator.platform) + // iPad on iOS 13 detection + || (navigator.userAgent.includes("Mac") && "ontouchend" in document) +} \ No newline at end of file diff --git a/src/platform/polyfills.ts b/src/platform/polyfills.ts new file mode 100644 index 0000000..6897af7 --- /dev/null +++ b/src/platform/polyfills.ts @@ -0,0 +1,8 @@ +//! This module has side effect. +//! It recommended to include the module by diff --git a/package.json b/package.json index 54e32ca..e0b0a54 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,8 @@ "nanostores": "^0.9.5", "solid-js": "^1.8.18", "solid-styled": "^0.11.1", - "stacktrace-js": "^2.0.2" + "stacktrace-js": "^2.0.2", + "web-animations-js": "^2.3.2" }, "packageManager": "bun@1.1.21" } diff --git a/src/App.tsx b/src/App.tsx index 1522795..c3573a5 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -22,6 +22,7 @@ const AccountMastodonOAuth2Callback = lazy( ); const TimelineHome = lazy(() => import("./timelines/Home.js")); const Settings = lazy(() => import("./settings/Settings.js")); +const TootBottomSheet = lazy(() => import("./timelines/TootBottomSheet.js")); const Routing: Component = () => { return ( @@ -29,6 +30,7 @@ const Routing: Component = () => { + @@ -53,7 +55,7 @@ const App: Component = () => { ); }); -const UnexpectedError = lazy(() => import("./UnexpectedError.js")) + const UnexpectedError = lazy(() => import("./UnexpectedError.js")); return ( ) { + return { + top: `${top}px`, + left: `${left}px`, + height: `${height}px`, + width: `${width}px`, + }; +} + +const MOVE_SPEED = 1400; // 1400px/s, bottom sheet is big and a bit heavier than small papers + const BottomSheet: ParentComponent = (props) => { let element: HTMLDialogElement; + let animation: Animation | undefined; + const hero = useHeroSignal(HERO); createEffect(() => { if (props.open) { if (!element.open) { element.showModal(); + animateOpen(); } } else { if (element.open) { + if (animation) { + animation.cancel(); + } element.close(); } } }); + const animateOpen = () => { + // Do hero animation + const startRect = hero(); + console.debug("capture hero source", startRect); + if (!startRect) return; + const endRect = element.getBoundingClientRect(); + const easing = "ease-in-out"; + console.debug("easing", easing); + element.classList.add(styles.animated); + const distance = Math.sqrt( + Math.pow(Math.abs(startRect.top - endRect.top), 2) + + Math.pow(Math.abs(startRect.left - startRect.top), 2), + ); + const duration = (distance / MOVE_SPEED) * 1000; + animation = element.animate( + [composeAnimationFrame(startRect), composeAnimationFrame(endRect)], + { easing, duration }, + ); + const onAnimationEnd = () => { + element.classList.remove(styles.animated); + animation = undefined; + }; + animation.addEventListener("finish", onAnimationEnd); + animation.addEventListener("cancel", onAnimationEnd); + }; + + onCleanup(() => { + if (animation) { + animation.cancel(); + } + }); + return ( {props.children} diff --git a/src/platform/anim.ts b/src/platform/anim.ts index 75446ef..8fbcf29 100644 --- a/src/platform/anim.ts +++ b/src/platform/anim.ts @@ -1,13 +1,47 @@ -import { createContext, useContext, type Accessor } from "solid-js"; +import { + createContext, + createRenderEffect, + createSignal, + untrack, + useContext, + type Accessor, + type Signal, +} from "solid-js"; export type HeroSource = { - [key: string | symbol | number]: HTMLElement | undefined; + [key: string | symbol | number]: DOMRect | undefined; }; -const HeroSourceContext = createContext>(() => ({})); +const HeroSourceContext = createContext>(undefined); export const HeroSourceProvider = HeroSourceContext.Provider; -export function useHeroSource() { +function useHeroSource() { return useContext(HeroSourceContext); } + +export function useHeroSignal( + key: string | symbol | number, +): Accessor { + const source = useHeroSource(); + if (source) { + const [get, set] = createSignal(); + + createRenderEffect(() => { + const value = source[0](); + console.debug("value", value); + if (value[key]) { + set(value[key]); + source[1]((x) => { + const cpy = Object.assign({}, x); + delete cpy[key]; + return cpy; + }); + } + }); + + return get; + } else { + return () => undefined; + } +} diff --git a/src/platform/host.ts b/src/platform/host.ts new file mode 100644 index 0000000..f1a2e27 --- /dev/null +++ b/src/platform/host.ts @@ -0,0 +1,12 @@ +export function isiOS() { + return [ + 'iPad Simulator', + 'iPhone Simulator', + 'iPod Simulator', + 'iPad', + 'iPhone', + 'iPod' + ].includes(navigator.platform) + // iPad on iOS 13 detection + || (navigator.userAgent.includes("Mac") && "ontouchend" in document) +} \ No newline at end of file diff --git a/src/platform/polyfills.ts b/src/platform/polyfills.ts new file mode 100644 index 0000000..6897af7 --- /dev/null +++ b/src/platform/polyfills.ts @@ -0,0 +1,8 @@ +//! This module has side effect. +//! It recommended to include the module by