diff --git a/.eslintrc.cjs b/.eslintrc.cjs
new file mode 100644
index 0000000..d6c9537
--- /dev/null
+++ b/.eslintrc.cjs
@@ -0,0 +1,18 @@
+module.exports = {
+ root: true,
+ env: { browser: true, es2020: true },
+ extends: [
+ 'eslint:recommended',
+ 'plugin:@typescript-eslint/recommended',
+ 'plugin:react-hooks/recommended',
+ ],
+ ignorePatterns: ['dist', '.eslintrc.cjs'],
+ parser: '@typescript-eslint/parser',
+ plugins: ['react-refresh'],
+ rules: {
+ 'react-refresh/only-export-components': [
+ 'warn',
+ { allowConstantExport: true },
+ ],
+ },
+}
diff --git a/.github/workflows/vercel-deploy.yml b/.github/workflows/vercel-deploy.yml
new file mode 100644
index 0000000..86aafd1
--- /dev/null
+++ b/.github/workflows/vercel-deploy.yml
@@ -0,0 +1,23 @@
+name: Deploy to Vercel
+
+env:
+ VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
+ VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
+
+on:
+ push:
+ branches:
+ - main # Change this to your main branch name
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Install Vercel CLI
+ run: npm install --global vercel@latest
+ - name: Pull Vercel Environment Information
+ run: vercel pull --yes --environment=production --token=${{ secrets.VERCEL_TOKEN }}
+ - name: Build Project Artifacts
+ run: vercel build --token=${{ secrets.VERCEL_TOKEN }}
+ - name: Deploy Project Artifacts to Vercel
+ run: vercel deploy --prebuilt --prod --token=${{ secrets.VERCEL_TOKEN }}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..ed9d574
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,27 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
+
+
+*.vercel
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..2aa288c
--- /dev/null
+++ b/README.md
@@ -0,0 +1,24 @@
+# Typing Rocks
+
+> A simple astro + React typing test.
+
+[Typing.rocks](typing.rocks)
+
+## Roadmap
+
+- [x] type in input
+- [x] random word list
+- [x] change word count
+- [ ] handle incorrectly typed words
+ - [ ] discolor input if current word is mistyped
+- [ ] calculate WPM
+ - [x] basic implementation based off original wordlist length + spaces
+ - [ ] calculate WPM based off correctly typed words and display accuracy
+- [x] base theme
+- [ ] auto deploy github action
+
+### Later
+
+- [ ] different languages
+- [x] different themes
+ - [x] easy theme addition (relatively)
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..0166c60
--- /dev/null
+++ b/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ Typing Rocks
+
+
+
+
+
+
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..2214999
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,3901 @@
+{
+ "name": "react-ts",
+ "version": "0.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "react-ts",
+ "version": "0.0.0",
+ "dependencies": {
+ "@fontsource/nunito": "^5.0.15",
+ "@nanostores/persistent": "^0.9.1",
+ "@nanostores/react": "^0.7.1",
+ "nanostores": "^0.9.5",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0"
+ },
+ "devDependencies": {
+ "@types/react": "^18.2.37",
+ "@types/react-dom": "^18.2.15",
+ "@typescript-eslint/eslint-plugin": "^6.10.0",
+ "@typescript-eslint/parser": "^6.10.0",
+ "@vitejs/plugin-react": "^4.2.0",
+ "autoprefixer": "^10.4.16",
+ "eslint": "^8.53.0",
+ "eslint-plugin-react-hooks": "^4.6.0",
+ "eslint-plugin-react-refresh": "^0.4.4",
+ "postcss": "^8.4.31",
+ "tailwindcss": "^3.3.5",
+ "tw-colors": "^3.3.1",
+ "typescript": "^5.2.2",
+ "vite": "^5.0.0",
+ "vite-tsconfig-paths": "^4.2.1"
+ }
+ },
+ "node_modules/@aashutoshrathi/word-wrap": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
+ "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/@alloc/quick-lru": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
+ "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@ampproject/remapping": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
+ "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.0",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.22.13",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
+ "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/highlight": "^7.22.13",
+ "chalk": "^2.4.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/compat-data": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.3.tgz",
+ "integrity": "sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/core": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.3.tgz",
+ "integrity": "sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==",
+ "dev": true,
+ "dependencies": {
+ "@ampproject/remapping": "^2.2.0",
+ "@babel/code-frame": "^7.22.13",
+ "@babel/generator": "^7.23.3",
+ "@babel/helper-compilation-targets": "^7.22.15",
+ "@babel/helper-module-transforms": "^7.23.3",
+ "@babel/helpers": "^7.23.2",
+ "@babel/parser": "^7.23.3",
+ "@babel/template": "^7.22.15",
+ "@babel/traverse": "^7.23.3",
+ "@babel/types": "^7.23.3",
+ "convert-source-map": "^2.0.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.3",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/babel"
+ }
+ },
+ "node_modules/@babel/core/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/generator": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.3.tgz",
+ "integrity": "sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.23.3",
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "@jridgewell/trace-mapping": "^0.3.17",
+ "jsesc": "^2.5.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets": {
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz",
+ "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/compat-data": "^7.22.9",
+ "@babel/helper-validator-option": "^7.22.15",
+ "browserslist": "^4.21.9",
+ "lru-cache": "^5.1.1",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/helper-environment-visitor": {
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
+ "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-function-name": {
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
+ "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/template": "^7.22.15",
+ "@babel/types": "^7.23.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-hoist-variables": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
+ "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-imports": {
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz",
+ "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.22.15"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-transforms": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz",
+ "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-module-imports": "^7.22.15",
+ "@babel/helper-simple-access": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "@babel/helper-validator-identifier": "^7.22.20"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-plugin-utils": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz",
+ "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-simple-access": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz",
+ "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-split-export-declaration": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
+ "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
+ "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
+ "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-option": {
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz",
+ "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helpers": {
+ "version": "7.23.2",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz",
+ "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/template": "^7.22.15",
+ "@babel/traverse": "^7.23.2",
+ "@babel/types": "^7.23.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight": {
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz",
+ "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.22.20",
+ "chalk": "^2.4.2",
+ "js-tokens": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.3.tgz",
+ "integrity": "sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==",
+ "dev": true,
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-jsx-self": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.23.3.tgz",
+ "integrity": "sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-jsx-source": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.23.3.tgz",
+ "integrity": "sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/template": {
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
+ "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.22.13",
+ "@babel/parser": "^7.22.15",
+ "@babel/types": "^7.22.15"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.3.tgz",
+ "integrity": "sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.22.13",
+ "@babel/generator": "^7.23.3",
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-function-name": "^7.23.0",
+ "@babel/helper-hoist-variables": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "@babel/parser": "^7.23.3",
+ "@babel/types": "^7.23.3",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.3.tgz",
+ "integrity": "sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.22.5",
+ "@babel/helper-validator-identifier": "^7.22.20",
+ "to-fast-properties": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.19.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.5.tgz",
+ "integrity": "sha512-bhvbzWFF3CwMs5tbjf3ObfGqbl/17ict2/uwOSfr3wmxDE6VdS2GqY/FuzIPe0q0bdhj65zQsvqfArI9MY6+AA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.19.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.5.tgz",
+ "integrity": "sha512-5d1OkoJxnYQfmC+Zd8NBFjkhyCNYwM4n9ODrycTFY6Jk1IGiZ+tjVJDDSwDt77nK+tfpGP4T50iMtVi4dEGzhQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.19.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.5.tgz",
+ "integrity": "sha512-9t+28jHGL7uBdkBjL90QFxe7DVA+KGqWlHCF8ChTKyaKO//VLuoBricQCgwhOjA1/qOczsw843Fy4cbs4H3DVA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.19.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.5.tgz",
+ "integrity": "sha512-mvXGcKqqIqyKoxq26qEDPHJuBYUA5KizJncKOAf9eJQez+L9O+KfvNFu6nl7SCZ/gFb2QPaRqqmG0doSWlgkqw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.19.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.5.tgz",
+ "integrity": "sha512-Ly8cn6fGLNet19s0X4unjcniX24I0RqjPv+kurpXabZYSXGM4Pwpmf85WHJN3lAgB8GSth7s5A0r856S+4DyiA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.19.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.5.tgz",
+ "integrity": "sha512-GGDNnPWTmWE+DMchq1W8Sd0mUkL+APvJg3b11klSGUDvRXh70JqLAO56tubmq1s2cgpVCSKYywEiKBfju8JztQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.19.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.5.tgz",
+ "integrity": "sha512-1CCwDHnSSoA0HNwdfoNY0jLfJpd7ygaLAp5EHFos3VWJCRX9DMwWODf96s9TSse39Br7oOTLryRVmBoFwXbuuQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.19.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.5.tgz",
+ "integrity": "sha512-lrWXLY/vJBzCPC51QN0HM71uWgIEpGSjSZZADQhq7DKhPcI6NH1IdzjfHkDQws2oNpJKpR13kv7/pFHBbDQDwQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.19.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.5.tgz",
+ "integrity": "sha512-o3vYippBmSrjjQUCEEiTZ2l+4yC0pVJD/Dl57WfPwwlvFkrxoSO7rmBZFii6kQB3Wrn/6GwJUPLU5t52eq2meA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.19.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.5.tgz",
+ "integrity": "sha512-MkjHXS03AXAkNp1KKkhSKPOCYztRtK+KXDNkBa6P78F8Bw0ynknCSClO/ztGszILZtyO/lVKpa7MolbBZ6oJtQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.19.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.5.tgz",
+ "integrity": "sha512-42GwZMm5oYOD/JHqHska3Jg0r+XFb/fdZRX+WjADm3nLWLcIsN27YKtqxzQmGNJgu0AyXg4HtcSK9HuOk3v1Dw==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.19.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.5.tgz",
+ "integrity": "sha512-kcjndCSMitUuPJobWCnwQ9lLjiLZUR3QLQmlgaBfMX23UEa7ZOrtufnRds+6WZtIS9HdTXqND4yH8NLoVVIkcg==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.19.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.5.tgz",
+ "integrity": "sha512-yJAxJfHVm0ZbsiljbtFFP1BQKLc8kUF6+17tjQ78QjqjAQDnhULWiTA6u0FCDmYT1oOKS9PzZ2z0aBI+Mcyj7Q==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.19.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.5.tgz",
+ "integrity": "sha512-5u8cIR/t3gaD6ad3wNt1MNRstAZO+aNyBxu2We8X31bA8XUNyamTVQwLDA1SLoPCUehNCymhBhK3Qim1433Zag==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.19.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.5.tgz",
+ "integrity": "sha512-Z6JrMyEw/EmZBD/OFEFpb+gao9xJ59ATsoTNlj39jVBbXqoZm4Xntu6wVmGPB/OATi1uk/DB+yeDPv2E8PqZGw==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.19.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.5.tgz",
+ "integrity": "sha512-psagl+2RlK1z8zWZOmVdImisMtrUxvwereIdyJTmtmHahJTKb64pAcqoPlx6CewPdvGvUKe2Jw+0Z/0qhSbG1A==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.19.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.5.tgz",
+ "integrity": "sha512-kL2l+xScnAy/E/3119OggX8SrWyBEcqAh8aOY1gr4gPvw76la2GlD4Ymf832UCVbmuWeTf2adkZDK+h0Z/fB4g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.19.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.5.tgz",
+ "integrity": "sha512-sPOfhtzFufQfTBgRnE1DIJjzsXukKSvZxloZbkJDG383q0awVAq600pc1nfqBcl0ice/WN9p4qLc39WhBShRTA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.19.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.5.tgz",
+ "integrity": "sha512-dGZkBXaafuKLpDSjKcB0ax0FL36YXCvJNnztjKV+6CO82tTYVDSH2lifitJ29jxRMoUhgkg9a+VA/B03WK5lcg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.19.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.5.tgz",
+ "integrity": "sha512-dWVjD9y03ilhdRQ6Xig1NWNgfLtf2o/STKTS+eZuF90fI2BhbwD6WlaiCGKptlqXlURVB5AUOxUj09LuwKGDTg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.19.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.5.tgz",
+ "integrity": "sha512-4liggWIA4oDgUxqpZwrDhmEfAH4d0iljanDOK7AnVU89T6CzHon/ony8C5LeOdfgx60x5cnQJFZwEydVlYx4iw==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.19.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.5.tgz",
+ "integrity": "sha512-czTrygUsB/jlM8qEW5MD8bgYU2Xg14lo6kBDXW6HdxKjh8M5PzETGiSHaz9MtbXBYDloHNUAUW2tMiKW4KM9Mw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+ "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.10.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
+ "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz",
+ "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.6.0",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/globals": {
+ "version": "13.23.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz",
+ "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@eslint/js": {
+ "version": "8.54.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.54.0.tgz",
+ "integrity": "sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@fontsource/nunito": {
+ "version": "5.0.15",
+ "resolved": "https://registry.npmjs.org/@fontsource/nunito/-/nunito-5.0.15.tgz",
+ "integrity": "sha512-o36habKjgySoJPJJUR5s+Iv3E1FyzgKXxPLiMODJV4pzVMm17szTicRIE2CT1VrZg38SPTvc+/3znJCfEc99vA=="
+ },
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.11.13",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz",
+ "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==",
+ "dev": true,
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^2.0.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/object-schema": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz",
+ "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==",
+ "dev": true
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
+ "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
+ "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
+ "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.4.15",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
+ "dev": true
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.20",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz",
+ "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@nanostores/persistent": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/@nanostores/persistent/-/persistent-0.9.1.tgz",
+ "integrity": "sha512-ow57Hxm5VMaI5GHET/cVk8hX/iKMmbhcGrB9owfN8p8OHiiJgUlYxe1giacwlAALJXAh2t8bxXh42hHb64BCEA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "engines": {
+ "node": "^16.0.0 || ^18.0.0 || >=20.0.0"
+ },
+ "peerDependencies": {
+ "nanostores": "^0.9.0"
+ }
+ },
+ "node_modules/@nanostores/react": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/@nanostores/react/-/react-0.7.1.tgz",
+ "integrity": "sha512-EXQg9N4MdI4eJQz/AZLIx3hxQ6BuBmV4Q55bCd5YCSgEOAW7tGTsIZxpRXxvxLXzflNvHTBvfrDNY38TlSVBkQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "engines": {
+ "node": "^16.0.0 || ^18.0.0 || >=20.0.0"
+ },
+ "peerDependencies": {
+ "nanostores": "^0.9.0",
+ "react": ">=18.0.0"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.4.1.tgz",
+ "integrity": "sha512-Ss4suS/sd+6xLRu+MLCkED2mUrAyqHmmvZB+zpzZ9Znn9S8wCkTQCJaQ8P8aHofnvG5L16u9MVnJjCqioPErwQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.4.1.tgz",
+ "integrity": "sha512-sRSkGTvGsARwWd7TzC8LKRf8FiPn7257vd/edzmvG4RIr9x68KBN0/Ek48CkuUJ5Pj/Dp9vKWv6PEupjKWjTYA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.4.1.tgz",
+ "integrity": "sha512-nz0AiGrrXyaWpsmBXUGOBiRDU0wyfSXbFuF98pPvIO8O6auQsPG6riWsfQqmCCC5FNd8zKQ4JhgugRNAkBJ8mQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.4.1.tgz",
+ "integrity": "sha512-Ogqvf4/Ve/faMaiPRvzsJEqajbqs00LO+8vtrPBVvLgdw4wBg6ZDXdkDAZO+4MLnrc8mhGV6VJAzYScZdPLtJg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.4.1.tgz",
+ "integrity": "sha512-9zc2tqlr6HfO+hx9+wktUlWTRdje7Ub15iJqKcqg5uJZ+iKqmd2CMxlgPpXi7+bU7bjfDIuvCvnGk7wewFEhCg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.4.1.tgz",
+ "integrity": "sha512-phLb1fN3rq2o1j1v+nKxXUTSJnAhzhU0hLrl7Qzb0fLpwkGMHDem+o6d+ZI8+/BlTXfMU4kVWGvy6g9k/B8L6Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.4.1.tgz",
+ "integrity": "sha512-M2sDtw4tf57VPSjbTAN/lz1doWUqO2CbQuX3L9K6GWIR5uw9j+ROKCvvUNBY8WUbMxwaoc8mH9HmmBKsLht7+w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.4.1.tgz",
+ "integrity": "sha512-mHIlRLX+hx+30cD6c4BaBOsSqdnCE4ok7/KDvjHYAHoSuveoMMxIisZFvcLhUnyZcPBXDGZTuBoalcuh43UfQQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.4.1.tgz",
+ "integrity": "sha512-tB+RZuDi3zxFx7vDrjTNGVLu2KNyzYv+UY8jz7e4TMEoAj7iEt8Qk6xVu6mo3pgjnsHj6jnq3uuRsHp97DLwOA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.4.1.tgz",
+ "integrity": "sha512-Hdn39PzOQowK/HZzYpCuZdJC91PE6EaGbTe2VCA9oq2u18evkisQfws0Smh9QQGNNRa/T7MOuGNQoLeXhhE3PQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.4.1.tgz",
+ "integrity": "sha512-tLpKb1Elm9fM8c5w3nl4N1eLTP4bCqTYw9tqUBxX8/hsxqHO3dxc2qPbZ9PNkdK4tg4iLEYn0pOUnVByRd2CbA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.4.1.tgz",
+ "integrity": "sha512-eAhItDX9yQtZVM3yvXS/VR3qPqcnXvnLyx1pLXl4JzyNMBNO3KC986t/iAg2zcMzpAp9JSvxB5VZGnBiNoA98w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@types/babel__core": {
+ "version": "7.20.4",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.4.tgz",
+ "integrity": "sha512-mLnSC22IC4vcWiuObSRjrLd9XcBTGf59vUSoq2jkQDJ/QQ8PMI9rSuzE+aEV8karUMbskw07bKYoUJCKTUaygg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/parser": "^7.20.7",
+ "@babel/types": "^7.20.7",
+ "@types/babel__generator": "*",
+ "@types/babel__template": "*",
+ "@types/babel__traverse": "*"
+ }
+ },
+ "node_modules/@types/babel__generator": {
+ "version": "7.6.7",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.7.tgz",
+ "integrity": "sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__template": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
+ "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
+ "dev": true,
+ "dependencies": {
+ "@babel/parser": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__traverse": {
+ "version": "7.20.4",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz",
+ "integrity": "sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.20.7"
+ }
+ },
+ "node_modules/@types/json-schema": {
+ "version": "7.0.15",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+ "dev": true
+ },
+ "node_modules/@types/prop-types": {
+ "version": "15.7.10",
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.10.tgz",
+ "integrity": "sha512-mxSnDQxPqsZxmeShFH+uwQ4kO4gcJcGahjjMFeLbKE95IAZiiZyiEepGZjtXJ7hN/yfu0bu9xN2ajcU0JcxX6A==",
+ "dev": true
+ },
+ "node_modules/@types/react": {
+ "version": "18.2.37",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.37.tgz",
+ "integrity": "sha512-RGAYMi2bhRgEXT3f4B92WTohopH6bIXw05FuGlmJEnv/omEn190+QYEIYxIAuIBdKgboYYdVved2p1AxZVQnaw==",
+ "dev": true,
+ "dependencies": {
+ "@types/prop-types": "*",
+ "@types/scheduler": "*",
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/@types/react-dom": {
+ "version": "18.2.15",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.15.tgz",
+ "integrity": "sha512-HWMdW+7r7MR5+PZqJF6YFNSCtjz1T0dsvo/f1BV6HkV+6erD/nA7wd9NM00KVG83zf2nJ7uATPO9ttdIPvi3gg==",
+ "dev": true,
+ "dependencies": {
+ "@types/react": "*"
+ }
+ },
+ "node_modules/@types/scheduler": {
+ "version": "0.16.6",
+ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.6.tgz",
+ "integrity": "sha512-Vlktnchmkylvc9SnwwwozTv04L/e1NykF5vgoQ0XTmI8DD+wxfjQuHuvHS3p0r2jz2x2ghPs2h1FVeDirIteWA==",
+ "dev": true
+ },
+ "node_modules/@types/semver": {
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.5.tgz",
+ "integrity": "sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg==",
+ "dev": true
+ },
+ "node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.11.0.tgz",
+ "integrity": "sha512-uXnpZDc4VRjY4iuypDBKzW1rz9T5YBBK0snMn8MaTSNd2kMlj50LnLBABELjJiOL5YHk7ZD8hbSpI9ubzqYI0w==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/regexpp": "^4.5.1",
+ "@typescript-eslint/scope-manager": "6.11.0",
+ "@typescript-eslint/type-utils": "6.11.0",
+ "@typescript-eslint/utils": "6.11.0",
+ "@typescript-eslint/visitor-keys": "6.11.0",
+ "debug": "^4.3.4",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.4",
+ "natural-compare": "^1.4.0",
+ "semver": "^7.5.4",
+ "ts-api-utils": "^1.0.1"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha",
+ "eslint": "^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/parser": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.11.0.tgz",
+ "integrity": "sha512-+whEdjk+d5do5nxfxx73oanLL9ghKO3EwM9kBCkUtWMRwWuPaFv9ScuqlYfQ6pAD6ZiJhky7TZ2ZYhrMsfMxVQ==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "6.11.0",
+ "@typescript-eslint/types": "6.11.0",
+ "@typescript-eslint/typescript-estree": "6.11.0",
+ "@typescript-eslint/visitor-keys": "6.11.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.11.0.tgz",
+ "integrity": "sha512-0A8KoVvIURG4uhxAdjSaxy8RdRE//HztaZdG8KiHLP8WOXSk0vlF7Pvogv+vlJA5Rnjj/wDcFENvDaHb+gKd1A==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "6.11.0",
+ "@typescript-eslint/visitor-keys": "6.11.0"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/type-utils": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.11.0.tgz",
+ "integrity": "sha512-nA4IOXwZtqBjIoYrJcYxLRO+F9ri+leVGoJcMW1uqr4r1Hq7vW5cyWrA43lFbpRvQ9XgNrnfLpIkO3i1emDBIA==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/typescript-estree": "6.11.0",
+ "@typescript-eslint/utils": "6.11.0",
+ "debug": "^4.3.4",
+ "ts-api-utils": "^1.0.1"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/types": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.11.0.tgz",
+ "integrity": "sha512-ZbEzuD4DwEJxwPqhv3QULlRj8KYTAnNsXxmfuUXFCxZmO6CF2gM/y+ugBSAQhrqaJL3M+oe4owdWunaHM6beqA==",
+ "dev": true,
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.11.0.tgz",
+ "integrity": "sha512-Aezzv1o2tWJwvZhedzvD5Yv7+Lpu1by/U1LZ5gLc4tCx8jUmuSCMioPFRjliN/6SJIvY6HpTtJIWubKuYYYesQ==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "6.11.0",
+ "@typescript-eslint/visitor-keys": "6.11.0",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "semver": "^7.5.4",
+ "ts-api-utils": "^1.0.1"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/utils": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.11.0.tgz",
+ "integrity": "sha512-p23ibf68fxoZy605dc0dQAEoUsoiNoP3MD9WQGiHLDuTSOuqoTsa4oAy+h3KDkTcxbbfOtUjb9h3Ta0gT4ug2g==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "@types/json-schema": "^7.0.12",
+ "@types/semver": "^7.5.0",
+ "@typescript-eslint/scope-manager": "6.11.0",
+ "@typescript-eslint/types": "6.11.0",
+ "@typescript-eslint/typescript-estree": "6.11.0",
+ "semver": "^7.5.4"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.11.0.tgz",
+ "integrity": "sha512-+SUN/W7WjBr05uRxPggJPSzyB8zUpaYo2hByKasWbqr3PM8AXfZt8UHdNpBS1v9SA62qnSSMF3380SwDqqprgQ==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "6.11.0",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@ungap/structured-clone": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
+ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
+ "dev": true
+ },
+ "node_modules/@vitejs/plugin-react": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.2.0.tgz",
+ "integrity": "sha512-+MHTH/e6H12kRp5HUkzOGqPMksezRMmW+TNzlh/QXfI8rRf6l2Z2yH/v12no1UvTwhZgEDMuQ7g7rrfMseU6FQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.23.3",
+ "@babel/plugin-transform-react-jsx-self": "^7.23.3",
+ "@babel/plugin-transform-react-jsx-source": "^7.23.3",
+ "@types/babel__core": "^7.20.4",
+ "react-refresh": "^0.14.0"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "vite": "^4.2.0 || ^5.0.0"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "8.11.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
+ "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/any-promise": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
+ "dev": true
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dev": true,
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/arg": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
+ "dev": true
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "node_modules/array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/autoprefixer": {
+ "version": "10.4.16",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz",
+ "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/autoprefixer"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "browserslist": "^4.21.10",
+ "caniuse-lite": "^1.0.30001538",
+ "fraction.js": "^4.3.6",
+ "normalize-range": "^0.1.2",
+ "picocolors": "^1.0.0",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "bin": {
+ "autoprefixer": "bin/autoprefixer"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ },
+ "peerDependencies": {
+ "postcss": "^8.1.0"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.22.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz",
+ "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001541",
+ "electron-to-chromium": "^1.4.535",
+ "node-releases": "^2.0.13",
+ "update-browserslist-db": "^1.0.13"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camelcase-css": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001563",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001563.tgz",
+ "integrity": "sha512-na2WUmOxnwIZtwnFI2CZ/3er0wdNzU7hN+cPYz/z2ajHThnkWjNBOpEPP4n+4r2WPM847JaMotaJE3bnfzjyKw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ]
+ },
+ "node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chokidar/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/color": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
+ "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1",
+ "color-string": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=12.5.0"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
+ },
+ "node_modules/color-string": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
+ "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "^1.0.0",
+ "simple-swizzle": "^0.2.2"
+ }
+ },
+ "node_modules/color/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/commander": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true
+ },
+ "node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "dev": true,
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/csstype": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
+ "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==",
+ "dev": true
+ },
+ "node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "node_modules/didyoumean": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
+ "dev": true
+ },
+ "node_modules/dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "dependencies": {
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/dlv": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
+ "dev": true
+ },
+ "node_modules/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.4.588",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.588.tgz",
+ "integrity": "sha512-soytjxwbgcCu7nh5Pf4S2/4wa6UIu+A3p03U2yVr53qGxi1/VTR3ENI+p50v+UxqqZAfl48j3z55ud7VHIOr9w==",
+ "dev": true
+ },
+ "node_modules/esbuild": {
+ "version": "0.19.5",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.5.tgz",
+ "integrity": "sha512-bUxalY7b1g8vNhQKdB24QDmHeY4V4tw/s6Ak5z+jJX9laP5MoQseTOMemAr0gxssjNcH0MCViG8ONI2kksvfFQ==",
+ "dev": true,
+ "hasInstallScript": true,
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/android-arm": "0.19.5",
+ "@esbuild/android-arm64": "0.19.5",
+ "@esbuild/android-x64": "0.19.5",
+ "@esbuild/darwin-arm64": "0.19.5",
+ "@esbuild/darwin-x64": "0.19.5",
+ "@esbuild/freebsd-arm64": "0.19.5",
+ "@esbuild/freebsd-x64": "0.19.5",
+ "@esbuild/linux-arm": "0.19.5",
+ "@esbuild/linux-arm64": "0.19.5",
+ "@esbuild/linux-ia32": "0.19.5",
+ "@esbuild/linux-loong64": "0.19.5",
+ "@esbuild/linux-mips64el": "0.19.5",
+ "@esbuild/linux-ppc64": "0.19.5",
+ "@esbuild/linux-riscv64": "0.19.5",
+ "@esbuild/linux-s390x": "0.19.5",
+ "@esbuild/linux-x64": "0.19.5",
+ "@esbuild/netbsd-x64": "0.19.5",
+ "@esbuild/openbsd-x64": "0.19.5",
+ "@esbuild/sunos-x64": "0.19.5",
+ "@esbuild/win32-arm64": "0.19.5",
+ "@esbuild/win32-ia32": "0.19.5",
+ "@esbuild/win32-x64": "0.19.5"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "8.54.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.54.0.tgz",
+ "integrity": "sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.6.1",
+ "@eslint/eslintrc": "^2.1.3",
+ "@eslint/js": "8.54.0",
+ "@humanwhocodes/config-array": "^0.11.13",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "@ungap/structured-clone": "^1.2.0",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.2.2",
+ "eslint-visitor-keys": "^3.4.3",
+ "espree": "^9.6.1",
+ "esquery": "^1.4.2",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3",
+ "strip-ansi": "^6.0.1",
+ "text-table": "^0.2.0"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-plugin-react-hooks": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz",
+ "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0"
+ }
+ },
+ "node_modules/eslint-plugin-react-refresh": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.4.tgz",
+ "integrity": "sha512-eD83+65e8YPVg6603Om2iCIwcQJf/y7++MWm4tACtEswFLYMwxwVWAfwN+e19f5Ad/FOyyNg9Dfi5lXhH3Y3rA==",
+ "dev": true,
+ "peerDependencies": {
+ "eslint": ">=7"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/eslint/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/eslint/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/eslint/node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/globals": {
+ "version": "13.23.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz",
+ "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/eslint/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/espree": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^8.9.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
+ "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+ "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true
+ },
+ "node_modules/fastq": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
+ "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
+ "dev": true,
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "dependencies": {
+ "flat-cache": "^3.0.4"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
+ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
+ "dev": true,
+ "bin": {
+ "flat": "cli.js"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
+ "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
+ "dev": true,
+ "dependencies": {
+ "flatted": "^3.2.9",
+ "keyv": "^4.5.3",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.2.9",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz",
+ "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==",
+ "dev": true
+ },
+ "node_modules/fraction.js": {
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
+ "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "type": "patreon",
+ "url": "https://github.com/sponsors/rawify"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "dev": true,
+ "dependencies": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globrex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz",
+ "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==",
+ "dev": true
+ },
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true
+ },
+ "node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
+ "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/ignore": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz",
+ "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
+ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
+ "dev": true
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.13.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
+ "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
+ "dev": true,
+ "dependencies": {
+ "hasown": "^2.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true
+ },
+ "node_modules/jiti": {
+ "version": "1.21.0",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz",
+ "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==",
+ "dev": true,
+ "bin": {
+ "jiti": "bin/jiti.js"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "dev": true,
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "dev": true
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true
+ },
+ "node_modules/json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "dev": true,
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/keyv": {
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+ "dev": true,
+ "dependencies": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/lilconfig": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
+ "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash.foreach": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz",
+ "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==",
+ "dev": true
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+ "node_modules/loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
+ "dependencies": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "dev": true,
+ "dependencies": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "node_modules/mz": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+ "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+ "dev": true,
+ "dependencies": {
+ "any-promise": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "thenify-all": "^1.0.0"
+ }
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
+ "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/nanostores": {
+ "version": "0.9.5",
+ "resolved": "https://registry.npmjs.org/nanostores/-/nanostores-0.9.5.tgz",
+ "integrity": "sha512-Z+p+g8E7yzaWwOe5gEUB2Ox0rCEeXWYIZWmYvw/ajNYX8DlXdMvMDj8DWfM/subqPAcsf8l8Td4iAwO1DeIIRQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "engines": {
+ "node": "^16.0.0 || ^18.0.0 || >=20.0.0"
+ }
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.13",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz",
+ "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==",
+ "dev": true
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-hash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
+ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
+ "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
+ "dev": true,
+ "dependencies": {
+ "@aashutoshrathi/word-wrap": "^1.2.3",
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true
+ },
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+ "dev": true
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pirates": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
+ "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.4.31",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
+ "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "nanoid": "^3.3.6",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-import": {
+ "version": "15.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
+ "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
+ "dev": true,
+ "dependencies": {
+ "postcss-value-parser": "^4.0.0",
+ "read-cache": "^1.0.0",
+ "resolve": "^1.1.7"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.0.0"
+ }
+ },
+ "node_modules/postcss-js": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
+ "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
+ "dev": true,
+ "dependencies": {
+ "camelcase-css": "^2.0.1"
+ },
+ "engines": {
+ "node": "^12 || ^14 || >= 16"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.21"
+ }
+ },
+ "node_modules/postcss-load-config": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz",
+ "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==",
+ "dev": true,
+ "dependencies": {
+ "lilconfig": "^2.0.5",
+ "yaml": "^2.1.1"
+ },
+ "engines": {
+ "node": ">= 14"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": ">=8.0.9",
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "postcss": {
+ "optional": true
+ },
+ "ts-node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/postcss-nested": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz",
+ "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==",
+ "dev": true,
+ "dependencies": {
+ "postcss-selector-parser": "^6.0.11"
+ },
+ "engines": {
+ "node": ">=12.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.14"
+ }
+ },
+ "node_modules/postcss-selector-parser": {
+ "version": "6.0.13",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz",
+ "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==",
+ "dev": true,
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+ "dev": true
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/react": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
+ "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-dom": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
+ "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.23.0"
+ },
+ "peerDependencies": {
+ "react": "^18.2.0"
+ }
+ },
+ "node_modules/react-refresh": {
+ "version": "0.14.0",
+ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz",
+ "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/read-cache": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+ "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+ "dev": true,
+ "dependencies": {
+ "pify": "^2.3.0"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.22.8",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+ "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
+ "dev": true,
+ "dependencies": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true,
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.4.1.tgz",
+ "integrity": "sha512-idZzrUpWSblPJX66i+GzrpjKE3vbYrlWirUHteoAbjKReZwa0cohAErOYA5efoMmNCdvG9yrJS+w9Kl6csaH4w==",
+ "dev": true,
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.4.1",
+ "@rollup/rollup-android-arm64": "4.4.1",
+ "@rollup/rollup-darwin-arm64": "4.4.1",
+ "@rollup/rollup-darwin-x64": "4.4.1",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.4.1",
+ "@rollup/rollup-linux-arm64-gnu": "4.4.1",
+ "@rollup/rollup-linux-arm64-musl": "4.4.1",
+ "@rollup/rollup-linux-x64-gnu": "4.4.1",
+ "@rollup/rollup-linux-x64-musl": "4.4.1",
+ "@rollup/rollup-win32-arm64-msvc": "4.4.1",
+ "@rollup/rollup-win32-ia32-msvc": "4.4.1",
+ "@rollup/rollup-win32-x64-msvc": "4.4.1",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/scheduler": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
+ "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/semver/node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/semver/node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/simple-swizzle": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
+ "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
+ "dev": true,
+ "dependencies": {
+ "is-arrayish": "^0.3.1"
+ }
+ },
+ "node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/sucrase": {
+ "version": "3.34.0",
+ "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz",
+ "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "commander": "^4.0.0",
+ "glob": "7.1.6",
+ "lines-and-columns": "^1.1.6",
+ "mz": "^2.7.0",
+ "pirates": "^4.0.1",
+ "ts-interface-checker": "^0.1.9"
+ },
+ "bin": {
+ "sucrase": "bin/sucrase",
+ "sucrase-node": "bin/sucrase-node"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/sucrase/node_modules/glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/tailwindcss": {
+ "version": "3.3.5",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.5.tgz",
+ "integrity": "sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA==",
+ "dev": true,
+ "dependencies": {
+ "@alloc/quick-lru": "^5.2.0",
+ "arg": "^5.0.2",
+ "chokidar": "^3.5.3",
+ "didyoumean": "^1.2.2",
+ "dlv": "^1.1.3",
+ "fast-glob": "^3.3.0",
+ "glob-parent": "^6.0.2",
+ "is-glob": "^4.0.3",
+ "jiti": "^1.19.1",
+ "lilconfig": "^2.1.0",
+ "micromatch": "^4.0.5",
+ "normalize-path": "^3.0.0",
+ "object-hash": "^3.0.0",
+ "picocolors": "^1.0.0",
+ "postcss": "^8.4.23",
+ "postcss-import": "^15.1.0",
+ "postcss-js": "^4.0.1",
+ "postcss-load-config": "^4.0.1",
+ "postcss-nested": "^6.0.1",
+ "postcss-selector-parser": "^6.0.11",
+ "resolve": "^1.22.2",
+ "sucrase": "^3.32.0"
+ },
+ "bin": {
+ "tailwind": "lib/cli.js",
+ "tailwindcss": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "dev": true
+ },
+ "node_modules/thenify": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
+ "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+ "dev": true,
+ "dependencies": {
+ "any-promise": "^1.0.0"
+ }
+ },
+ "node_modules/thenify-all": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+ "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+ "dev": true,
+ "dependencies": {
+ "thenify": ">= 3.1.0 < 4"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/ts-api-utils": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz",
+ "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==",
+ "dev": true,
+ "engines": {
+ "node": ">=16.13.0"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.2.0"
+ }
+ },
+ "node_modules/ts-interface-checker": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
+ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
+ "dev": true
+ },
+ "node_modules/tsconfck": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-2.1.2.tgz",
+ "integrity": "sha512-ghqN1b0puy3MhhviwO2kGF8SeMDNhEbnKxjK7h6+fvY9JAxqvXi8y5NAHSQv687OVboS2uZIByzGd45/YxrRHg==",
+ "dev": true,
+ "bin": {
+ "tsconfck": "bin/tsconfck.js"
+ },
+ "engines": {
+ "node": "^14.13.1 || ^16 || >=18"
+ },
+ "peerDependencies": {
+ "typescript": "^4.3.5 || ^5.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/tw-colors": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/tw-colors/-/tw-colors-3.3.1.tgz",
+ "integrity": "sha512-PH6NShNtDzPCm6zjl0SZe3kmdYSfDS7Sk4mWa9+KzaeSH1ZmpLRrBjZoBJKaFcDB3o7iuFPPg9+HtW05pGPQyQ==",
+ "dev": true,
+ "dependencies": {
+ "color": "^4.2.3",
+ "flat": "^5.0.2",
+ "lodash.foreach": "^4.5.0"
+ },
+ "peerDependencies": {
+ "tailwindcss": ">=3.0.0"
+ }
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
+ "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
+ "dev": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.0.13",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
+ "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "escalade": "^3.1.1",
+ "picocolors": "^1.0.0"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "dev": true
+ },
+ "node_modules/vite": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.0.tgz",
+ "integrity": "sha512-ESJVM59mdyGpsiNAeHQOR/0fqNoOyWPYesFto8FFZugfmhdHx8Fzd8sF3Q/xkVhZsyOxHfdM7ieiVAorI9RjFw==",
+ "dev": true,
+ "dependencies": {
+ "esbuild": "^0.19.3",
+ "postcss": "^8.4.31",
+ "rollup": "^4.2.0"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^18.0.0 || >=20.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "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
+ }
+ }
+ },
+ "node_modules/vite-tsconfig-paths": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-4.2.1.tgz",
+ "integrity": "sha512-GNUI6ZgPqT3oervkvzU+qtys83+75N/OuDaQl7HmOqFTb0pjZsuARrRipsyJhJ3enqV8beI1xhGbToR4o78nSQ==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.1.1",
+ "globrex": "^0.1.2",
+ "tsconfck": "^2.1.0"
+ },
+ "peerDependencies": {
+ "vite": "*"
+ },
+ "peerDependenciesMeta": {
+ "vite": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true
+ },
+ "node_modules/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true
+ },
+ "node_modules/yaml": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz",
+ "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..f3d42f7
--- /dev/null
+++ b/package.json
@@ -0,0 +1,37 @@
+{
+ "name": "react-ts",
+ "private": true,
+ "version": "0.0.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "tsc && vite build",
+ "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
+ "preview": "vite preview"
+ },
+ "dependencies": {
+ "@fontsource/nunito": "^5.0.15",
+ "@nanostores/persistent": "^0.9.1",
+ "@nanostores/react": "^0.7.1",
+ "nanostores": "^0.9.5",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0"
+ },
+ "devDependencies": {
+ "@types/react": "^18.2.37",
+ "@types/react-dom": "^18.2.15",
+ "@typescript-eslint/eslint-plugin": "^6.10.0",
+ "@typescript-eslint/parser": "^6.10.0",
+ "@vitejs/plugin-react": "^4.2.0",
+ "autoprefixer": "^10.4.16",
+ "eslint": "^8.53.0",
+ "eslint-plugin-react-hooks": "^4.6.0",
+ "eslint-plugin-react-refresh": "^0.4.4",
+ "postcss": "^8.4.31",
+ "tailwindcss": "^3.3.5",
+ "tw-colors": "^3.3.1",
+ "typescript": "^5.2.2",
+ "vite": "^5.0.0",
+ "vite-tsconfig-paths": "^4.2.1"
+ }
+}
diff --git a/postcss.config.js b/postcss.config.js
new file mode 100644
index 0000000..2e7af2b
--- /dev/null
+++ b/postcss.config.js
@@ -0,0 +1,6 @@
+export default {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+}
diff --git a/public/keyboard.svg b/public/keyboard.svg
new file mode 100644
index 0000000..e21cc9a
--- /dev/null
+++ b/public/keyboard.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/src/App.tsx b/src/App.tsx
new file mode 100644
index 0000000..563d0f4
--- /dev/null
+++ b/src/App.tsx
@@ -0,0 +1,16 @@
+import TypingTest from "@components/typing-test.tsx";
+import Footer from "@components/footer.tsx";
+import Header from "@components/header.tsx";
+import MainContainer from "@components/main-container.tsx";
+
+function App() {
+ return (
+
+
+
+
+
+ );
+}
+
+export default App;
diff --git a/src/components/footer.tsx b/src/components/footer.tsx
new file mode 100644
index 0000000..596566f
--- /dev/null
+++ b/src/components/footer.tsx
@@ -0,0 +1,10 @@
+const Footer = () => {
+ return (
+
+ );
+};
+
+export default Footer;
diff --git a/src/components/header.tsx b/src/components/header.tsx
new file mode 100644
index 0000000..903d899
--- /dev/null
+++ b/src/components/header.tsx
@@ -0,0 +1,9 @@
+const Header = () => {
+ return (
+
+ );
+};
+
+export default Header;
diff --git a/src/components/main-container.tsx b/src/components/main-container.tsx
new file mode 100644
index 0000000..c9c1eba
--- /dev/null
+++ b/src/components/main-container.tsx
@@ -0,0 +1,22 @@
+import { ThemeSelect } from "@components/theme-select";
+import { useStore } from "@nanostores/react";
+import { theme } from "@data/store";
+
+const MainContainer = ({ children, ...props }: React.PropsWithChildren) => {
+ const $theme = useStore(theme);
+ // darkgray bg-mainBackground
+ return (
+
+ {children}
+
+
+
+ );
+};
+
+export default MainContainer;
diff --git a/src/components/theme-select.tsx b/src/components/theme-select.tsx
new file mode 100644
index 0000000..05b31e0
--- /dev/null
+++ b/src/components/theme-select.tsx
@@ -0,0 +1,71 @@
+import { useState, useEffect, useRef } from "react";
+import { useStore } from "@nanostores/react";
+import { theme } from "@data/store";
+import { allThemes, type ThemeNames } from "@utils";
+
+export const ThemeSelect = () => {
+ const $theme = useStore(theme);
+
+ const [isOpen, setIsOpen] = useState(false);
+ const selectRef = useRef(null);
+
+ const handleSelect = (option: ThemeNames) => {
+ theme.set(option);
+ setIsOpen(false);
+ };
+
+ const handleClickAway = (event: MouseEvent) => {
+ if (
+ selectRef.current &&
+ !selectRef.current.contains(event.target as Node)
+ ) {
+ setIsOpen(false);
+ }
+ };
+
+ useEffect(() => {
+ document.addEventListener("mousedown", handleClickAway);
+ return () => {
+ document.removeEventListener("mousedown", handleClickAway);
+ };
+ }, []);
+
+ return (
+
+
+
+
+
+ {allThemes.sort().map((option) => (
+
+ ))}
+
+
+
+ );
+};
diff --git a/src/components/typing-test.tsx b/src/components/typing-test.tsx
new file mode 100644
index 0000000..004630b
--- /dev/null
+++ b/src/components/typing-test.tsx
@@ -0,0 +1,170 @@
+import { useDataGenerator } from "@data/data-generator";
+import { Suspense, useRef, useState, useEffect, useCallback } from "react";
+import { useStore } from "@nanostores/react";
+import { count } from "@data/store";
+import type { StringCount } from "@utils";
+
+type Word = {
+ name: string;
+ color: string;
+};
+
+const TypingTest = () => {
+ const { generateWordList } = useDataGenerator();
+
+ const wordCountOptions: StringCount[] = ["10", "25", "50", "100", "200"];
+
+ const $count = useStore(count);
+
+ const [input, setInput] = useState("");
+ const [wordList, setWordList] = useState(generateWordList());
+ const [currentWordIndex, setCurrentWordIndex] = useState(0);
+ const [wpm, setWpm] = useState(0);
+ const [startTime, setStartTime] = useState(null);
+
+ const [typedWords, setTypedWords] = useState([]);
+
+ const handleInputChange = (e: React.ChangeEvent) => {
+ if (!startTime) setStartTime(new Date());
+
+ const value = e.target.value;
+ setInput(value);
+
+ if (value.endsWith(" ")) {
+ setTypedWords([...typedWords, value.split(" ")[0]]);
+
+ setCurrentWordIndex(currentWordIndex + 1);
+
+ setInput("");
+
+ if (currentWordIndex === wordList.length - 1) {
+ handleFinish();
+ }
+ }
+ };
+
+ const handleFinish = () => {
+ const endTime = new Date();
+ if (!startTime) return;
+
+ const timeInMinutes = (endTime.getTime() - startTime.getTime()) / 1000 / 60;
+
+ // adds spaces back as tracked typed characters
+ // feels good to have a higher WPM lol
+ const typedChars = wordList.map(({ name }) => name).join(" ");
+
+ const wordsPerMinute = Math.floor(typedChars.length / 5 / timeInMinutes);
+
+ setStartTime(null);
+ setWpm(wordsPerMinute);
+ };
+
+ const handleRestart = useCallback(
+ (newCount: StringCount) => {
+ setInput("");
+ setCurrentWordIndex(0);
+ setStartTime(null);
+ inputRef.current?.focus();
+ setTypedWords([]);
+ setWordList(generateWordList(newCount));
+ setWpm(0);
+ },
+ [generateWordList]
+ );
+
+ useEffect(() => {
+ const getWordColor = (index: number) => {
+ if (index === currentWordIndex) {
+ // if is currently correct...
+ return "text-activeText";
+ }
+ if (index < currentWordIndex) {
+ if (typedWords[index] === wordList[index].name) {
+ return "text-successText";
+ }
+ return "text-errorText";
+ }
+
+ return "text-mainText";
+ };
+
+ setWordList((prev) => {
+ return prev.map(({ name }, index) => {
+ return {
+ name,
+ color: getWordColor(index),
+ };
+ });
+ });
+ }, [typedWords, currentWordIndex, setWordList, wordList]);
+
+ const inputRef = useRef(null);
+
+ return (
+ bad}>
+
+
+
+ {wordCountOptions.map((option) => {
+ return (
+
+ );
+ })}
+
+
WPM: {wpm}
+
+
+ {/* Modal */}
+
+ {/* Word list */}
+
+ {wordList.map((word, index) => {
+ return (
+
+ {word.name}{" "}
+
+ );
+ })}
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default TypingTest;
diff --git a/src/data/data-generator.tsx b/src/data/data-generator.tsx
new file mode 100644
index 0000000..f2edb23
--- /dev/null
+++ b/src/data/data-generator.tsx
@@ -0,0 +1,24 @@
+import wordList from "@data/word-dictionary.json";
+import { useStore } from "@nanostores/react";
+import { count, language } from "@data/store";
+
+export const useDataGenerator = () => {
+ const $count = useStore(count);
+ const $language = useStore(language);
+
+ const generateWordList = (x?: string) => {
+ const count = x ? +x : +$count;
+ const wordLimit = wordList[$language].length;
+ const randomWordList = Array.from({ length: count }, () => {
+ const randomIndex = Math.floor(Math.random() * wordLimit);
+ return {
+ name: wordList[$language][randomIndex],
+ color: "text-mainText",
+ };
+ });
+
+ return randomWordList;
+ };
+
+ return { generateWordList };
+};
diff --git a/src/data/store.ts b/src/data/store.ts
new file mode 100644
index 0000000..6726d57
--- /dev/null
+++ b/src/data/store.ts
@@ -0,0 +1,8 @@
+import { persistentAtom } from "@nanostores/persistent";
+import type { ThemeNames, LanguageNames, StringCount } from "@utils";
+
+const count = persistentAtom("count", "25");
+const language = persistentAtom("language", "english");
+const theme = persistentAtom("theme", "dark");
+
+export { count, language, theme };
diff --git a/src/data/word-dictionary.json b/src/data/word-dictionary.json
new file mode 100644
index 0000000..5468bbc
--- /dev/null
+++ b/src/data/word-dictionary.json
@@ -0,0 +1,5910 @@
+{
+ "english": [
+ "the",
+ "be",
+ "of",
+ "and",
+ "a",
+ "to",
+ "in",
+ "he",
+ "have",
+ "it",
+ "that",
+ "for",
+ "they",
+ "I",
+ "with",
+ "as",
+ "not",
+ "on",
+ "she",
+ "at",
+ "by",
+ "this",
+ "we",
+ "you",
+ "do",
+ "but",
+ "from",
+ "or",
+ "which",
+ "one",
+ "would",
+ "all",
+ "will",
+ "there",
+ "say",
+ "who",
+ "make",
+ "when",
+ "can",
+ "more",
+ "if",
+ "no",
+ "man",
+ "out",
+ "other",
+ "so",
+ "what",
+ "time",
+ "up",
+ "go",
+ "about",
+ "than",
+ "into",
+ "could",
+ "state",
+ "only",
+ "new",
+ "year",
+ "some",
+ "take",
+ "come",
+ "these",
+ "know",
+ "see",
+ "use",
+ "get",
+ "like",
+ "then",
+ "first",
+ "any",
+ "work",
+ "now",
+ "may",
+ "such",
+ "give",
+ "over",
+ "think",
+ "most",
+ "even",
+ "find",
+ "day",
+ "also",
+ "after",
+ "way",
+ "many",
+ "must",
+ "look",
+ "before",
+ "great",
+ "back",
+ "through",
+ "long",
+ "where",
+ "much",
+ "should",
+ "well",
+ "people",
+ "down",
+ "own",
+ "just",
+ "because",
+ "good",
+ "each",
+ "those",
+ "feel",
+ "seem",
+ "how",
+ "high",
+ "too",
+ "place",
+ "little",
+ "world",
+ "very",
+ "still",
+ "nation",
+ "hand",
+ "old",
+ "life",
+ "tell",
+ "write",
+ "become",
+ "here",
+ "show",
+ "house",
+ "both",
+ "between",
+ "need",
+ "mean",
+ "call",
+ "develop",
+ "under",
+ "last",
+ "right",
+ "move",
+ "thing",
+ "general",
+ "school",
+ "never",
+ "same",
+ "another",
+ "begin",
+ "while",
+ "number",
+ "part",
+ "turn",
+ "real",
+ "leave",
+ "might",
+ "want",
+ "point",
+ "form",
+ "off",
+ "child",
+ "few",
+ "small",
+ "since",
+ "against",
+ "ask",
+ "late",
+ "home",
+ "interest",
+ "large",
+ "person",
+ "end",
+ "open",
+ "public",
+ "follow",
+ "during",
+ "present",
+ "without",
+ "again",
+ "hold",
+ "govern",
+ "around",
+ "possible",
+ "head",
+ "consider",
+ "word",
+ "program",
+ "problem",
+ "however",
+ "lead",
+ "system",
+ "set",
+ "order",
+ "eye",
+ "plan",
+ "run",
+ "keep",
+ "face",
+ "fact",
+ "group",
+ "play",
+ "stand",
+ "increase",
+ "early",
+ "course",
+ "change",
+ "help",
+ "line"
+ ],
+ "italian": [
+ "come",
+ "io",
+ "il",
+ "suo",
+ "che",
+ "lui",
+ "era",
+ "per",
+ "su",
+ "sono",
+ "con",
+ "essi",
+ "essere",
+ "a",
+ "uno",
+ "avere",
+ "questo",
+ "da",
+ "caldo",
+ "parola",
+ "ma",
+ "cosa",
+ "alcuni",
+ "è",
+ "esso",
+ "voi",
+ "o",
+ "aveva",
+ "il",
+ "di",
+ "a",
+ "e",
+ "un",
+ "in",
+ "noi",
+ "lattina",
+ "fuori",
+ "altro",
+ "erano",
+ "che",
+ "fare",
+ "loro",
+ "tempo",
+ "se",
+ "volontà",
+ "come",
+ "suddetto",
+ "un",
+ "ogni",
+ "dire",
+ "fa",
+ "set",
+ "tre",
+ "desiderare",
+ "aria",
+ "bene",
+ "anche",
+ "giocare",
+ "piccolo",
+ "fine",
+ "mettere",
+ "casa",
+ "leggere",
+ "mano",
+ "porto",
+ "grande",
+ "compitare",
+ "aggiungere",
+ "anche",
+ "terra",
+ "qui",
+ "mosto",
+ "grande",
+ "alto",
+ "tale",
+ "seguire",
+ "atto",
+ "perché",
+ "chiedere",
+ "maschi",
+ "cambiamento",
+ "è",
+ "andato",
+ "luce",
+ "tipo",
+ "spento",
+ "bisogno",
+ "casa",
+ "immagine",
+ "provare",
+ "noi",
+ "di",
+ "nuovo",
+ "animale",
+ "punto",
+ "madre",
+ "mondo",
+ "vicino",
+ "costruire",
+ "se",
+ "stesso",
+ "terra",
+ "padre",
+ "qualsiasi",
+ "nuovo",
+ "lavoro",
+ "parte",
+ "prendere",
+ "ottenere",
+ "posto",
+ "fatto",
+ "vivere",
+ "dove",
+ "dopo",
+ "indietro",
+ "poco",
+ "solo",
+ "turno",
+ "uomo",
+ "anno",
+ "è",
+ "venuto",
+ "spettacolo",
+ "ogni",
+ "buono",
+ "me",
+ "dare",
+ "il",
+ "nostro",
+ "sotto",
+ "nome",
+ "molto",
+ "attraverso",
+ "solo",
+ "forma",
+ "frase",
+ "grande",
+ "pensare",
+ "dire",
+ "aiutare",
+ "basso",
+ "linea",
+ "differire",
+ "turno",
+ "causa",
+ "molto",
+ "dire",
+ "prima",
+ "spostare",
+ "diritto",
+ "ragazzo",
+ "vecchio",
+ "troppo",
+ "stesso",
+ "lei",
+ "tutto",
+ "ci",
+ "quando",
+ "su",
+ "uso",
+ "il",
+ "tuo",
+ "modo",
+ "circa",
+ "molti",
+ "allora",
+ "loro",
+ "scrivere",
+ "sarebbe",
+ "come",
+ "così",
+ "queste",
+ "lei",
+ "lungo",
+ "rendere",
+ "cosa",
+ "vedere",
+ "lui",
+ "due",
+ "ha",
+ "guardare",
+ "di",
+ "più",
+ "giorno",
+ "potuto",
+ "andare",
+ "venire",
+ "ha",
+ "fatto",
+ "numero",
+ "suono",
+ "no",
+ "più",
+ "persone",
+ "il",
+ "mio",
+ "oltre",
+ "sapere",
+ "acqua",
+ "di",
+ "chiamata",
+ "primo",
+ "che",
+ "può",
+ "giù",
+ "lato",
+ "stato",
+ "ora",
+ "trovare"
+ ],
+ "german": [
+ "die",
+ "der",
+ "und",
+ "in",
+ "zu",
+ "den",
+ "das",
+ "nicht",
+ "von",
+ "sie",
+ "ist",
+ "des",
+ "sich",
+ "mit",
+ "dem",
+ "dass",
+ "er",
+ "es",
+ "ein",
+ "ich",
+ "auf",
+ "so",
+ "eine",
+ "auch",
+ "als",
+ "an",
+ "nach",
+ "wie",
+ "im",
+ "für",
+ "man",
+ "aber",
+ "aus",
+ "durch",
+ "wenn",
+ "nur",
+ "war",
+ "noch",
+ "werden",
+ "bei",
+ "hat",
+ "wir",
+ "was",
+ "wird",
+ "sein",
+ "einen",
+ "welche",
+ "sind",
+ "oder",
+ "zur",
+ "um",
+ "haben",
+ "einer",
+ "mir",
+ "über",
+ "ihm",
+ "diese",
+ "einem",
+ "ihr",
+ "uns",
+ "da",
+ "zum",
+ "kann",
+ "doch",
+ "vor",
+ "dieser",
+ "mich",
+ "ihn",
+ "du",
+ "hatte",
+ "seine",
+ "mehr",
+ "am",
+ "denn",
+ "nun",
+ "unter",
+ "sehr",
+ "selbst",
+ "schon",
+ "hier",
+ "bis",
+ "habe",
+ "ihre",
+ "dann",
+ "ihnen",
+ "seiner",
+ "alle",
+ "wieder",
+ "meine",
+ "Zeit",
+ "gegen",
+ "vom",
+ "ganz",
+ "einzelnen",
+ "wo",
+ "muss",
+ "ohne",
+ "eines",
+ "können",
+ "sei",
+ "ja",
+ "wurde",
+ "jetzt",
+ "immer",
+ "seinen",
+ "wohl",
+ "dieses",
+ "ihren",
+ "würde",
+ "diesen",
+ "sondern",
+ "weil",
+ "welcher",
+ "nichts",
+ "diesem",
+ "alles",
+ "waren",
+ "will",
+ "Herr",
+ "viel",
+ "mein",
+ "also",
+ "soll",
+ "worden",
+ "lassen",
+ "dies",
+ "machen",
+ "ihrer",
+ "weiter",
+ "Leben",
+ "recht",
+ "etwas",
+ "keine",
+ "seinem",
+ "ob",
+ "dir",
+ "allen",
+ "großen",
+ "Jahre",
+ "Weise",
+ "müssen",
+ "welches",
+ "wäre",
+ "erst",
+ "einmal",
+ "Mann",
+ "hätte",
+ "zwei",
+ "dich",
+ "allein",
+ "Herren",
+ "während",
+ "Paragraph",
+ "anders",
+ "Liebe",
+ "kein",
+ "damit",
+ "gar",
+ "Hand",
+ "Herrn",
+ "euch",
+ "sollte",
+ "konnte",
+ "ersten",
+ "deren",
+ "zwischen",
+ "wollen",
+ "denen",
+ "dessen",
+ "sagen",
+ "bin",
+ "Menschen",
+ "gut",
+ "darauf",
+ "wurden",
+ "weiß",
+ "gewesen",
+ "Seite",
+ "bald",
+ "weit",
+ "große",
+ "solche",
+ "hatten",
+ "eben",
+ "andern",
+ "beiden",
+ "macht",
+ "sehen",
+ "ganze",
+ "anderen",
+ "lange",
+ "wer",
+ "ihrem",
+ "zwar",
+ "gemacht",
+ "dort",
+ "kommen",
+ "Welt",
+ "heute",
+ "Frau",
+ "werde",
+ "derselben",
+ "ganzen",
+ "deutschen",
+ "lässt",
+ "vielleicht",
+ "meiner"
+ ],
+ "spanish": [
+ "de",
+ "la",
+ "que",
+ "el",
+ "en",
+ "y",
+ "a",
+ "los",
+ "se",
+ "del",
+ "las",
+ "un",
+ "por",
+ "con",
+ "no",
+ "una",
+ "su",
+ "para",
+ "es",
+ "al",
+ "lo",
+ "como",
+ "más",
+ "o",
+ "pero",
+ "sus",
+ "le",
+ "ha",
+ "me",
+ "si",
+ "sin",
+ "sobre",
+ "este",
+ "ya",
+ "entre",
+ "cuando",
+ "todo",
+ "esta",
+ "ser",
+ "son",
+ "dos",
+ "también",
+ "fue",
+ "había",
+ "era",
+ "muy",
+ "años",
+ "hasta",
+ "desde",
+ "está",
+ "mi",
+ "porque",
+ "qué",
+ "sólo",
+ "han",
+ "yo",
+ "hay",
+ "vez",
+ "puede",
+ "todos",
+ "así",
+ "nos",
+ "ni",
+ "parte",
+ "tiene",
+ "él",
+ "uno",
+ "donde",
+ "bien",
+ "tiempo",
+ "mismo",
+ "ese",
+ "ahora",
+ "cada",
+ "e",
+ "vida",
+ "otro",
+ "después",
+ "te",
+ "otros",
+ "aunque",
+ "esa",
+ "eso",
+ "hace",
+ "otra",
+ "gobierno",
+ "tan",
+ "durante",
+ "siempre",
+ "día",
+ "tanto",
+ "ella",
+ "tres",
+ "sí",
+ "dijo",
+ "sido",
+ "gran",
+ "país",
+ "según",
+ "menos"
+ ],
+ "chinese": [
+ "一",
+ "在",
+ "有",
+ "个",
+ "我",
+ "不",
+ "这",
+ "了",
+ "他",
+ "也",
+ "就",
+ "人",
+ "都",
+ "说",
+ "而",
+ "我们",
+ "你",
+ "了",
+ "要",
+ "会",
+ "对",
+ "及",
+ "和",
+ "与",
+ "以",
+ "很",
+ "种",
+ "的",
+ "大",
+ "能",
+ "着",
+ "她",
+ "那",
+ "上",
+ "但",
+ "年",
+ "还",
+ "可以",
+ "最",
+ "自己",
+ "为",
+ "来",
+ "所",
+ "他们",
+ "两",
+ "各",
+ "可",
+ "为",
+ "或",
+ "好",
+ "等",
+ "又",
+ "将",
+ "因为",
+ "于",
+ "由",
+ "从",
+ "更",
+ "被",
+ "才",
+ "已",
+ "者",
+ "每",
+ "次",
+ "把",
+ "三",
+ "什么",
+ "问题",
+ "其",
+ "让",
+ "此",
+ "做",
+ "再",
+ "所以",
+ "只",
+ "与",
+ "则",
+ "台湾",
+ "却",
+ "并",
+ "位",
+ "想",
+ "去",
+ "呢",
+ "学生",
+ "表示",
+ "到",
+ "公司",
+ "将",
+ "如果",
+ "社会",
+ "看",
+ "小",
+ "天",
+ "因此",
+ "新",
+ "但是",
+ "它",
+ "中",
+ "使",
+ "工作",
+ "全",
+ "觉得",
+ "使用",
+ "这些",
+ "里",
+ "并",
+ "由于",
+ "时候",
+ "知道",
+ "这样",
+ "一",
+ "认为",
+ "时间",
+ "事",
+ "过",
+ "向",
+ "可能",
+ "中国",
+ "美国",
+ "到",
+ "和",
+ "几",
+ "系统",
+ "政府",
+ "大家",
+ "国家",
+ "许多",
+ "生活",
+ "跟",
+ "已经",
+ "大学",
+ "研究",
+ "因",
+ "本",
+ "二",
+ "活动",
+ "该",
+ "世界",
+ "应",
+ "四",
+ "希望",
+ "方式",
+ "内",
+ "项",
+ "啊",
+ "下",
+ "环境",
+ "一些",
+ "必须",
+ "文化",
+ "高",
+ "孩子",
+ "没有",
+ "不能",
+ "如",
+ "开始",
+ "元",
+ "不同",
+ "仍",
+ "网路",
+ "日本",
+ "用",
+ "中心",
+ "来",
+ "对",
+ "虽然",
+ "重要",
+ "地方",
+ "进行",
+ "关系",
+ "市场",
+ "太",
+ "老师",
+ "提供",
+ "学校",
+ "应该",
+ "指出",
+ "经济",
+ "其他",
+ "家",
+ "发展",
+ "教育",
+ "成为",
+ "多",
+ "非常",
+ "便",
+ "方面",
+ "很多",
+ "吃",
+ "然后",
+ "未",
+ "发现",
+ "电脑",
+ "一样",
+ "而且",
+ "心",
+ "不过",
+ "无法",
+ "企业"
+ ],
+ "korean": [
+ "것",
+ "하다",
+ "있다",
+ "수",
+ "하다",
+ "나",
+ "없다",
+ "않다",
+ "사람",
+ "우리",
+ "그",
+ "아니다",
+ "보다",
+ "거",
+ "보다",
+ "같다",
+ "주다",
+ "대하다",
+ "가다",
+ "년",
+ "한",
+ "말",
+ "일",
+ "이",
+ "말하다",
+ "위하다",
+ "그러나",
+ "오다",
+ "알다",
+ "씨",
+ "그렇다",
+ "크다",
+ "일",
+ "사회",
+ "많다",
+ "안",
+ "좋다",
+ "더",
+ "받다",
+ "그것",
+ "집",
+ "나오다",
+ "그리고",
+ "문제",
+ "그런",
+ "살다",
+ "저",
+ "못하다",
+ "생각하다",
+ "모르다",
+ "속",
+ "만들다",
+ "데",
+ "앞",
+ "경우",
+ "중",
+ "어떤",
+ "잘",
+ "그녀",
+ "먹다",
+ "자신",
+ "문화",
+ "원",
+ "생각",
+ "어떻다",
+ "명",
+ "통하다",
+ "그러다",
+ "그러다",
+ "소리",
+ "다시",
+ "다른",
+ "이런",
+ "여자",
+ "개",
+ "정도",
+ "다",
+ "좀",
+ "싶다",
+ "보이다",
+ "가지다",
+ "함께",
+ "아이",
+ "지나다",
+ "많이",
+ "시간",
+ "너",
+ "인간",
+ "사실",
+ "나다",
+ "이렇다",
+ "어머니",
+ "눈",
+ "뭐",
+ "점",
+ "의하다",
+ "시대",
+ "다음",
+ "이러하다",
+ "누구",
+ "곳",
+ "여러",
+ "안",
+ "하나",
+ "세계",
+ "버리다",
+ "위",
+ "운동",
+ "퍼센트",
+ "학교",
+ "자기",
+ "가장",
+ "대통령",
+ "가지",
+ "시작하다",
+ "바로",
+ "어느",
+ "그래서",
+ "무엇",
+ "정부",
+ "모든",
+ "번",
+ "그거",
+ "돈",
+ "국가",
+ "그런데",
+ "날",
+ "여기",
+ "모두",
+ "여성",
+ "친구",
+ "마음",
+ "후",
+ "놓다",
+ "관계",
+ "아버지",
+ "남자",
+ "어디",
+ "몸",
+ "얼굴",
+ "왜",
+ "나타나다",
+ "지역",
+ "다르다",
+ "모습",
+ "물",
+ "만나다",
+ "내다",
+ "보이다",
+ "쓰다",
+ "이것",
+ "없이",
+ "이번",
+ "길",
+ "생활",
+ "쓰다",
+ "뿐",
+ "사이",
+ "방법",
+ "새롭다",
+ "내다",
+ "앉다",
+ "처음",
+ "손",
+ "몇",
+ "그때",
+ "과정",
+ "삶",
+ "갖다",
+ "찾다",
+ "특히",
+ "시",
+ "이상",
+ "지금",
+ "나가다",
+ "이야기",
+ "교육",
+ "사다",
+ "경제",
+ "아직",
+ "잡다",
+ "같이",
+ "선생님",
+ "예술",
+ "서다",
+ "못",
+ "역사",
+ "읽다",
+ "결과",
+ "내용",
+ "물론",
+ "책",
+ "일어나다",
+ "당신",
+ "시장",
+ "넣다",
+ "중요하다",
+ "무슨",
+ "느끼다",
+ "어렵다"
+ ],
+ "english1000": [
+ "as",
+ "I",
+ "his",
+ "that",
+ "he",
+ "was",
+ "for",
+ "on",
+ "are",
+ "with",
+ "they",
+ "be",
+ "at",
+ "one",
+ "have",
+ "this",
+ "from",
+ "by",
+ "hot",
+ "word",
+ "but",
+ "what",
+ "some",
+ "is",
+ "it",
+ "you",
+ "or",
+ "had",
+ "the",
+ "of",
+ "to",
+ "and",
+ "a",
+ "in",
+ "we",
+ "can",
+ "out",
+ "other",
+ "were",
+ "which",
+ "do",
+ "their",
+ "time",
+ "if",
+ "will",
+ "how",
+ "said",
+ "an",
+ "each",
+ "tell",
+ "does",
+ "set",
+ "three",
+ "want",
+ "air",
+ "well",
+ "also",
+ "play",
+ "small",
+ "end",
+ "put",
+ "home",
+ "read",
+ "hand",
+ "port",
+ "large",
+ "spell",
+ "add",
+ "even",
+ "land",
+ "here",
+ "must",
+ "big",
+ "high",
+ "such",
+ "follow",
+ "act",
+ "why",
+ "ask",
+ "men",
+ "change",
+ "went",
+ "light",
+ "kind",
+ "off",
+ "need",
+ "house",
+ "picture",
+ "try",
+ "us",
+ "again",
+ "animal",
+ "point",
+ "mother",
+ "world",
+ "near",
+ "build",
+ "self",
+ "earth",
+ "father",
+ "any",
+ "new",
+ "work",
+ "part",
+ "take",
+ "get",
+ "place",
+ "made",
+ "live",
+ "where",
+ "after",
+ "back",
+ "little",
+ "only",
+ "round",
+ "man",
+ "year",
+ "came",
+ "show",
+ "every",
+ "good",
+ "me",
+ "give",
+ "our",
+ "under",
+ "name",
+ "very",
+ "through",
+ "just",
+ "form",
+ "sentence",
+ "great",
+ "think",
+ "say",
+ "help",
+ "low",
+ "line",
+ "differ",
+ "turn",
+ "cause",
+ "much",
+ "mean",
+ "before",
+ "move",
+ "right",
+ "boy",
+ "old",
+ "too",
+ "same",
+ "she",
+ "all",
+ "there",
+ "when",
+ "up",
+ "use",
+ "your",
+ "way",
+ "about",
+ "many",
+ "then",
+ "them",
+ "write",
+ "would",
+ "like",
+ "so",
+ "these",
+ "her",
+ "long",
+ "make",
+ "thing",
+ "see",
+ "him",
+ "two",
+ "has",
+ "look",
+ "more",
+ "day",
+ "could",
+ "go",
+ "come",
+ "did",
+ "number",
+ "sound",
+ "no",
+ "most",
+ "people",
+ "my",
+ "over",
+ "know",
+ "water",
+ "than",
+ "call",
+ "first",
+ "who",
+ "may",
+ "down",
+ "side",
+ "been",
+ "now",
+ "find",
+ "head",
+ "stand",
+ "own",
+ "page",
+ "should",
+ "country",
+ "found",
+ "answer",
+ "school",
+ "grow",
+ "study",
+ "still",
+ "learn",
+ "plant",
+ "cover",
+ "food",
+ "sun",
+ "four",
+ "between",
+ "state",
+ "keep",
+ "eye",
+ "never",
+ "last",
+ "let",
+ "thought",
+ "city",
+ "tree",
+ "cross",
+ "farm",
+ "hard",
+ "start",
+ "might",
+ "story",
+ "saw",
+ "far",
+ "sea",
+ "draw",
+ "left",
+ "late",
+ "run",
+ "don't",
+ "while",
+ "press",
+ "close",
+ "night",
+ "real",
+ "life",
+ "few",
+ "north",
+ "book",
+ "carry",
+ "took",
+ "science",
+ "eat",
+ "room",
+ "friend",
+ "began",
+ "idea",
+ "fish",
+ "mountain",
+ "stop",
+ "once",
+ "base",
+ "hear",
+ "horse",
+ "cut",
+ "sure",
+ "watch",
+ "color",
+ "face",
+ "wood",
+ "main",
+ "open",
+ "seem",
+ "together",
+ "next",
+ "white",
+ "children",
+ "begin",
+ "got",
+ "walk",
+ "example",
+ "ease",
+ "paper",
+ "group",
+ "always",
+ "music",
+ "those",
+ "both",
+ "mark",
+ "often",
+ "letter",
+ "until",
+ "mile",
+ "river",
+ "car",
+ "feet",
+ "care",
+ "second",
+ "enough",
+ "plain",
+ "girl",
+ "usual",
+ "young",
+ "ready",
+ "above",
+ "ever",
+ "red",
+ "list",
+ "though",
+ "feel",
+ "talk",
+ "bird",
+ "soon",
+ "body",
+ "dog",
+ "family",
+ "direct",
+ "pose",
+ "leave",
+ "song",
+ "measure",
+ "door",
+ "product",
+ "black",
+ "short",
+ "numeral",
+ "class",
+ "wind",
+ "question",
+ "happen",
+ "complete",
+ "ship",
+ "area",
+ "half",
+ "rock",
+ "order",
+ "fire",
+ "south",
+ "problem",
+ "piece",
+ "told",
+ "knew",
+ "pass",
+ "since",
+ "top",
+ "whole",
+ "king",
+ "street",
+ "inch",
+ "multiply",
+ "nothing",
+ "course",
+ "stay",
+ "wheel",
+ "full",
+ "force",
+ "blue",
+ "object",
+ "decide",
+ "surface",
+ "deep",
+ "moon",
+ "island",
+ "foot",
+ "system",
+ "busy",
+ "test",
+ "record",
+ "boat",
+ "common",
+ "gold",
+ "possible",
+ "plane",
+ "stead",
+ "dry",
+ "wonder",
+ "laugh",
+ "thousand",
+ "ago",
+ "ran",
+ "check",
+ "game",
+ "shape",
+ "equate",
+ "hot",
+ "miss",
+ "brought",
+ "heat",
+ "snow",
+ "tire",
+ "bring",
+ "yes",
+ "distant",
+ "fill",
+ "east",
+ "paint",
+ "language",
+ "among",
+ "unit",
+ "power",
+ "town",
+ "fine",
+ "certain",
+ "fly",
+ "fall",
+ "lead",
+ "cry",
+ "dark",
+ "machine",
+ "note",
+ "wait",
+ "plan",
+ "figure",
+ "star",
+ "box",
+ "noun",
+ "field",
+ "rest",
+ "correct",
+ "able",
+ "pound",
+ "done",
+ "beauty",
+ "drive",
+ "stood",
+ "contain",
+ "front",
+ "teach",
+ "week",
+ "final",
+ "gave",
+ "green",
+ "oh",
+ "quick",
+ "develop",
+ "ocean",
+ "warm",
+ "free",
+ "minute",
+ "strong",
+ "special",
+ "mind",
+ "behind",
+ "clear",
+ "tail",
+ "produce",
+ "fact",
+ "space",
+ "heard",
+ "best",
+ "hour",
+ "better",
+ "true",
+ "during",
+ "hundred",
+ "five",
+ "remember",
+ "step",
+ "early",
+ "hold",
+ "west",
+ "ground",
+ "interest",
+ "reach",
+ "fast",
+ "verb",
+ "sing",
+ "listen",
+ "six",
+ "table",
+ "travel",
+ "less",
+ "morning",
+ "ten",
+ "simple",
+ "several",
+ "vowel",
+ "toward",
+ "war",
+ "lay",
+ "against",
+ "pattern",
+ "slow",
+ "center",
+ "love",
+ "person",
+ "money",
+ "serve",
+ "appear",
+ "road",
+ "map",
+ "rain",
+ "rule",
+ "govern",
+ "pull",
+ "cold",
+ "notice",
+ "voice",
+ "energy",
+ "hunt",
+ "probable",
+ "bed",
+ "brother",
+ "egg",
+ "ride",
+ "cell",
+ "believe",
+ "perhaps",
+ "pick",
+ "sudden",
+ "count",
+ "square",
+ "reason",
+ "length",
+ "represent",
+ "art",
+ "subject",
+ "region",
+ "size",
+ "vary",
+ "settle",
+ "speak",
+ "weight",
+ "general",
+ "ice",
+ "matter",
+ "circle",
+ "pair",
+ "include",
+ "divide",
+ "syllable",
+ "felt",
+ "grand",
+ "ball",
+ "yet",
+ "wave",
+ "drop",
+ "heart",
+ "am",
+ "present",
+ "heavy",
+ "dance",
+ "engine",
+ "position",
+ "arm",
+ "wide",
+ "sail",
+ "material",
+ "fraction",
+ "forest",
+ "sit",
+ "race",
+ "window",
+ "store",
+ "summer",
+ "train",
+ "sleep",
+ "prove",
+ "lone",
+ "leg",
+ "exercise",
+ "wall",
+ "catch",
+ "mount",
+ "wish",
+ "sky",
+ "board",
+ "joy",
+ "winter",
+ "sat",
+ "written",
+ "wild",
+ "instrument",
+ "kept",
+ "glass",
+ "grass",
+ "cow",
+ "job",
+ "edge",
+ "sign",
+ "visit",
+ "past",
+ "soft",
+ "fun",
+ "bright",
+ "gas",
+ "weather",
+ "month",
+ "million",
+ "bear",
+ "finish",
+ "happy",
+ "hope",
+ "flower",
+ "clothe",
+ "strange",
+ "gone",
+ "trade",
+ "melody",
+ "trip",
+ "office",
+ "receive",
+ "row",
+ "mouth",
+ "exact",
+ "symbol",
+ "die",
+ "least",
+ "trouble",
+ "shout",
+ "except",
+ "wrote",
+ "seed",
+ "tone",
+ "join",
+ "suggest",
+ "clean",
+ "break",
+ "lady",
+ "yard",
+ "rise",
+ "bad",
+ "blow",
+ "oil",
+ "blood",
+ "touch",
+ "grew",
+ "cent",
+ "mix",
+ "team",
+ "wire",
+ "cost",
+ "lost",
+ "brown",
+ "wear",
+ "garden",
+ "equal",
+ "sent",
+ "choose",
+ "fell",
+ "fit",
+ "flow",
+ "fair",
+ "bank",
+ "collect",
+ "save",
+ "control",
+ "decimal",
+ "ear",
+ "else",
+ "quite",
+ "broke",
+ "case",
+ "middle",
+ "kill",
+ "son",
+ "lake",
+ "moment",
+ "scale",
+ "loud",
+ "spring",
+ "observe",
+ "child",
+ "straight",
+ "consonant",
+ "nation",
+ "dictionary",
+ "milk",
+ "speed",
+ "method",
+ "organ",
+ "pay",
+ "age",
+ "section",
+ "dress",
+ "cloud",
+ "surprise",
+ "quiet",
+ "stone",
+ "tiny",
+ "climb",
+ "cool",
+ "design",
+ "poor",
+ "lot",
+ "experiment",
+ "bottom",
+ "key",
+ "iron",
+ "single",
+ "stick",
+ "flat",
+ "twenty",
+ "skin",
+ "smile",
+ "crease",
+ "hole",
+ "jump",
+ "baby",
+ "eight",
+ "village",
+ "meet",
+ "root",
+ "buy",
+ "raise",
+ "solve",
+ "metal",
+ "whether",
+ "push",
+ "seven",
+ "paragraph",
+ "third",
+ "shall",
+ "held",
+ "hair",
+ "describe",
+ "cook",
+ "floor",
+ "either",
+ "result",
+ "burn",
+ "hill",
+ "safe",
+ "cat",
+ "century",
+ "consider",
+ "type",
+ "law",
+ "bit",
+ "coast",
+ "copy",
+ "phrase",
+ "silent",
+ "tall",
+ "sand",
+ "soil",
+ "roll",
+ "temperature",
+ "finger",
+ "industry",
+ "value",
+ "fight",
+ "lie",
+ "beat",
+ "excite",
+ "natural",
+ "view",
+ "sense",
+ "capital",
+ "won't",
+ "chair",
+ "danger",
+ "fruit",
+ "rich",
+ "thick",
+ "soldier",
+ "process",
+ "operate",
+ "practice",
+ "separate",
+ "difficult",
+ "doctor",
+ "please",
+ "protect",
+ "noon",
+ "crop",
+ "modern",
+ "element",
+ "hit",
+ "student",
+ "corner",
+ "party",
+ "supply",
+ "whose",
+ "locate",
+ "ring",
+ "character",
+ "insect",
+ "caught",
+ "period",
+ "indicate",
+ "radio",
+ "spoke",
+ "atom",
+ "human",
+ "history",
+ "effect",
+ "electric",
+ "expect",
+ "bone",
+ "rail",
+ "imagine",
+ "provide",
+ "agree",
+ "thus",
+ "gentle",
+ "woman",
+ "captain",
+ "guess",
+ "necessary",
+ "sharp",
+ "wing",
+ "create",
+ "neighbor",
+ "wash",
+ "bat",
+ "rather",
+ "crowd",
+ "corn",
+ "compare",
+ "poem",
+ "string",
+ "bell",
+ "depend",
+ "meat",
+ "rub",
+ "tube",
+ "famous",
+ "dollar",
+ "stream",
+ "fear",
+ "sight",
+ "thin",
+ "triangle",
+ "planet",
+ "hurry",
+ "chief",
+ "colony",
+ "clock",
+ "mine",
+ "tie",
+ "enter",
+ "major",
+ "fresh",
+ "search",
+ "send",
+ "yellow",
+ "gun",
+ "allow",
+ "print",
+ "dead",
+ "spot",
+ "desert",
+ "suit",
+ "current",
+ "lift",
+ "rose",
+ "arrive",
+ "master",
+ "track",
+ "parent",
+ "shore",
+ "division",
+ "sheet",
+ "substance",
+ "favor",
+ "connect",
+ "post",
+ "spend",
+ "chord",
+ "fat",
+ "glad",
+ "original",
+ "share",
+ "station",
+ "dad",
+ "bread",
+ "charge",
+ "proper",
+ "bar",
+ "offer",
+ "segment",
+ "slave",
+ "duck",
+ "instant",
+ "market",
+ "degree",
+ "populate",
+ "chick",
+ "dear",
+ "enemy",
+ "reply",
+ "drink",
+ "occur",
+ "support",
+ "speech",
+ "nature",
+ "range",
+ "steam",
+ "motion",
+ "path",
+ "liquid",
+ "log",
+ "meant",
+ "quotient",
+ "teeth",
+ "shell",
+ "neck",
+ "oxygen",
+ "sugar",
+ "death",
+ "pretty",
+ "skill",
+ "women",
+ "season",
+ "solution",
+ "magnet",
+ "silver",
+ "thank",
+ "branch",
+ "match",
+ "suffix",
+ "especially",
+ "fig",
+ "afraid",
+ "huge",
+ "sister",
+ "steel",
+ "discuss",
+ "forward",
+ "similar",
+ "guide",
+ "experience",
+ "score",
+ "apple",
+ "bought",
+ "led",
+ "pitch",
+ "coat",
+ "mass",
+ "card",
+ "band",
+ "rope",
+ "slip",
+ "win",
+ "dream",
+ "evening",
+ "condition",
+ "feed",
+ "tool",
+ "total",
+ "basic",
+ "smell",
+ "valley",
+ "nor",
+ "double",
+ "seat",
+ "continue",
+ "block",
+ "chart",
+ "hat",
+ "sell",
+ "success",
+ "company",
+ "subtract",
+ "event",
+ "particular",
+ "deal",
+ "swim",
+ "term",
+ "opposite",
+ "wife",
+ "shoe",
+ "shoulder",
+ "spread",
+ "arrange",
+ "camp",
+ "invent",
+ "cotton",
+ "born",
+ "determine",
+ "quart",
+ "nine",
+ "truck",
+ "noise",
+ "level",
+ "chance",
+ "gather",
+ "shop",
+ "stretch",
+ "throw",
+ "shine",
+ "property",
+ "column",
+ "molecule",
+ "select",
+ "wrong",
+ "gray",
+ "repeat",
+ "require",
+ "broad",
+ "prepare",
+ "salt",
+ "nose",
+ "plural",
+ "anger",
+ "claim",
+ "continent"
+ ],
+ "polish": [
+ "się",
+ "i",
+ "w",
+ "nie",
+ "na",
+ "z",
+ "do",
+ "to",
+ "że",
+ "a",
+ "o",
+ "jak",
+ "ale",
+ "po",
+ "co",
+ "tak",
+ "za",
+ "od",
+ "go",
+ "już",
+ "jego",
+ "jej",
+ "czy",
+ "przez",
+ "tylko",
+ "tego",
+ "sobie",
+ "jeszcze",
+ "może",
+ "ze",
+ "kiedy",
+ "pan",
+ "ich",
+ "dla",
+ "by",
+ "gdy",
+ "teraz",
+ "ja",
+ "ten",
+ "który",
+ "nawet",
+ "bardzo",
+ "przed",
+ "tu",
+ "jednak",
+ "pod",
+ "coś",
+ "tam",
+ "wszystko",
+ "przy",
+ "więc",
+ "nic",
+ "bo",
+ "nim",
+ "żeby",
+ "miał",
+ "on",
+ "być",
+ "potem",
+ "też",
+ "jeśli",
+ "bez",
+ "nad",
+ "gdzie",
+ "lecz",
+ "siebie",
+ "nigdy",
+ "ani",
+ "właśnie",
+ "sam",
+ "u",
+ "dobrze",
+ "niż",
+ "jakby",
+ "aby",
+ "ty",
+ "oczy",
+ "zawsze",
+ "raz",
+ "były",
+ "no",
+ "albo",
+ "gdyby",
+ "aż",
+ "wtedy",
+ "przecież",
+ "ona",
+ "drzwi",
+ "jako",
+ "chyba",
+ "nagle",
+ "wszyscy",
+ "jeden",
+ "czym",
+ "kto",
+ "sposób",
+ "czas",
+ "kilka",
+ "dlaczego",
+ "razem",
+ "także",
+ "mój",
+ "nikt",
+ "choć",
+ "wiele",
+ "dwa",
+ "ktoś",
+ "lub",
+ "trzeba",
+ "niech",
+ "ku",
+ "twarz",
+ "którego",
+ "we",
+ "znowu",
+ "człowiek",
+ "jakiś",
+ "tutaj",
+ "szybko",
+ "tyle",
+ "głos",
+ "między",
+ "wreszcie",
+ "również",
+ "życie",
+ "oczywiście",
+ "znów",
+ "swoje",
+ "dlatego",
+ "zbyt",
+ "ciebie",
+ "zupełnie",
+ "taki",
+ "czego",
+ "iż",
+ "dopiero",
+ "powiedzieć",
+ "obok",
+ "prawie",
+ "poza",
+ "zaś",
+ "wciąż",
+ "jeżeli",
+ "moje",
+ "prawda",
+ "trzy",
+ "dzień",
+ "miejsce",
+ "mimo",
+ "ponieważ",
+ "zaraz",
+ "długo",
+ "coraz",
+ "podczas",
+ "natychmiast",
+ "zanim",
+ "cóż",
+ "każdy",
+ "zrobić",
+ "ojciec",
+ "my",
+ "dość",
+ "oraz",
+ "jaki",
+ "stanie",
+ "wcale",
+ "wśród",
+ "mieć",
+ "zresztą",
+ "dziś",
+ "ile",
+ "chociaż",
+ "gdyż",
+ "kiedyś",
+ "swój",
+ "jedynie",
+ "pewno",
+ "nieco",
+ "niemal",
+ "gdzieś",
+ "jedno",
+ "wokół",
+ "powoli",
+ "wrażenie",
+ "matka",
+ "świat",
+ "kobieta",
+ "skąd",
+ "myśl",
+ "stary",
+ "dużo",
+ "drogi",
+ "nadal",
+ "drugi",
+ "bowiem",
+ "przynajmniej",
+ "pewnie",
+ "często",
+ "razy",
+ "mężczyzna",
+ "dokładnie",
+ "niczego",
+ "mówić",
+ "dzięki",
+ "pewien",
+ "widać",
+ "cicho",
+ "właściwie",
+ "rzecz",
+ "wolno",
+ "oto",
+ "ciało",
+ "czasem",
+ "wiedzieć",
+ "stąd",
+ "wkrótce",
+ "dół",
+ "pół",
+ "noc",
+ "całkiem",
+ "wówczas",
+ "dom",
+ "wzrok",
+ "mocno",
+ "trudno",
+ "dziewczyna",
+ "dziecko",
+ "skoro",
+ "wobec",
+ "śmierć",
+ "rzeczywiście",
+ "koniec",
+ "tuż",
+ "daleko",
+ "pięć",
+ "serce",
+ "spokojnie",
+ "czegoś",
+ "wielki",
+ "dłoń",
+ "część",
+ "najpierw",
+ "mało",
+ "temat",
+ "włosy",
+ "wraz",
+ "usta",
+ "widok",
+ "równie",
+ "ponad"
+ ],
+ "dots": ["●"],
+ "punjabi": [
+ "ਦੇ",
+ "ਹੈ",
+ "ਦੀ",
+ "ਨੂੰ",
+ "ਦਾ",
+ "ਤੇ",
+ "ਵਿਚ",
+ "ਅਤੇ",
+ "ਨੇ",
+ "ਸੀ",
+ "ਵੀ",
+ "ਇਸ",
+ "ਕਿ",
+ "ਨਾਲ",
+ "ਕੇ",
+ "ਹਨ",
+ "ਹੀ",
+ "ਤੋਂ",
+ "ਨਹੀਂ",
+ "ਇਹ",
+ "ਤਾਂ",
+ "ਲਈ",
+ "ਉਹ",
+ "ਉਸ",
+ "ਸਿੰਘ",
+ "ਵਿੱਚ",
+ "ਇਕ",
+ "ਹੋ",
+ "ਕਰ",
+ "ਨਾ",
+ "ਮੈਂ",
+ "ਗਿਆ",
+ "ਉਨ੍ਹਾਂ",
+ "ਪਰ",
+ "ਕਰਨ",
+ "ਆਪਣੇ",
+ "ਦੀਆਂ",
+ "ਕੋਈ",
+ "ਚ",
+ "ਸਨ",
+ "ਕੀਤਾ",
+ "ਜਾਂ",
+ "ਕਰਨਾ",
+ "ਕਿਸੇ",
+ "ਕੁਝ",
+ "ਜਾ",
+ "ਇੱਕ",
+ "ਜੋ",
+ "ਗਈ",
+ "ਜੀ",
+ "ਰਿਹਾ",
+ "ਜਿਸ",
+ "ਹੋਰ",
+ "ਕੀਤੀ",
+ "ਗਏ",
+ "ਗੱਲ",
+ "ਜਾਂਦਾ",
+ "ਹਾਂ",
+ "ਰਹੇ",
+ "ਕਿਹਾ",
+ "ਤਰ੍ਹਾਂ",
+ "ਕਰਕੇ",
+ "ਹੋਣ",
+ "ਬਹੁਤ",
+ "ਕੀ",
+ "ਵਾਲੇ",
+ "ਆਪਣੀ",
+ "ਹੁੰਦਾ",
+ "ਆ",
+ "ਹੋਇਆ",
+ "ਦਿੱਤਾ",
+ "ਇਨ੍ਹਾਂ",
+ "ਜਦੋਂ",
+ "ਵਾਲਾ",
+ "ਘਰ",
+ "ਹੁਣ",
+ "ਗੁਰੂ",
+ "ਕੰਮ",
+ "ਰਹੀ",
+ "ਹੋਏ",
+ "ਲੈ",
+ "ਜੇ",
+ "ਸਮੇਂ",
+ "ਮੇਰੇ",
+ "ਮੈਨੂੰ",
+ "ਕਈ",
+ "ਦਿਨ",
+ "ਹੋਈ",
+ "ਸਕਦਾ",
+ "ਜਾਣ",
+ "ਪੰਜਾਬ",
+ "ਪਹਿਲਾਂ",
+ "ਲੋਕਾਂ",
+ "ਦੋ",
+ "ਵਿਚੋਂ",
+ "ਹੋਵੇ",
+ "ਅਸੀਂ",
+ "ਫਿਰ",
+ "ਲੋਕ",
+ "ਹਰ",
+ "ਸਭ",
+ "ਸਾਹਿਬ",
+ "ਸਾਰੇ",
+ "ਏ",
+ "ਅੱਜ",
+ "ਕਰਦੇ",
+ "ਬਾਰੇ",
+ "ਲਿਆ",
+ "ਵੱਲੋਂ",
+ "ਹੁੰਦੀ",
+ "ਤੱਕ",
+ "ਆਪ",
+ "ਕਾਰਨ",
+ "ਜਾਂਦੀ",
+ "ਸਿੱਖ",
+ "ਪਿੰਡ",
+ "ਕਰਦਾ",
+ "ਵਾਲੀ",
+ "ਸ੍ਰੀ",
+ "ਆਦਿ",
+ "ਪੰਜਾਬੀ",
+ "ਜਿਵੇਂ",
+ "ਰੂਪ",
+ "ਤੂੰ",
+ "ਉਹਨਾਂ",
+ "ਪਤਾ",
+ "ਜਾਂਦੇ",
+ "ਉਤੇ",
+ "ਸਰਕਾਰ",
+ "ਸ.",
+ "ਅਨੁਸਾਰ",
+ "ਬਾਅਦ",
+ "ਸਾਡੇ",
+ "ਜੀਵਨ",
+ "ਜਾਵੇ",
+ "ਹੋਣਾ",
+ "ਵਾਰ",
+ "ਦਿੱਤੀ",
+ "ਸਾਲ",
+ "ਹੁੰਦੇ",
+ "ਦੇਣ",
+ "ਅੰਦਰ",
+ "ਬਣ",
+ "ਤੌਰ",
+ "ਧਰਮ",
+ "ਕੋਲ",
+ "ਰਾਜ",
+ "ਆਈ",
+ "ਕੀਤੇ",
+ "ਜਿਨ੍ਹਾਂ",
+ "ਮੇਰੀ",
+ "ਆਪਣਾ",
+ "ਪਾਣੀ",
+ "ਪ੍ਰਧਾਨ",
+ "ਦਿਲ",
+ "ਸ਼ੁਰੂ",
+ "ਮਨ",
+ "ਵੱਲ",
+ "ਤੁਸੀਂ",
+ "ਕਦੇ",
+ "ਹੱਥ",
+ "ਮਾਂ",
+ "ਦੱਸਿਆ",
+ "ਵੱਧ",
+ "ਘੱਟ",
+ "ਆਇਆ",
+ "ਦੇਣਾ",
+ "ਭਾਰਤ",
+ "ਸਕਦੇ",
+ "ਉੱਤੇ",
+ "ਥਾਂ",
+ "ਦੂਜੇ",
+ "ਵਾਂਗ",
+ "ਵੱਖ",
+ "ਕਿਉਂਕਿ",
+ "ਇਸੇ",
+ "ਰਾਹੀਂ",
+ "ਵੇਲੇ",
+ "ਮੇਰਾ",
+ "ਫੇਰ",
+ "ਬਾਹਰ",
+ "ਜਾਣਾ",
+ "ਭਾਈ",
+ "ਪਿਆ",
+ "ਦੇਸ਼",
+ "ਮੁੱਖ",
+ "ਪਿਆਰ",
+ "ਪ੍ਰਾਪਤ",
+ "ਵਾਸਤੇ",
+ "ਨਾਂ",
+ "ਵਿਖੇ",
+ "ਵਿਆਹ",
+ "ਸਕਦੀ",
+ "ਸਮਾਜ",
+ "ਲੱਗ",
+ "ਪੈਦਾ",
+ "ਪੀ",
+ "ਜ਼ਿਆਦਾ",
+ "ਸਿਰ",
+ "ਠੀਕ"
+ ],
+ "swedish": [
+ "i",
+ "och",
+ "att",
+ "det",
+ "som",
+ "en",
+ "på",
+ "är",
+ "av",
+ "för",
+ "med",
+ "till",
+ "den",
+ "har",
+ "de",
+ "inte",
+ "om",
+ "ett",
+ "han",
+ "men",
+ "var",
+ "jag",
+ "sig",
+ "från",
+ "vi",
+ "så",
+ "kan",
+ "man",
+ "när",
+ "år",
+ "säger",
+ "hon",
+ "under",
+ "också",
+ "efter",
+ "eller",
+ "nu",
+ "sin",
+ "där",
+ "vid",
+ "mot",
+ "ska",
+ "skulle",
+ "kommer",
+ "ut",
+ "får",
+ "finns",
+ "vara",
+ "hade",
+ "alla",
+ "andra",
+ "mycket",
+ "än",
+ "här",
+ "då",
+ "sedan",
+ "över",
+ "bara",
+ "in",
+ "blir",
+ "upp",
+ "även",
+ "vad",
+ "få",
+ "två",
+ "vill",
+ "ha",
+ "många",
+ "hur",
+ "mer",
+ "går",
+ "sverige",
+ "kronor",
+ "detta",
+ "nya",
+ "procent",
+ "skall",
+ "hans",
+ "utan",
+ "sina",
+ "något",
+ "svenska",
+ "allt",
+ "första",
+ "fick",
+ "måste",
+ "mellan",
+ "blev",
+ "bli",
+ "dag",
+ "någon",
+ "några",
+ "sitt",
+ "stora",
+ "varit",
+ "dem",
+ "bland",
+ "kl",
+ "bra",
+ "tre",
+ "ta",
+ "genom",
+ "del",
+ "hela",
+ "annat",
+ "fram",
+ "gör",
+ "ingen",
+ "stockholm",
+ "göra",
+ "enligt",
+ "mig",
+ "redan",
+ "inom",
+ "kom",
+ "du",
+ "helt",
+ "ju",
+ "samma",
+ "kanske",
+ "själv",
+ "oss",
+ "tidigare",
+ "se",
+ "miljoner",
+ "dock",
+ "denna",
+ "både",
+ "tid",
+ "kunna",
+ "fått",
+ "stor",
+ "olika",
+ "ser",
+ "flera",
+ "plats",
+ "kunde",
+ "gå",
+ "ur",
+ "gäller",
+ "honom",
+ "aldrig",
+ "barn",
+ "varje",
+ "lite",
+ "sätt",
+ "just",
+ "väl",
+ "tar",
+ "åt",
+ "mest",
+ "per",
+ "står",
+ "fem",
+ "tror",
+ "rätt",
+ "dessa",
+ "gång",
+ "därför",
+ "fyra",
+ "ny",
+ "gick",
+ "hos",
+ "dessutom",
+ "ger",
+ "lika",
+ "eftersom",
+ "vilket",
+ "trots",
+ "tycker",
+ "människor",
+ "ligger",
+ "vet",
+ "kvar",
+ "bättre",
+ "gjorde",
+ "ändå",
+ "inför",
+ "regeringen",
+ "senaste",
+ "samtidigt",
+ "annan",
+ "ännu",
+ "the",
+ "blivit",
+ "fall",
+ "talet",
+ "exempel",
+ "gamla",
+ "deras",
+ "tiden",
+ "min",
+ "hennes",
+ "sista",
+ "komma",
+ "större",
+ "visar",
+ "senare",
+ "tog",
+ "nästa",
+ "göteborg",
+ "ge",
+ "mindre",
+ "gjort",
+ "usa",
+ "innan",
+ "alltid",
+ "pengar",
+ "sade",
+ "först",
+ "stället",
+ "vår",
+ "före",
+ "svensk",
+ "tillbaka",
+ "ner",
+ "nog",
+ "samt",
+ "ofta",
+ "själva",
+ "inget",
+ "fler",
+ "säga",
+ "egen",
+ "johansson",
+ "igen",
+ "tillsammans",
+ "runt",
+ "nästan",
+ "lopp",
+ "förra",
+ "året",
+ "mål",
+ "längre",
+ "svårt",
+ "bästa",
+ "andersson",
+ "anders",
+ "handlar",
+ "dagens",
+ "länge",
+ "stort",
+ "peter",
+ "frågan",
+ "spelar",
+ "enda",
+ "liv",
+ "fortfarande",
+ "medan",
+ "bakom",
+ "haft",
+ "minst",
+ "berättar",
+ "fast",
+ "lars",
+ "personer",
+ "början",
+ "problem",
+ "alltså",
+ "bort",
+ "varför",
+ "anser",
+ "våra",
+ "företag",
+ "mitt",
+ "dess",
+ "nytt",
+ "tio",
+ "inga",
+ "fanns",
+ "egna",
+ "utanför",
+ "ville",
+ "kr",
+ "långt",
+ "framför",
+ "båda",
+ "behöver",
+ "par",
+ "nej",
+ "miljarder",
+ "största",
+ "polisen",
+ "världen",
+ "direkt",
+ "folk",
+ "borde",
+ "väg",
+ "innebär",
+ "sex",
+ "klart",
+ "göran",
+ "bör",
+ "vidare",
+ "menar",
+ "odds",
+ "håller",
+ "lätt",
+ "ytterligare",
+ "persson",
+ "hem",
+ "gått",
+ "stockholms",
+ "kvinnor",
+ "flesta",
+ "ja",
+ "hand",
+ "särskilt",
+ "därmed",
+ "cirka",
+ "tv",
+ "landet",
+ "heller",
+ "gången",
+ "åren",
+ "började",
+ "däremot",
+ "sveriges",
+ "sett",
+ "henne",
+ "jobb",
+ "kring",
+ "känner",
+ "liten",
+ "beslut",
+ "egentligen",
+ "länder",
+ "börjar",
+ "politiska",
+ "ni",
+ "väder",
+ "hjälp",
+ "ordförande",
+ "tredje",
+ "vilka",
+ "talar",
+ "europa",
+ "sidan",
+ "riktigt",
+ "små",
+ "thomas",
+ "eu",
+ "arbete",
+ "vissa",
+ "skriver",
+ "såg",
+ "slut",
+ "ibland",
+ "ned",
+ "fråga",
+ "sa",
+ "hålla",
+ "unga",
+ "drygt",
+ "jan",
+ "emot",
+ "magnus",
+ "musik",
+ "nära",
+ "tyskland",
+ "gånger",
+ "gav",
+ "fel",
+ "tagit",
+ "nr",
+ "ekonomiska",
+ "namn",
+ "ekonyheter",
+ "steg",
+ "kommit",
+ "helst",
+ "ihop",
+ "liksom",
+ "nilsson",
+ "amerikanska",
+ "sådan",
+ "förslag",
+ "vilken",
+ "livet",
+ "dagar",
+ "stefan",
+ "vann",
+ "års",
+ "spela",
+ "johan",
+ "of",
+ "säkert",
+ "varandra",
+ "ganska",
+ "veckan",
+ "vem",
+ "ens",
+ "visst",
+ "lång",
+ "meter",
+ "all",
+ "nev",
+ "regi",
+ "hus",
+ "sitter",
+ "form",
+ "lilla",
+ "barnen",
+ "snabbt",
+ "män",
+ "grund",
+ "hemma",
+ "snart",
+ "möjligt",
+ "låg",
+ "dn",
+ "klara",
+ "frågor",
+ "verkligen",
+ "precis",
+ "amerikansk",
+ "publik",
+ "skolan",
+ "stöd",
+ "svensson",
+ "internationella",
+ "delar",
+ "hög",
+ "film",
+ "larsson",
+ "mats",
+ "bo",
+ "faktiskt",
+ "land",
+ "gott",
+ "gärna",
+ "högre",
+ "vårt",
+ "god",
+ "dagen",
+ "övriga",
+ "betala",
+ "lag",
+ "björn",
+ "slutet",
+ "finland",
+ "verkar",
+ "sagt",
+ "krav",
+ "stod",
+ "omkring",
+ "viktigt",
+ "ord",
+ "hoppas",
+ "kort",
+ "hittills",
+ "minuter",
+ "visa",
+ "eget",
+ "sådana",
+ "tänker",
+ "frankrike",
+ "sju",
+ "matchen",
+ "tycks",
+ "naturligtvis",
+ "bok",
+ "endast",
+ "annars",
+ "antal",
+ "enkelt",
+ "malmö",
+ "försöker",
+ "ryssland",
+ "tal",
+ "jonas",
+ "mannen",
+ "bengt",
+ "totalt",
+ "ute",
+ "visade",
+ "låter",
+ "anställda",
+ "vägen",
+ "dollar",
+ "spel",
+ "väldigt",
+ "norge",
+ "stå",
+ "erik",
+ "åtta",
+ "årets",
+ "via",
+ "satt",
+ "roll",
+ "brukar",
+ "nämligen",
+ "fortsätter",
+ "ungefär",
+ "framtiden",
+ "bäst",
+ "händer",
+ "bor",
+ "hårt",
+ "spelare",
+ "främst",
+ "program",
+ "kallade",
+ "rad",
+ "förstås",
+ "världens",
+ "höga",
+ "månader",
+ "kväll",
+ "familjen",
+ "igenom",
+ "höll",
+ "martin",
+ "känns",
+ "staten",
+ "poäng",
+ "antalet",
+ "skapa",
+ "historia",
+ "tänka",
+ "vd",
+ "heter",
+ "alls",
+ "hör",
+ "köpa",
+ "div",
+ "svt",
+ "os",
+ "företaget",
+ "samhället",
+ "sida",
+ "sådant",
+ "fredrik",
+ "maria",
+ "mina",
+ "extra",
+ "eriksson",
+ "kräver",
+ "goda",
+ "långa",
+ "hitta",
+ "svd",
+ "åtminstone",
+ "numera",
+ "timmar",
+ "vecka",
+ "knappast",
+ "dig",
+ "mikael",
+ "skrev",
+ "pettersson",
+ "vore",
+ "nyheter",
+ "lär",
+ "carl",
+ "veta",
+ "betyder",
+ "grupp",
+ "lever",
+ "spelade",
+ "betydligt",
+ "gammal",
+ "arbetar",
+ "tyska",
+ "äldre",
+ "dels",
+ "person",
+ "laget",
+ "tt",
+ "chef",
+ "alldeles",
+ "kommunen",
+ "stark",
+ "valet",
+ "ifrån",
+ "leder",
+ "kvinna",
+ "ökar",
+ "emu",
+ "hävdar",
+ "lägga",
+ "ulf",
+ "gunnar",
+ "skäl",
+ "låta",
+ "ansvar",
+ "sen",
+ "visserligen",
+ "politiker",
+ "använda",
+ "franska",
+ "rapport",
+ "karlsson",
+ "mera",
+ "veckor",
+ "fl",
+ "såväl",
+ "därefter",
+ "john",
+ "viss",
+ "landets",
+ "teater",
+ "ungdomar",
+ "plötsligt",
+ "ryska",
+ "kunnat",
+ "nyligen",
+ "möjlighet",
+ "rollerna",
+ "morgon",
+ "ena",
+ "mars",
+ "samband",
+ "öka",
+ "bygga",
+ "litet",
+ "börja",
+ "vänner",
+ "aik",
+ "president",
+ "marknaden",
+ "behövs",
+ "staden",
+ "högsta",
+ "ökat",
+ "utveckling",
+ "tala",
+ "perioden",
+ "ställer",
+ "försöka",
+ "starkt",
+ "socialdemokraterna",
+ "exempelvis",
+ "håll",
+ "resultatet",
+ "sätta",
+ "dit",
+ "arbetet",
+ "verksamhet",
+ "lämna",
+ "anna",
+ "christer",
+ "italien",
+ "bild",
+ "vars",
+ "eva",
+ "partiet",
+ "intresse",
+ "samarbete",
+ "närmare",
+ "januari",
+ "september",
+ "uppgifter",
+ "london",
+ "sak",
+ "fullt",
+ "göteborgs",
+ "michael",
+ "pengarna",
+ "paris",
+ "olsson",
+ "resultat",
+ "boken",
+ "södra",
+ "juni",
+ "fortsätta",
+ "dra",
+ "ingenting",
+ "samtliga",
+ "beror",
+ "värld",
+ "alltför",
+ "danmark",
+ "försök",
+ "rum",
+ "tur",
+ "politik",
+ "fri",
+ "förklarar",
+ "bilder",
+ "svar",
+ "öppna",
+ "död",
+ "tro",
+ "maj",
+ "tyckte",
+ "vatten",
+ "saker",
+ "val",
+ "enbart",
+ "inne",
+ "utbildning",
+ "eus",
+ "information",
+ "arbeta",
+ "vilja",
+ "centrum",
+ "europeiska",
+ "vinna",
+ "ökade",
+ "lena",
+ "leva",
+ "närmaste",
+ "ledningen",
+ "tidigt",
+ "rör",
+ "sker",
+ "robert",
+ "bilar",
+ "bolaget",
+ "tommy",
+ "olof",
+ "arbetslösheten",
+ "senast",
+ "högt",
+ "jämfört",
+ "hel",
+ "skriva",
+ "viktiga",
+ "övrigt",
+ "december",
+ "känna",
+ "ingår",
+ "match",
+ "delen",
+ "slags",
+ "ledning",
+ "drar",
+ "lennart",
+ "konstaterar",
+ "bil",
+ "finnas",
+ "föräldrar",
+ "bilen",
+ "engelska",
+ "publiken",
+ "målet",
+ "klar",
+ "slog",
+ "texttv",
+ "räknar",
+ "andreas",
+ "dom",
+ "knappt",
+ "krävs",
+ "kostar",
+ "lägre",
+ "filmen",
+ "viktig",
+ "klockan",
+ "emellertid",
+ "kritik",
+ "ställa",
+ "slår",
+ "låt",
+ "sälja",
+ "öppet",
+ "huset",
+ "lagen",
+ "råd",
+ "tas",
+ "kommun",
+ "norska",
+ "uppgift",
+ "möjligheter",
+ "tomas",
+ "starka",
+ "henrik",
+ "leif",
+ "york",
+ "hälften",
+ "allra",
+ "djurgården",
+ "medlemmar",
+ "beslutet",
+ "mamma",
+ "stad",
+ "bl",
+ "slå",
+ "området",
+ "förutom",
+ "familj",
+ "debatt",
+ "väntar",
+ "behov",
+ "kraft",
+ "utvecklingen",
+ "avgörande",
+ "hösten",
+ "anledning",
+ "vanliga",
+ "problemet",
+ "välja",
+ "trodde",
+ "full",
+ "patrik",
+ "volvo",
+ "förslaget",
+ "lokala",
+ "läsa",
+ "brev",
+ "snarare",
+ "ekonomi",
+ "nio",
+ "struken",
+ "aktier",
+ "mat",
+ "riksdagen",
+ "varken",
+ "svarar",
+ "undan",
+ "elever",
+ "dags",
+ "david",
+ "fjol",
+ "offentliga",
+ "räcker",
+ "sven",
+ "betydelse",
+ "vita",
+ "månad",
+ "uppdrag",
+ "åka",
+ "borta",
+ "ton",
+ "tag",
+ "rent",
+ "föll",
+ "förr",
+ "von",
+ "kontakt",
+ "tills",
+ "regeringens",
+ "augusti",
+ "fallet",
+ "lägger",
+ "lära",
+ "verk",
+ "böcker",
+ "ställning",
+ "spelas",
+ "sommaren",
+ "norra",
+ "kör",
+ "tvingas",
+ "fungerar",
+ "lärare",
+ "liknande",
+ "seger",
+ "brott",
+ "kallas",
+ "minska",
+ "saknar",
+ "vanligt",
+ "resa",
+ "svarta",
+ "universitet",
+ "nivå",
+ "tanke",
+ "and",
+ "ständigt",
+ "vare",
+ "privata",
+ "bygger",
+ "chans",
+ "söker",
+ "sätter",
+ "förstå",
+ "slag",
+ "viktigaste",
+ "följer",
+ "kyrkan",
+ "kände",
+ "ledare",
+ "stan",
+ "priset",
+ "projekt",
+ "april",
+ "svenskar",
+ "tidningen",
+ "nuvarande",
+ "strax",
+ "uppsala",
+ "visat",
+ "sent",
+ "läser",
+ "lyckades",
+ "tillräckligt",
+ "lyckas",
+ "närmast",
+ "st",
+ "utländska",
+ "börjat",
+ "samman",
+ "författare",
+ "dåligt",
+ "pappa",
+ "företagen",
+ "programmet",
+ "vm",
+ "håkan",
+ "kvinnan",
+ "klarar",
+ "pris",
+ "verksamheten",
+ "väljer",
+ "leda",
+ "nå",
+ "textat"
+ ],
+ "french": [
+ "nous",
+ "mais",
+ "pouvoir",
+ "avec",
+ "tout",
+ "aller",
+ "voir",
+ "en",
+ "bien",
+ "où",
+ "sans",
+ "homme",
+ "tu",
+ "ou",
+ "leur",
+ "si",
+ "deux",
+ "mari",
+ "moi",
+ "vouloir",
+ "femme",
+ "grand",
+ "quand",
+ "venir",
+ "celui",
+ "notre",
+ "devoir",
+ "là",
+ "jour",
+ "prendre",
+ "même",
+ "votre",
+ "rien",
+ "petit",
+ "encore",
+ "aussi",
+ "quelque",
+ "dont",
+ "mer",
+ "trouver",
+ "donner",
+ "temps",
+ "ça",
+ "peu",
+ "même",
+ "falloir",
+ "sous",
+ "parler",
+ "alors",
+ "main",
+ "chose",
+ "ton",
+ "mettre",
+ "vie",
+ "savoir",
+ "yeux",
+ "passer",
+ "mort",
+ "revenir",
+ "noir",
+ "maintenant",
+ "nouveau",
+ "ville",
+ "rue",
+ "enfin",
+ "appeler",
+ "soir",
+ "chambre",
+ "mourir",
+ "pas",
+ "partir",
+ "cinq",
+ "esprit",
+ "soleil",
+ "dernier",
+ "jeter",
+ "dix",
+ "roi",
+ "état",
+ "corps",
+ "beaucoup",
+ "suivre",
+ "bras",
+ "écrire",
+ "blanc",
+ "montrer",
+ "tomber",
+ "place",
+ "ouvrir",
+ "ah",
+ "parti",
+ "assez",
+ "leur",
+ "cher",
+ "voilà",
+ "année",
+ "loin",
+ "point",
+ "visage",
+ "bruit",
+ "lettre",
+ "franc",
+ "fond",
+ "force",
+ "arrêter",
+ "perdre",
+ "autre",
+ "après",
+ "regarder",
+ "toujours",
+ "jamais",
+ "cela",
+ "aimer",
+ "non",
+ "heure",
+ "croire",
+ "cent",
+ "monde",
+ "donc",
+ "enfant",
+ "fois",
+ "seul",
+ "autre",
+ "entre",
+ "vers",
+ "chez",
+ "demander",
+ "jeune",
+ "jusque",
+ "très",
+ "moment",
+ "rester",
+ "répondre",
+ "tête",
+ "père",
+ "fille",
+ "mille",
+ "premier",
+ "car",
+ "entendre",
+ "ni",
+ "bon",
+ "trois",
+ "ainsi",
+ "an",
+ "quatre",
+ "un",
+ "terre",
+ "contre",
+ "dieu",
+ "monsieur",
+ "voix",
+ "penser",
+ "quel",
+ "arriver",
+ "maison",
+ "devant",
+ "coup",
+ "beau",
+ "connaître",
+ "devenir",
+ "air",
+ "mot",
+ "nuit",
+ "sentir",
+ "eau",
+ "vieux",
+ "sembler",
+ "moins",
+ "tenir",
+ "ici",
+ "comprendre",
+ "oui",
+ "rendre",
+ "toi",
+ "vingt",
+ "depuis",
+ "attendre",
+ "sortir",
+ "ami",
+ "trop",
+ "porte",
+ "lequel",
+ "chaque",
+ "amour",
+ "pendant",
+ "déjà",
+ "pied",
+ "tant",
+ "gens",
+ "nom",
+ "vivre",
+ "reprendre",
+ "entrer",
+ "porter",
+ "pays",
+ "ciel",
+ "avant",
+ "regard",
+ "eux"
+ ],
+ "arabic": [
+ "،",
+ "ء",
+ "ءَ",
+ "آ",
+ "آب",
+ "آذار",
+ "آض",
+ "آل",
+ "آمينَ",
+ "آناء",
+ "آنفا",
+ "آه",
+ "آهاً",
+ "آهٍ",
+ "آهِ",
+ "أ",
+ "أبدا",
+ "أبريل",
+ "أبو",
+ "أبٌ",
+ "أجل",
+ "أجمع",
+ "أحد",
+ "أخبر",
+ "أخذ",
+ "أخو",
+ "أخٌ",
+ "أربع",
+ "أربعاء",
+ "أربعة",
+ "أربعمئة",
+ "أربعمائة",
+ "أرى",
+ "أسكن",
+ "أصبح",
+ "أصلا",
+ "أضحى",
+ "أطعم",
+ "أعطى",
+ "أعلم",
+ "أغسطس",
+ "أفريل",
+ "أفعل به",
+ "أفٍّ",
+ "أقبل",
+ "أكتوبر",
+ "أل",
+ "ألا",
+ "ألف",
+ "ألفى",
+ "أم",
+ "أما",
+ "أمام",
+ "أمامك",
+ "أمامكَ",
+ "أمد",
+ "أمس",
+ "أمسى",
+ "أمّا",
+ "أن",
+ "أنا",
+ "أنبأ",
+ "أنت",
+ "أنتم",
+ "أنتما",
+ "أنتن",
+ "أنتِ",
+ "أنشأ",
+ "أنه",
+ "أنًّ",
+ "أنّى",
+ "أهلا",
+ "أو",
+ "أوت",
+ "أوشك",
+ "أول",
+ "أولئك",
+ "أولاء",
+ "أولالك",
+ "أوّهْ",
+ "أى",
+ "أي",
+ "أيا",
+ "أيار",
+ "أيضا",
+ "أيلول",
+ "أين",
+ "أيّ",
+ "أيّان",
+ "أُفٍّ",
+ "ؤ",
+ "إحدى",
+ "إذ",
+ "إذا",
+ "إذاً",
+ "إذما",
+ "إذن",
+ "إزاء",
+ "إلى",
+ "إلي",
+ "إليكم",
+ "إليكما",
+ "إليكنّ",
+ "إليكَ",
+ "إلَيْكَ",
+ "إلّا",
+ "إمّا",
+ "إن",
+ "إنَّ",
+ "إى",
+ "إياك",
+ "إياكم",
+ "إياكما",
+ "إياكن",
+ "إيانا",
+ "إياه",
+ "إياها",
+ "إياهم",
+ "إياهما",
+ "إياهن",
+ "إياي",
+ "إيهٍ",
+ "ئ",
+ "ا",
+ "ا?",
+ "ا?ى",
+ "االا",
+ "االتى",
+ "ابتدأ",
+ "ابين",
+ "اتخذ",
+ "اثر",
+ "اثنا",
+ "اثنان",
+ "اثني",
+ "اثنين",
+ "اجل",
+ "احد",
+ "اخرى",
+ "اخلولق",
+ "اذا",
+ "اربعة",
+ "اربعون",
+ "اربعين",
+ "ارتدّ",
+ "استحال",
+ "اصبح",
+ "اضحى",
+ "اطار",
+ "اعادة",
+ "اعلنت",
+ "اف",
+ "اكثر",
+ "اكد",
+ "الآن",
+ "الألاء",
+ "الألى",
+ "الا",
+ "الاخيرة",
+ "الان",
+ "الاول",
+ "الاولى",
+ "التى",
+ "التي",
+ "الثاني",
+ "الثانية",
+ "الحالي",
+ "الذاتي",
+ "الذى",
+ "الذي",
+ "الذين",
+ "السابق",
+ "الف",
+ "اللاتي",
+ "اللتان",
+ "اللتيا",
+ "اللتين",
+ "اللذان",
+ "اللذين",
+ "اللواتي",
+ "الماضي",
+ "المقبل",
+ "الوقت",
+ "الى",
+ "الي",
+ "اليه",
+ "اليها",
+ "اليوم",
+ "اما",
+ "امام",
+ "امس",
+ "امسى",
+ "ان",
+ "انبرى",
+ "انقلب",
+ "انه",
+ "انها",
+ "او",
+ "اول",
+ "اي",
+ "ايار",
+ "ايام",
+ "ايضا",
+ "ب",
+ "بؤسا",
+ "بإن",
+ "بئس",
+ "باء",
+ "بات",
+ "باسم",
+ "بان",
+ "بخٍ",
+ "بد",
+ "بدلا",
+ "برس",
+ "بسبب",
+ "بسّ",
+ "بشكل",
+ "بضع",
+ "بطآن",
+ "بعد",
+ "بعدا",
+ "بعض",
+ "بغتة",
+ "بل",
+ "بلى",
+ "بن",
+ "به",
+ "بها",
+ "بهذا",
+ "بيد",
+ "بين",
+ "بَسْ",
+ "بَلْهَ",
+ "ة",
+ "ت",
+ "تاء",
+ "تارة",
+ "تاسع",
+ "تانِ",
+ "تانِك",
+ "تبدّل",
+ "تجاه",
+ "تحت",
+ "تحوّل",
+ "تخذ",
+ "ترك",
+ "تسع",
+ "تسعة",
+ "تسعمئة",
+ "تسعمائة",
+ "تسعون",
+ "تسعين",
+ "تشرين",
+ "تعسا",
+ "تعلَّم",
+ "تفعلان",
+ "تفعلون",
+ "تفعلين",
+ "تكون",
+ "تلقاء",
+ "تلك",
+ "تم",
+ "تموز",
+ "تينك",
+ "تَيْنِ",
+ "تِه",
+ "تِي",
+ "ث",
+ "ثاء",
+ "ثالث",
+ "ثامن",
+ "ثان",
+ "ثاني",
+ "ثلاث",
+ "ثلاثاء",
+ "ثلاثة",
+ "ثلاثمئة",
+ "ثلاثمائة",
+ "ثلاثون",
+ "ثلاثين",
+ "ثم",
+ "ثمان",
+ "ثمانمئة",
+ "ثمانون",
+ "ثماني",
+ "ثمانية",
+ "ثمانين",
+ "ثمنمئة",
+ "ثمَّ",
+ "ثمّ",
+ "ثمّة",
+ "ج",
+ "جانفي",
+ "جدا",
+ "جعل",
+ "جلل",
+ "جمعة",
+ "جميع",
+ "جنيه",
+ "جوان",
+ "جويلية",
+ "جير",
+ "جيم",
+ "ح",
+ "حاء",
+ "حادي",
+ "حار",
+ "حاشا",
+ "حاليا",
+ "حاي",
+ "حبذا",
+ "حبيب",
+ "حتى",
+ "حجا",
+ "حدَث",
+ "حرى",
+ "حزيران",
+ "حسب",
+ "حقا",
+ "حمدا",
+ "حمو",
+ "حمٌ",
+ "حوالى",
+ "حول",
+ "حيث",
+ "حيثما",
+ "حين",
+ "حيَّ",
+ "حَذارِ",
+ "خ",
+ "خاء",
+ "خاصة",
+ "خال",
+ "خامس",
+ "خبَّر",
+ "خلا",
+ "خلافا",
+ "خلال",
+ "خلف",
+ "خمس",
+ "خمسة",
+ "خمسمئة",
+ "خمسمائة",
+ "خمسون",
+ "خمسين",
+ "خميس",
+ "د",
+ "دال",
+ "درهم",
+ "درى",
+ "دواليك",
+ "دولار",
+ "دون",
+ "دونك",
+ "ديسمبر",
+ "دينار",
+ "ذ",
+ "ذا",
+ "ذات",
+ "ذاك",
+ "ذال",
+ "ذانك",
+ "ذانِ",
+ "ذلك",
+ "ذهب",
+ "ذو",
+ "ذيت",
+ "ذينك",
+ "ذَيْنِ",
+ "ذِه",
+ "ذِي",
+ "ر",
+ "رأى",
+ "راء",
+ "رابع",
+ "راح",
+ "رجع",
+ "رزق",
+ "رويدك",
+ "ريال",
+ "ريث",
+ "رُبَّ",
+ "ز",
+ "زاي",
+ "زعم",
+ "زود",
+ "زيارة",
+ "س",
+ "ساء",
+ "سابع",
+ "سادس",
+ "سبت",
+ "سبتمبر",
+ "سبحان",
+ "سبع",
+ "سبعة",
+ "سبعمئة",
+ "سبعمائة",
+ "سبعون",
+ "سبعين",
+ "ست",
+ "ستة",
+ "ستكون",
+ "ستمئة",
+ "ستمائة",
+ "ستون",
+ "ستين",
+ "سحقا",
+ "سرا",
+ "سرعان",
+ "سقى",
+ "سمعا",
+ "سنة",
+ "سنتيم",
+ "سنوات",
+ "سوف",
+ "سوى",
+ "سين",
+ "ش",
+ "شباط",
+ "شبه",
+ "شتانَ",
+ "شخصا",
+ "شرع",
+ "شمال",
+ "شيكل",
+ "شين",
+ "شَتَّانَ",
+ "ص",
+ "صاد",
+ "صار",
+ "صباح",
+ "صبر",
+ "صبرا",
+ "صدقا",
+ "صراحة",
+ "صفر",
+ "صهٍ",
+ "صهْ",
+ "ض",
+ "ضاد",
+ "ضحوة",
+ "ضد",
+ "ضمن",
+ "ط",
+ "طاء",
+ "طاق",
+ "طالما",
+ "طرا",
+ "طفق",
+ "طَق",
+ "ظ",
+ "ظاء",
+ "ظل",
+ "ظلّ",
+ "ظنَّ",
+ "ع",
+ "عاد",
+ "عاشر",
+ "عام",
+ "عاما",
+ "عامة",
+ "عجبا",
+ "عدا",
+ "عدة",
+ "عدد",
+ "عدم",
+ "عدَّ",
+ "عسى",
+ "عشر",
+ "عشرة",
+ "عشرون",
+ "عشرين",
+ "عل",
+ "علق",
+ "علم",
+ "على",
+ "علي",
+ "عليك",
+ "عليه",
+ "عليها",
+ "علًّ",
+ "عن",
+ "عند",
+ "عندما",
+ "عنه",
+ "عنها",
+ "عوض",
+ "عيانا",
+ "عين",
+ "عَدَسْ",
+ "غ",
+ "غادر",
+ "غالبا",
+ "غدا",
+ "غداة",
+ "غير",
+ "غين",
+ "ـ",
+ "ف",
+ "فإن",
+ "فاء",
+ "فان",
+ "فانه",
+ "فبراير",
+ "فرادى",
+ "فضلا",
+ "فقد",
+ "فقط",
+ "فكان",
+ "فلان",
+ "فلس",
+ "فهو",
+ "فو",
+ "فوق",
+ "فى",
+ "في",
+ "فيفري",
+ "فيه",
+ "فيها",
+ "ق",
+ "قاطبة",
+ "قاف",
+ "قال",
+ "قام",
+ "قبل",
+ "قد",
+ "قرش",
+ "قطّ",
+ "قلما",
+ "قوة",
+ "ك",
+ "كأن",
+ "كأنّ",
+ "كأيّ",
+ "كأيّن",
+ "كاد",
+ "كاف",
+ "كان",
+ "كانت",
+ "كانون",
+ "كثيرا",
+ "كذا",
+ "كذلك",
+ "كرب",
+ "كسا",
+ "كل",
+ "كلتا",
+ "كلم",
+ "كلَّا",
+ "كلّما",
+ "كم",
+ "كما",
+ "كن",
+ "كى",
+ "كيت",
+ "كيف",
+ "كيفما",
+ "كِخ",
+ "ل",
+ "لأن",
+ "لا",
+ "لا سيما",
+ "لات",
+ "لازال",
+ "لاسيما",
+ "لام",
+ "لايزال",
+ "لبيك",
+ "لدن",
+ "لدى",
+ "لدي",
+ "لذلك",
+ "لعل",
+ "لعلَّ",
+ "لعمر",
+ "لقاء",
+ "لكن",
+ "لكنه",
+ "لكنَّ",
+ "للامم",
+ "لم",
+ "لما",
+ "لمّا",
+ "لن",
+ "له",
+ "لها",
+ "لهذا",
+ "لهم",
+ "لو",
+ "لوكالة",
+ "لولا",
+ "لوما",
+ "ليت",
+ "ليرة",
+ "ليس",
+ "ليسب",
+ "م",
+ "مئة",
+ "مئتان",
+ "ما",
+ "ما أفعله",
+ "ما انفك",
+ "ما برح",
+ "مائة",
+ "ماانفك",
+ "مابرح",
+ "مادام",
+ "ماذا",
+ "مارس",
+ "مازال",
+ "مافتئ",
+ "ماي",
+ "مايزال",
+ "مايو",
+ "متى",
+ "مثل",
+ "مذ",
+ "مرّة",
+ "مساء",
+ "مع",
+ "معاذ",
+ "معه",
+ "مقابل",
+ "مكانكم",
+ "مكانكما",
+ "مكانكنّ",
+ "مكانَك",
+ "مليار",
+ "مليم",
+ "مليون",
+ "مما",
+ "من",
+ "منذ",
+ "منه",
+ "منها",
+ "مه",
+ "مهما",
+ "ميم",
+ "ن",
+ "نا",
+ "نبَّا",
+ "نحن",
+ "نحو",
+ "نعم",
+ "نفس",
+ "نفسه",
+ "نهاية",
+ "نوفمبر",
+ "نون",
+ "نيسان",
+ "نيف",
+ "نَخْ",
+ "نَّ",
+ "ه",
+ "هؤلاء",
+ "ها",
+ "هاء",
+ "هاكَ",
+ "هبّ",
+ "هذا",
+ "هذه",
+ "هل",
+ "هللة",
+ "هلم",
+ "هلّا",
+ "هم",
+ "هما",
+ "همزة",
+ "هن",
+ "هنا",
+ "هناك",
+ "هنالك",
+ "هو",
+ "هي",
+ "هيا",
+ "هيهات",
+ "هيّا",
+ "هَؤلاء",
+ "هَاتانِ",
+ "هَاتَيْنِ",
+ "هَاتِه",
+ "هَاتِي",
+ "هَجْ",
+ "هَذا",
+ "هَذانِ",
+ "هَذَيْنِ",
+ "هَذِه",
+ "هَذِي",
+ "هَيْهات",
+ "و",
+ "و6",
+ "وأبو",
+ "وأن",
+ "وا",
+ "واحد",
+ "واضاف",
+ "واضافت",
+ "واكد",
+ "والتي",
+ "والذي",
+ "وان",
+ "واهاً",
+ "واو",
+ "واوضح",
+ "وبين",
+ "وثي",
+ "وجد",
+ "وراءَك",
+ "ورد",
+ "وعلى",
+ "وفي",
+ "وقال",
+ "وقالت",
+ "وقد",
+ "وقف",
+ "وكان",
+ "وكانت",
+ "ولا",
+ "ولايزال",
+ "ولكن",
+ "ولم",
+ "وله",
+ "وليس",
+ "ومع",
+ "ومن",
+ "وهب",
+ "وهذا",
+ "وهو",
+ "وهي",
+ "وَيْ",
+ "وُشْكَانَ",
+ "ى",
+ "ي",
+ "ياء",
+ "يفعلان",
+ "يفعلون",
+ "يكون",
+ "يلي",
+ "يمكن",
+ "يمين",
+ "ين",
+ "يناير",
+ "يوان",
+ "يورو",
+ "يوليو",
+ "يوم",
+ "يونيو",
+ "ّأيّان"
+ ],
+ "portuguese": [
+ "contra",
+ "sistema",
+ "foi",
+ "à",
+ "eles",
+ "rio",
+ "fazer",
+ "estava",
+ "José",
+ "mercado",
+ "qual",
+ "sul",
+ "ter",
+ "só",
+ "Carlos",
+ "anos",
+ "duas",
+ "outra",
+ "dia",
+ "presidente",
+ "editoria",
+ "especial",
+ "no",
+ "hoje",
+ "acordo",
+ "vai",
+ "diz",
+ "dias",
+ "Fernando",
+ "estão",
+ "ele",
+ "as",
+ "milhões",
+ "foram",
+ "outro",
+ "banco",
+ "assim",
+ "sua",
+ "trabalho",
+ "cotidiano",
+ "grande",
+ "dinheiro",
+ "plano",
+ "o",
+ "e",
+ "nada",
+ "preços",
+ "ela",
+ "aos",
+ "sendo",
+ "estado",
+ "do",
+ "grupo",
+ "quando",
+ "local",
+ "eu",
+ "antes",
+ "às",
+ "este",
+ "pode",
+ "suas",
+ "está",
+ "número",
+ "apenas",
+ "seu",
+ "porque",
+ "durante",
+ "com",
+ "segundo",
+ "menos",
+ "agora",
+ "final",
+ "reportagem",
+ "afirmou",
+ "mês",
+ "para",
+ "empresa",
+ "pelo",
+ "de",
+ "da",
+ "ontem",
+ "são",
+ "também",
+ "parte",
+ "semana",
+ "dois",
+ "sem",
+ "primeira",
+ "Paulo",
+ "um",
+ "mesmo",
+ "candidato",
+ "esse",
+ "tempo",
+ "vez",
+ "Brasil",
+ "nem",
+ "disse",
+ "mas",
+ "tudo",
+ "mais",
+ "outros",
+ "ou",
+ "até",
+ "cerca",
+ "uma",
+ "vida",
+ "desde",
+ "melhor",
+ "a",
+ "todo",
+ "página",
+ "pessoas",
+ "dos",
+ "quatro",
+ "seus",
+ "cidade",
+ "muito",
+ "caso",
+ "todos",
+ "seja",
+ "já",
+ "tinha",
+ "casa",
+ "governo",
+ "ainda",
+ "lei",
+ "sempre",
+ "exemplo",
+ "partir",
+ "maior",
+ "os",
+ "faz",
+ "como",
+ "tem",
+ "era",
+ "na",
+ "real",
+ "processo",
+ "podem",
+ "ser",
+ "polícia",
+ "têm",
+ "programa",
+ "ano",
+ "nova",
+ "empresas",
+ "há",
+ "deve",
+ "é",
+ "me",
+ "mundo",
+ "quem",
+ "país",
+ "essa",
+ "jogo",
+ "equipe",
+ "novo",
+ "onde",
+ "bem",
+ "pelos",
+ "três",
+ "por",
+ "depois",
+ "qualquer",
+ "alguns",
+ "nacional",
+ "esporte",
+ "será",
+ "isso",
+ "folha",
+ "entre",
+ "em",
+ "não",
+ "esta",
+ "que",
+ "mil",
+ "após",
+ "sobre",
+ "se",
+ "primeiro",
+ "ao",
+ "cada",
+ "pouco",
+ "além",
+ "brasileira",
+ "você",
+ "forma",
+ "das",
+ "pela",
+ "samba",
+ "amizade",
+ "golpe",
+ "limitante",
+ "esquadrão",
+ "xícara",
+ "café",
+ "profissional",
+ "adorável",
+ "chuva",
+ "liberdade",
+ "infinito",
+ "diversidade",
+ "artigos",
+ "coxinha",
+ "pão",
+ "vazio",
+ "luz",
+ "irregular",
+ "relógio",
+ "porta",
+ "gato",
+ "cesta",
+ "vela",
+ "plantas",
+ "pedra",
+ "céu",
+ "automóvel",
+ "bicicleta",
+ "caneca",
+ "pessoa",
+ "comeram",
+ "pulei",
+ "amanhã",
+ "corda",
+ "motorista",
+ "quebrei",
+ "caminhavam",
+ "simplicidade",
+ "emoções",
+ "ofensivo",
+ "esqueceu",
+ "tristes",
+ "disponível",
+ "cinco",
+ "pastel",
+ "poço",
+ "moça",
+ "garoto",
+ "certo",
+ "talvez",
+ "pior",
+ "branco",
+ "borracha",
+ "roda",
+ "baú",
+ "circo",
+ "cria",
+ "simplesmente",
+ "amarei"
+ ],
+ "russian": [
+ "год",
+ "человек",
+ "время",
+ "дело",
+ "жизнь",
+ "день",
+ "рука",
+ "раз",
+ "работа",
+ "слово",
+ "место",
+ "лицо",
+ "друг",
+ "глаз",
+ "вопрос",
+ "дом",
+ "сторона",
+ "страна",
+ "мир",
+ "случай",
+ "голова",
+ "ребенок",
+ "сила",
+ "конец",
+ "вид",
+ "система",
+ "часть",
+ "город",
+ "отношение",
+ "женщина",
+ "деньги",
+ "земля",
+ "машина",
+ "вода",
+ "отец",
+ "проблема",
+ "час",
+ "право",
+ "нога",
+ "решение",
+ "дверь",
+ "образ",
+ "история",
+ "власть",
+ "закон",
+ "война",
+ "бог",
+ "голос",
+ "тысяча",
+ "книга",
+ "возможность",
+ "результат",
+ "ночь",
+ "стол",
+ "имя",
+ "область",
+ "статья",
+ "число",
+ "компания",
+ "народ",
+ "жена",
+ "группа",
+ "развитие",
+ "процесс",
+ "суд",
+ "условие",
+ "средство",
+ "начало",
+ "свет",
+ "пора",
+ "путь",
+ "душа",
+ "уровень",
+ "форма",
+ "связь",
+ "минута",
+ "улица",
+ "вечер",
+ "качество",
+ "мысль",
+ "дорога",
+ "мать",
+ "действие",
+ "месяц",
+ "государство",
+ "язык",
+ "любовь",
+ "взгляд",
+ "мама",
+ "век",
+ "школа",
+ "цель",
+ "общество",
+ "деятельность",
+ "организация",
+ "президент",
+ "комната",
+ "порядок",
+ "момент",
+ "театр",
+ "письмо",
+ "утро",
+ "помощь",
+ "ситуация",
+ "роль",
+ "рубль",
+ "смысл",
+ "состояние",
+ "квартира",
+ "орган",
+ "внимание",
+ "тело",
+ "труд",
+ "сын",
+ "мера",
+ "смерть",
+ "рынок",
+ "программа",
+ "задача",
+ "предприятие",
+ "окно",
+ "разговор",
+ "правительство",
+ "семья",
+ "производство",
+ "информация",
+ "положение",
+ "центр",
+ "ответ",
+ "муж",
+ "автор",
+ "стена",
+ "интерес",
+ "федерация",
+ "правило",
+ "управление",
+ "мужчина",
+ "идея",
+ "партия",
+ "совет",
+ "счет",
+ "сердце",
+ "движение",
+ "вещь",
+ "материал",
+ "неделя",
+ "чувство",
+ "глава",
+ "наука",
+ "ряд",
+ "газета",
+ "причина",
+ "плечо",
+ "цена",
+ "план",
+ "речь",
+ "точка",
+ "основа",
+ "товарищ",
+ "культура",
+ "данные",
+ "мнение",
+ "документ",
+ "институт",
+ "ход",
+ "проект",
+ "встреча",
+ "директор",
+ "срок",
+ "палец",
+ "опыт",
+ "служба",
+ "судьба",
+ "девушка",
+ "очередь",
+ "лес",
+ "состав",
+ "член",
+ "количество",
+ "событие",
+ "объект",
+ "зал",
+ "создание",
+ "значение",
+ "период",
+ "шаг",
+ "брат",
+ "искусство",
+ "структура",
+ "номер",
+ "пример",
+ "исследование",
+ "гражданин",
+ "игра",
+ "начальник",
+ "рост",
+ "тема",
+ "принцип",
+ "метод",
+ "тип",
+ "фильм",
+ "край",
+ "гость",
+ "воздух",
+ "характер",
+ "борьба",
+ "использование",
+ "размер",
+ "образование",
+ "мальчик",
+ "кровь",
+ "район",
+ "небо",
+ "армия",
+ "класс",
+ "представитель",
+ "участие",
+ "девочка",
+ "политика",
+ "герой",
+ "картина",
+ "доллар",
+ "спина",
+ "территория",
+ "пол",
+ "поле",
+ "изменение",
+ "направление",
+ "рисунок",
+ "течение",
+ "церковь",
+ "банк",
+ "сцена",
+ "население",
+ "большинство",
+ "музыка",
+ "правда",
+ "свобода",
+ "память",
+ "команда",
+ "союз",
+ "врач",
+ "договор",
+ "дерево",
+ "факт",
+ "хозяин",
+ "природа",
+ "угол",
+ "телефон",
+ "позиция",
+ "двор",
+ "писатель",
+ "самолет",
+ "объем",
+ "род",
+ "солнце",
+ "вера",
+ "берег",
+ "спектакль",
+ "фирма",
+ "способ",
+ "завод",
+ "цвет",
+ "журнал",
+ "руководитель",
+ "специалист",
+ "оценка",
+ "регион",
+ "песня",
+ "процент",
+ "родитель",
+ "море",
+ "требование",
+ "основание",
+ "половина",
+ "роман",
+ "круг",
+ "анализ",
+ "стихи",
+ "автомобиль",
+ "экономика",
+ "литература",
+ "бумага",
+ "поэт",
+ "степень",
+ "господин",
+ "надежда",
+ "предмет",
+ "вариант",
+ "министр",
+ "граница",
+ "дух",
+ "модель",
+ "операция",
+ "пара",
+ "сон",
+ "название",
+ "ум",
+ "повод",
+ "старик",
+ "миллион",
+ "успех",
+ "счастье",
+ "ребята",
+ "кабинет",
+ "магазин",
+ "пространство",
+ "выход",
+ "удар",
+ "база",
+ "знание",
+ "текст",
+ "защита",
+ "руководство",
+ "площадь",
+ "сознание",
+ "возраст",
+ "участник",
+ "участок",
+ "пункт",
+ "линия",
+ "желание",
+ "папа",
+ "доктор",
+ "губа",
+ "дочь",
+ "среда",
+ "председатель",
+ "представление",
+ "солдат",
+ "художник",
+ "волос",
+ "оружие",
+ "соответствие",
+ "ветер",
+ "парень",
+ "зрение",
+ "генерал",
+ "огонь",
+ "понятие",
+ "строительство",
+ "ухо",
+ "грудь",
+ "нос",
+ "страх",
+ "услуга",
+ "содержание",
+ "радость",
+ "безопасность",
+ "продукт",
+ "комплекс",
+ "бизнес",
+ "сад",
+ "сотрудник",
+ "лето",
+ "курс",
+ "предложение",
+ "рот",
+ "технология",
+ "реформа",
+ "отсутствие",
+ "собака",
+ "камень",
+ "будущее",
+ "рассказ",
+ "контроль",
+ "река",
+ "продукция",
+ "сумма",
+ "техника",
+ "здание",
+ "сфера",
+ "необходимость",
+ "фонд",
+ "подготовка",
+ "лист",
+ "республика",
+ "хозяйство",
+ "воля",
+ "бюджет",
+ "снег",
+ "деревня",
+ "мужик",
+ "элемент",
+ "обстоятельство",
+ "немец",
+ "победа",
+ "источник",
+ "звезда",
+ "выбор",
+ "масса",
+ "итог",
+ "сестра",
+ "практика",
+ "проведение",
+ "карман",
+ "слава",
+ "кухня",
+ "определение",
+ "функция",
+ "войско",
+ "комиссия",
+ "применение",
+ "капитан",
+ "работник",
+ "обеспечение",
+ "офицер",
+ "фамилия",
+ "предел",
+ "выборы",
+ "ученый",
+ "бутылка",
+ "бой",
+ "теория",
+ "зона",
+ "отдел",
+ "зуб",
+ "разработка",
+ "личность",
+ "гора",
+ "товар",
+ "метр",
+ "праздник",
+ "влияние",
+ "читатель",
+ "удовольствие",
+ "актер",
+ "слеза",
+ "ответственность",
+ "учитель",
+ "акт",
+ "боль",
+ "множество",
+ "особенность",
+ "показатель",
+ "корабль",
+ "звук",
+ "впечатление",
+ "частность",
+ "детство",
+ "вывод",
+ "профессор",
+ "доля",
+ "норма",
+ "прошлое",
+ "командир",
+ "коридор",
+ "поддержка",
+ "рамка",
+ "враг",
+ "этап",
+ "черт",
+ "дед",
+ "собрание",
+ "прием",
+ "болезнь",
+ "клетка",
+ "кожа",
+ "заявление",
+ "попытка",
+ "сравнение",
+ "расчет",
+ "депутат",
+ "комитет",
+ "знак",
+ "дядя",
+ "учет",
+ "хлеб",
+ "чай",
+ "режим",
+ "целое",
+ "вирус",
+ "выражение",
+ "здоровье",
+ "зима",
+ "десяток",
+ "глубина",
+ "сеть",
+ "студент",
+ "секунда",
+ "скорость",
+ "поиск",
+ "суть",
+ "налог",
+ "ошибка",
+ "доход",
+ "режиссер",
+ "поверхность",
+ "ощущение",
+ "карта",
+ "клуб",
+ "станция",
+ "революция",
+ "колено",
+ "министерство",
+ "стекло",
+ "этаж",
+ "высота",
+ "бабушка",
+ "трубка",
+ "газ",
+ "мастер",
+ "поведение",
+ "столица",
+ "механизм",
+ "передача",
+ "способность",
+ "подход",
+ "энергия",
+ "существование",
+ "исполнение",
+ "кино",
+ "сожаление",
+ "заместитель",
+ "ресурс",
+ "акция",
+ "рождение",
+ "администрация",
+ "стоимость",
+ "улыбка",
+ "артист",
+ "сосед",
+ "фраза",
+ "фигура",
+ "субъект",
+ "реакция",
+ "список",
+ "фотография",
+ "журналист",
+ "май",
+ "нарушение",
+ "заседание",
+ "толпа",
+ "больница",
+ "существо",
+ "свойство",
+ "долг",
+ "поколение",
+ "животное",
+ "схема",
+ "усилие",
+ "отличие",
+ "остров",
+ "противник",
+ "волна",
+ "реализация",
+ "страница",
+ "формирование",
+ "житель",
+ "красота",
+ "птица",
+ "растение",
+ "тень",
+ "явление",
+ "храм",
+ "запах",
+ "водка",
+ "наличие",
+ "ужас",
+ "одежда",
+ "кресло",
+ "больной",
+ "поезд",
+ "университет",
+ "традиция",
+ "адрес",
+ "декабрь",
+ "ладонь",
+ "сведение",
+ "цветок",
+ "лидер",
+ "октябрь",
+ "занятие",
+ "сентябрь",
+ "помещение",
+ "январь",
+ "зритель",
+ "редакция",
+ "стиль",
+ "весна",
+ "фактор",
+ "август",
+ "известие",
+ "зависимость",
+ "охрана",
+ "оборудование",
+ "концерт",
+ "отделение",
+ "расход",
+ "выставка",
+ "милиция",
+ "переход",
+ "эпоха",
+ "запад",
+ "произведение",
+ "родина",
+ "собственность",
+ "тайна",
+ "трава",
+ "лагерь",
+ "имущество",
+ "кровать",
+ "аппарат",
+ "середина",
+ "март",
+ "клиент",
+ "дама",
+ "фронт",
+ "отрасль",
+ "стул",
+ "беседа",
+ "законодательство",
+ "продажа",
+ "повышение",
+ "музей",
+ "след",
+ "полковник",
+ "сомнение",
+ "понимание",
+ "апрель",
+ "князь",
+ "рыба",
+ "дума",
+ "кодекс",
+ "сутки",
+ "чудо",
+ "шея",
+ "судья",
+ "крыша",
+ "настроение",
+ "поток",
+ "должность",
+ "преступление",
+ "мозг",
+ "честь",
+ "пост",
+ "еврей",
+ "июнь",
+ "сотня",
+ "дождь",
+ "лестница",
+ "дача",
+ "установка",
+ "появление",
+ "получение",
+ "образец",
+ "труба",
+ "главное",
+ "осень",
+ "костюм",
+ "баба",
+ "ценность",
+ "обязанность",
+ "пьеса",
+ "таблица",
+ "вино",
+ "воспоминание",
+ "лошадь",
+ "коллега",
+ "организм",
+ "ученик",
+ "учреждение",
+ "открытие",
+ "том",
+ "черта",
+ "характеристика",
+ "выполнение",
+ "оборона",
+ "выступление",
+ "температура",
+ "перспектива",
+ "подруга",
+ "приказ",
+ "жертва",
+ "ресторан",
+ "километр",
+ "спор",
+ "вкус",
+ "признак",
+ "промышленность",
+ "американец",
+ "лоб",
+ "заключение",
+ "восток",
+ "исключение",
+ "ключ",
+ "постановление",
+ "слой",
+ "бок",
+ "июль",
+ "перевод",
+ "секретарь",
+ "кусок",
+ "слух",
+ "польза",
+ "звонок",
+ "обстановка",
+ "чиновник",
+ "соглашение",
+ "деталь",
+ "русский",
+ "тишина",
+ "зарплата",
+ "билет",
+ "подарок",
+ "тюрьма",
+ "ящик",
+ "конкурс",
+ "книжка",
+ "изучение",
+ "просьба",
+ "царь",
+ "публика",
+ "смех",
+ "сообщение",
+ "угроза",
+ "беда",
+ "блок",
+ "достижение",
+ "назначение",
+ "реклама",
+ "портрет",
+ "масло",
+ "стакан",
+ "урок",
+ "часы",
+ "крик",
+ "творчество",
+ "телевизор",
+ "инструмент",
+ "концепция",
+ "лейтенант",
+ "экран",
+ "дно",
+ "реальность",
+ "канал",
+ "мясо",
+ "знакомый",
+ "щека",
+ "конфликт",
+ "переговоры",
+ "запись",
+ "вагон",
+ "площадка",
+ "последствие",
+ "сотрудничество",
+ "зеркало",
+ "тон",
+ "академия",
+ "палата",
+ "потребность",
+ "ноябрь",
+ "увеличение",
+ "дурак",
+ "поездка",
+ "обед",
+ "потеря",
+ "февраль",
+ "мероприятие",
+ "парк",
+ "принятие",
+ "устройство",
+ "вещество",
+ "категория",
+ "сезон",
+ "гостиница",
+ "издание",
+ "объединение",
+ "темнота",
+ "человечество",
+ "колесо",
+ "опасность",
+ "разрешение",
+ "воздействие",
+ "коллектив",
+ "камера",
+ "запас",
+ "следствие",
+ "длина",
+ "крыло",
+ "округ",
+ "фон",
+ "кандидат",
+ "родственник",
+ "давление",
+ "присутствие",
+ "взаимодействие",
+ "доска",
+ "партнер",
+ "двигатель",
+ "шум",
+ "достоинство",
+ "грех",
+ "нож",
+ "полет",
+ "страсть",
+ "испытание",
+ "TRUE",
+ "оплата",
+ "разница",
+ "водитель",
+ "пакет",
+ "снижение",
+ "формула",
+ "живот",
+ "капитал",
+ "мост",
+ "новость",
+ "эффект",
+ "вход",
+ "губернатор",
+ "доклад",
+ "смена",
+ "убийство",
+ "эксперт",
+ "автобус",
+ "платье",
+ "кадр",
+ "тетя",
+ "общение",
+ "психология",
+ "лев",
+ "порог",
+ "проверка",
+ "процедура",
+ "рабочий",
+ "ремонт",
+ "обращение",
+ "обучение",
+ "ожидание",
+ "памятник",
+ "корень",
+ "наблюдение",
+ "буква",
+ "доказательство",
+ "признание",
+ "постель",
+ "штаб",
+ "владелец",
+ "компьютер",
+ "инженер",
+ "старуха",
+ "лодка",
+ "ракета",
+ "серия",
+ "шутка",
+ "вершина",
+ "выпуск",
+ "кулак",
+ "лед",
+ "торговля",
+ "нефть",
+ "молодежь",
+ "цифра",
+ "корпус",
+ "недостаток",
+ "сапог",
+ "сущность",
+ "талант",
+ "эффективность",
+ "кофе",
+ "полоса",
+ "основное",
+ "рассмотрение",
+ "сбор",
+ "штат",
+ "следователь",
+ "жилье",
+ "мешок",
+ "описание",
+ "куст",
+ "отказ",
+ "замок",
+ "редактор",
+ "дворец",
+ "забота",
+ "пиво",
+ "диван",
+ "столик",
+ "эксперимент",
+ "печать",
+ "кольцо",
+ "пистолет",
+ "воспитание",
+ "начальство",
+ "профессия",
+ "ворота",
+ "добро",
+ "дружба",
+ "покой",
+ "риск",
+ "окончание",
+ "дым",
+ "брак",
+ "величина",
+ "записка",
+ "инициатива",
+ "совесть",
+ "активность",
+ "кость",
+ "спорт",
+ "кредит",
+ "господь",
+ "майор",
+ "конференция",
+ "потолок",
+ "библиотека",
+ "помощник",
+ "конструкция",
+ "отдых",
+ "ручка",
+ "металл",
+ "молоко",
+ "прокурор",
+ "транспорт",
+ "поэзия",
+ "соединение",
+ "краска",
+ "расстояние",
+ "мечта",
+ "село",
+ "еда",
+ "зло",
+ "подразделение",
+ "сюжет",
+ "рубеж",
+ "сигнал",
+ "атмосфера",
+ "крест",
+ "вес",
+ "взрыв",
+ "контакт",
+ "сигарета",
+ "восторг",
+ "золото",
+ "почва",
+ "премия",
+ "король",
+ "подъезд",
+ "шанс",
+ "автомат",
+ "заказ",
+ "мальчишка",
+ "очки",
+ "миг",
+ "штука",
+ "чтение",
+ "поселок",
+ "свидетель",
+ "ставка",
+ "сумка",
+ "удивление",
+ "хвост",
+ "песок",
+ "поворот",
+ "возвращение",
+ "мгновение",
+ "статус",
+ "озеро",
+ "строй",
+ "параметр",
+ "сказка",
+ "тенденция",
+ "вина",
+ "дыхание",
+ "версия",
+ "масштаб",
+ "монастырь",
+ "хозяйка",
+ "дочка",
+ "танец",
+ "эксплуатация",
+ "коммунист",
+ "пенсия",
+ "приятель",
+ "объяснение",
+ "набор",
+ "производитель",
+ "пыль",
+ "философия",
+ "мощность",
+ "обязательство",
+ "уход",
+ "горло",
+ "кризис",
+ "указание",
+ "плата",
+ "яблоко",
+ "препарат",
+ "действительность",
+ "москвич",
+ "остаток",
+ "изображение",
+ "сделка",
+ "сочинение",
+ "покупатель",
+ "танк",
+ "затрата",
+ "строка",
+ "единица",
+ "обработка",
+ "чемпионат"
+ ],
+ "finnish": [
+ "kuin",
+ "minä",
+ "hänen",
+ "että",
+ "hän",
+ "oli",
+ "varten",
+ "päälle",
+ "olemme",
+ "kanssa",
+ "ne",
+ "olla",
+ "klo",
+ "yksi",
+ "olla",
+ "tämä",
+ "alkaen",
+ "mukaan",
+ "kuuma",
+ "sana",
+ "mutta",
+ "mitä",
+ "jotkut",
+ "on",
+ "se",
+ "sinua",
+ "tai",
+ "oli",
+ "päälle",
+ "jos",
+ "ja",
+ "tehdä",
+ "sisään",
+ "me",
+ "voida",
+ "ulos",
+ "muut",
+ "olivat",
+ "joka",
+ "tehdä",
+ "niiden",
+ "aika",
+ "jos",
+ "tahtoa",
+ "miten",
+ "sanoi",
+ "pieni",
+ "kukin",
+ "kertoa",
+ "tekee",
+ "setti",
+ "kolme",
+ "haluta",
+ "ilma",
+ "hyvin",
+ "myös",
+ "pelata",
+ "pieni",
+ "pää",
+ "laittaa",
+ "koti",
+ "lue",
+ "käsi",
+ "portti",
+ "suuri",
+ "oikeinkirjoituksen",
+ "lisätä",
+ "jopa",
+ "maa",
+ "täällä",
+ "iso",
+ "korkea",
+ "niin",
+ "seurata",
+ "säädös",
+ "miksi",
+ "kysyä",
+ "miehet",
+ "muutos",
+ "meni",
+ "valo",
+ "pois",
+ "tarvitsevat",
+ "talo",
+ "kuva",
+ "yrittää",
+ "meille",
+ "jälleen",
+ "eläin",
+ "kohta",
+ "äiti",
+ "maailma",
+ "lähellä",
+ "rakentaa",
+ "itse",
+ "maa",
+ "isä",
+ "kaikki",
+ "uusi",
+ "työ",
+ "osa",
+ "ottaa",
+ "saada",
+ "paikka",
+ "tehty",
+ "elää",
+ "jossa",
+ "jälkeen",
+ "takaisin",
+ "vähän",
+ "vain",
+ "pyöreä",
+ "mies",
+ "vuosi",
+ "tuli",
+ "joka",
+ "hyvä",
+ "minua",
+ "antaa",
+ "meidän",
+ "alle",
+ "nimi",
+ "hyvin",
+ "kautta",
+ "vain",
+ "lomake",
+ "virke",
+ "suuri",
+ "ajatella",
+ "sanoa",
+ "auttaa",
+ "alhainen",
+ "linja",
+ "erota",
+ "vuoro",
+ "syy",
+ "paljon",
+ "tarkoittaa",
+ "ennen",
+ "liikkua",
+ "oikea",
+ "poika",
+ "vanha",
+ "liian",
+ "sama",
+ "hän",
+ "kaikki",
+ "siellä",
+ "kun",
+ "ylös",
+ "käyttää",
+ "sinun",
+ "tapa",
+ "noin",
+ "monet",
+ "sitten",
+ "niitä",
+ "kirjoittaa",
+ "olisi",
+ "kuten",
+ "niin",
+ "nämä",
+ "hänen",
+ "pitkä",
+ "tehdä",
+ "asia",
+ "nähdä",
+ "häntä",
+ "kaksi",
+ "on",
+ "katso",
+ "lisää",
+ "päivä",
+ "voisi",
+ "mennä",
+ "tulevat",
+ "teki",
+ "numero",
+ "ääni",
+ "ei",
+ "eniten",
+ "ihmiset",
+ "minun",
+ "yli",
+ "tietää",
+ "vesi",
+ "kuin",
+ "puhelu",
+ "ensimmäinen",
+ "jotka",
+ "saattaa",
+ "alas",
+ "puoli",
+ "ollut",
+ "nyt",
+ "löytää",
+ "pää",
+ "seistä",
+ "oma",
+ "sivu"
+ ]
+}
diff --git a/src/index.css b/src/index.css
new file mode 100644
index 0000000..bd6213e
--- /dev/null
+++ b/src/index.css
@@ -0,0 +1,3 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
\ No newline at end of file
diff --git a/src/main.tsx b/src/main.tsx
new file mode 100644
index 0000000..051bc7c
--- /dev/null
+++ b/src/main.tsx
@@ -0,0 +1,11 @@
+import React from "react";
+import ReactDOM from "react-dom/client";
+import App from "./App.tsx";
+import "./index.css";
+import "@fontsource/nunito/700.css";
+
+ReactDOM.createRoot(document.getElementById("root")!).render(
+
+
+
+);
diff --git a/src/themes/theme-helpers.ts b/src/themes/theme-helpers.ts
new file mode 100644
index 0000000..5ef2a55
--- /dev/null
+++ b/src/themes/theme-helpers.ts
@@ -0,0 +1,7 @@
+import themes from "./themes.json";
+
+type ThemeNames = keyof typeof themes;
+
+const allThemes: ThemeNames[] = Object.keys(themes) as ThemeNames[];
+
+export { type ThemeNames, allThemes };
diff --git a/src/themes/themes.json b/src/themes/themes.json
new file mode 100644
index 0000000..a5d7556
--- /dev/null
+++ b/src/themes/themes.json
@@ -0,0 +1,53 @@
+{
+ "dark": {
+ "title": "#F8F9FA",
+ "mainBackground": "#090A0B",
+ "containerBackground": "#1C1F22",
+ "accentBackground": "#495057",
+ "errorBackground": "#ff758f",
+ "highlightBackground": "#6C757D",
+ "primaryBorder": "#6C757D",
+ "highlightBorder": "#adb5bd",
+ "accentBorder": "#a9d6e5",
+ "activeText": "#fff",
+ "successText": "#90a955",
+ "errorText": "#f08080",
+ "mainText": "#000",
+ "highlightText": "#e0fbfc",
+ "accentText": "#62b6cb"
+ },
+ "light": {
+ "title": "#070606",
+ "mainBackground": "#F6F5F4",
+ "containerBackground": "#E3E0DD",
+ "accentBackground": "#B6AFA8",
+ "errorBackground": "#008770",
+ "highlightBackground": "#939282",
+ "primaryBorder": "#939282",
+ "highlightBorder": "#524A42",
+ "accentBorder": "#56391A",
+ "activeText": "#000",
+ "successText": "#6F56AA",
+ "errorText": "#0F7F7F",
+ "mainText": "#FFF",
+ "highlightText": "#1F0403",
+ "accentText": "#9D4934"
+ },
+ "slate": {
+ "title": "#F6F5F4",
+ "mainBackground": "#708090",
+ "containerBackground": "#778899",
+ "accentBackground": "#B0C4DE",
+ "errorBackground": "#4682B4",
+ "highlightBackground": "#708090",
+ "primaryBorder": "#708090",
+ "highlightBorder": "#B0E0E6",
+ "accentBorder": "#87CEEB",
+ "activeText": "#e0fbfc",
+ "successText": "#556B2F",
+ "errorText": "#8B0000",
+ "mainText": "#4682B4",
+ "highlightText": "#B0C4DE",
+ "accentText": "#e0fbfc"
+ }
+}
diff --git a/src/utils/index.ts b/src/utils/index.ts
new file mode 100644
index 0000000..cd57ea9
--- /dev/null
+++ b/src/utils/index.ts
@@ -0,0 +1,19 @@
+import type wordDictionary from "@data/word-dictionary.json";
+import themes from "@theme/themes.json";
+
+type LanguageNames = keyof typeof wordDictionary;
+
+type ThemeNames = keyof typeof themes;
+
+type Count = 10 | 25 | 50 | 100 | 200;
+type StringCount = "10" | "25" | "50" | "100" | "200";
+
+const allThemes: ThemeNames[] = Object.keys(themes) as ThemeNames[];
+
+export {
+ type ThemeNames,
+ allThemes,
+ type LanguageNames,
+ type Count,
+ type StringCount,
+};
diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts
new file mode 100644
index 0000000..11f02fe
--- /dev/null
+++ b/src/vite-env.d.ts
@@ -0,0 +1 @@
+///
diff --git a/tailwind.config.js b/tailwind.config.js
new file mode 100644
index 0000000..a5836d5
--- /dev/null
+++ b/tailwind.config.js
@@ -0,0 +1,25 @@
+/** @type {import('tailwindcss').Config} */
+
+import { createThemes } from "tw-colors";
+// can't use import aliases: https://github.com/tailwindlabs/tailwindcss/issues/11097
+import themes from "./src/themes/themes.json";
+
+export default {
+ content: ["./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}"],
+ // TODO: add lots of themes here :), probably import them from other places
+ plugins: [
+ createThemes({
+ ...themes,
+ }),
+ ],
+ theme: {
+ extend: {
+ fontFamily: {
+ nunito: ["Nunito", "sans"],
+ },
+ boxShadow: {
+ "custom-shadow": "0px 0px 10px -1px",
+ },
+ },
+ },
+};
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 0000000..2d90704
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,33 @@
+{
+ "compilerOptions": {
+ "target": "ES2020",
+ "useDefineForClassFields": true,
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
+ "module": "ESNext",
+ "skipLibCheck": true,
+
+ "baseUrl": "./",
+ "resolveJsonModule": true,
+ "paths": {
+ "@components/*": ["src/components/*"],
+ "@data/*": ["src/data/*"],
+ "@theme/*": ["src/themes/*"],
+ "@utils": ["src/utils/index.ts"]
+ },
+
+ /* Bundler mode */
+ "moduleResolution": "bundler",
+ "allowImportingTsExtensions": true,
+ "isolatedModules": true,
+ "noEmit": true,
+ "jsx": "react-jsx",
+
+ /* Linting */
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "noFallthroughCasesInSwitch": true
+ },
+ "include": ["src"],
+ "references": [{ "path": "./tsconfig.node.json" }]
+}
diff --git a/tsconfig.node.json b/tsconfig.node.json
new file mode 100644
index 0000000..42872c5
--- /dev/null
+++ b/tsconfig.node.json
@@ -0,0 +1,10 @@
+{
+ "compilerOptions": {
+ "composite": true,
+ "skipLibCheck": true,
+ "module": "ESNext",
+ "moduleResolution": "bundler",
+ "allowSyntheticDefaultImports": true
+ },
+ "include": ["vite.config.ts"]
+}
diff --git a/vite.config.ts b/vite.config.ts
new file mode 100644
index 0000000..2db9f2c
--- /dev/null
+++ b/vite.config.ts
@@ -0,0 +1,8 @@
+import { defineConfig } from "vite";
+import tsconfigPaths from "vite-tsconfig-paths";
+import react from "@vitejs/plugin-react";
+
+// https://vitejs.dev/config/
+export default defineConfig({
+ plugins: [react(), tsconfigPaths()],
+});