diff --git a/frontend/index.css b/frontend/index.css
new file mode 100644
index 0000000..970412b
--- /dev/null
+++ b/frontend/index.css
@@ -0,0 +1,41 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
+
+:root {
+ font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
+ line-height: 1.5;
+ font-weight: 400;
+
+ color: #222;
+ background-color: #ffffff;
+
+ font-synthesis: none;
+ text-rendering: optimizeLegibility;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ -webkit-text-size-adjust: 100%;
+
+ box-sizing: border-box;
+}
+
+*,
+*::before,
+*::after {
+ box-sizing: inherit;
+}
+
+body {
+ margin: 0;
+}
+
+/* Input styling: */
+:root {
+ --radius-inputs: 0.25em;
+}
+
+select,
+textarea,
+input[type="text"] {
+ border-radius: var(--radius-inputs);
+}
diff --git a/frontend/index.html b/frontend/index.html
index cbc1f5a..42043c2 100644
--- a/frontend/index.html
+++ b/frontend/index.html
@@ -1,14 +1,15 @@
-
-
-
-
-
- Vite + Preact
-
-
-
-
-
+
+
+
+
+
+
+ Vite + Preact
+
+
+
+
+
diff --git a/frontend/package.json b/frontend/package.json
index 33d93c0..7882d8b 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -18,6 +18,9 @@
},
"devDependencies": {
"@preact/preset-vite": "^2.5.0",
+ "autoprefixer": "^10.4.19",
+ "postcss": "^8.4.38",
+ "tailwindcss": "^3.4.4",
"typescript": "^5.3.3",
"vite": "^4.3.2"
}
diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml
index 1785f4b..fd77ec3 100644
--- a/frontend/pnpm-lock.yaml
+++ b/frontend/pnpm-lock.yaml
@@ -1,694 +1,524 @@
-lockfileVersion: '6.0'
+lockfileVersion: '9.0'
settings:
autoInstallPeers: true
excludeLinksFromLockfile: false
-dependencies:
- '@preact/signals':
- specifier: ^1.2.2
- version: 1.2.2(preact@10.19.3)
- '@trpc/client':
- specifier: ^10.45.0
- version: 10.45.0(@trpc/server@10.45.0)
- chart.js:
- specifier: ^4.4.1
- version: 4.4.1
- dotenv:
- specifier: ^16.4.1
- version: 16.4.1
- preact:
- specifier: ^10.13.1
- version: 10.19.3
- preact-iso:
- specifier: ^2.3.2
- version: 2.3.2(preact-render-to-string@6.3.1)(preact@10.19.3)
- preact-render-to-string:
- specifier: ^6.3.1
- version: 6.3.1(preact@10.19.3)
- react-chartjs-2:
- specifier: ^5.2.0
- version: 5.2.0(chart.js@4.4.1)(react@18.2.0)
-
-devDependencies:
- '@preact/preset-vite':
- specifier: ^2.5.0
- version: 2.8.1(@babel/core@7.23.7)(preact@10.19.3)(vite@4.5.1)
- typescript:
- specifier: ^5.3.3
- version: 5.3.3
- vite:
- specifier: ^4.3.2
- version: 4.5.1
+importers:
+
+ .:
+ dependencies:
+ '@preact/signals':
+ specifier: ^1.2.2
+ version: 1.2.2(preact@10.19.3)
+ '@trpc/client':
+ specifier: ^10.45.0
+ version: 10.45.0(@trpc/server@10.45.0)
+ chart.js:
+ specifier: ^4.4.1
+ version: 4.4.1
+ dotenv:
+ specifier: ^16.4.1
+ version: 16.4.1
+ preact:
+ specifier: ^10.13.1
+ version: 10.19.3
+ preact-iso:
+ specifier: ^2.3.2
+ version: 2.3.2(preact-render-to-string@6.3.1(preact@10.19.3))(preact@10.19.3)
+ preact-render-to-string:
+ specifier: ^6.3.1
+ version: 6.3.1(preact@10.19.3)
+ react-chartjs-2:
+ specifier: ^5.2.0
+ version: 5.2.0(chart.js@4.4.1)(react@18.2.0)
+ devDependencies:
+ '@preact/preset-vite':
+ specifier: ^2.5.0
+ version: 2.8.1(@babel/core@7.23.7)(preact@10.19.3)(vite@4.5.1)
+ autoprefixer:
+ specifier: ^10.4.19
+ version: 10.4.19(postcss@8.4.38)
+ postcss:
+ specifier: ^8.4.38
+ version: 8.4.38
+ tailwindcss:
+ specifier: ^3.4.4
+ version: 3.4.4
+ typescript:
+ specifier: ^5.3.3
+ version: 5.3.3
+ vite:
+ specifier: ^4.3.2
+ version: 4.5.1
packages:
- /@ampproject/remapping@2.2.1:
+ '@alloc/quick-lru@5.2.0':
+ resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
+ engines: {node: '>=10'}
+
+ '@ampproject/remapping@2.2.1':
resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==}
engines: {node: '>=6.0.0'}
- dependencies:
- '@jridgewell/gen-mapping': 0.3.3
- '@jridgewell/trace-mapping': 0.3.20
- dev: true
- /@babel/code-frame@7.23.5:
+ '@babel/code-frame@7.23.5':
resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/highlight': 7.23.4
- chalk: 2.4.2
- dev: true
- /@babel/compat-data@7.23.5:
+ '@babel/compat-data@7.23.5':
resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==}
engines: {node: '>=6.9.0'}
- dev: true
- /@babel/core@7.23.7:
+ '@babel/core@7.23.7':
resolution: {integrity: sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@ampproject/remapping': 2.2.1
- '@babel/code-frame': 7.23.5
- '@babel/generator': 7.23.6
- '@babel/helper-compilation-targets': 7.23.6
- '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7)
- '@babel/helpers': 7.23.7
- '@babel/parser': 7.23.6
- '@babel/template': 7.22.15
- '@babel/traverse': 7.23.7
- '@babel/types': 7.23.6
- convert-source-map: 2.0.0
- debug: 4.3.4
- gensync: 1.0.0-beta.2
- json5: 2.2.3
- semver: 6.3.1
- transitivePeerDependencies:
- - supports-color
- dev: true
- /@babel/generator@7.23.6:
+ '@babel/generator@7.23.6':
resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.23.6
- '@jridgewell/gen-mapping': 0.3.3
- '@jridgewell/trace-mapping': 0.3.20
- jsesc: 2.5.2
- dev: true
- /@babel/helper-annotate-as-pure@7.22.5:
+ '@babel/helper-annotate-as-pure@7.22.5':
resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.23.6
- dev: true
- /@babel/helper-compilation-targets@7.23.6:
+ '@babel/helper-compilation-targets@7.23.6':
resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/compat-data': 7.23.5
- '@babel/helper-validator-option': 7.23.5
- browserslist: 4.22.2
- lru-cache: 5.1.1
- semver: 6.3.1
- dev: true
- /@babel/helper-environment-visitor@7.22.20:
+ '@babel/helper-environment-visitor@7.22.20':
resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==}
engines: {node: '>=6.9.0'}
- dev: true
- /@babel/helper-function-name@7.23.0:
+ '@babel/helper-function-name@7.23.0':
resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/template': 7.22.15
- '@babel/types': 7.23.6
- dev: true
- /@babel/helper-hoist-variables@7.22.5:
+ '@babel/helper-hoist-variables@7.22.5':
resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.23.6
- dev: true
- /@babel/helper-module-imports@7.22.15:
+ '@babel/helper-module-imports@7.22.15':
resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.23.6
- dev: true
- /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.7):
+ '@babel/helper-module-transforms@7.23.3':
resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
- dependencies:
- '@babel/core': 7.23.7
- '@babel/helper-environment-visitor': 7.22.20
- '@babel/helper-module-imports': 7.22.15
- '@babel/helper-simple-access': 7.22.5
- '@babel/helper-split-export-declaration': 7.22.6
- '@babel/helper-validator-identifier': 7.22.20
- dev: true
- /@babel/helper-plugin-utils@7.22.5:
+ '@babel/helper-plugin-utils@7.22.5':
resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==}
engines: {node: '>=6.9.0'}
- dev: true
- /@babel/helper-simple-access@7.22.5:
+ '@babel/helper-simple-access@7.22.5':
resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.23.6
- dev: true
- /@babel/helper-split-export-declaration@7.22.6:
+ '@babel/helper-split-export-declaration@7.22.6':
resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.23.6
- dev: true
- /@babel/helper-string-parser@7.23.4:
+ '@babel/helper-string-parser@7.23.4':
resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==}
engines: {node: '>=6.9.0'}
- dev: true
- /@babel/helper-validator-identifier@7.22.20:
+ '@babel/helper-validator-identifier@7.22.20':
resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==}
engines: {node: '>=6.9.0'}
- dev: true
- /@babel/helper-validator-option@7.23.5:
+ '@babel/helper-validator-option@7.23.5':
resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==}
engines: {node: '>=6.9.0'}
- dev: true
- /@babel/helpers@7.23.7:
+ '@babel/helpers@7.23.7':
resolution: {integrity: sha512-6AMnjCoC8wjqBzDHkuqpa7jAKwvMo4dC+lr/TFBz+ucfulO1XMpDnwWPGBNwClOKZ8h6xn5N81W/R5OrcKtCbQ==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/template': 7.22.15
- '@babel/traverse': 7.23.7
- '@babel/types': 7.23.6
- transitivePeerDependencies:
- - supports-color
- dev: true
- /@babel/highlight@7.23.4:
+ '@babel/highlight@7.23.4':
resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/helper-validator-identifier': 7.22.20
- chalk: 2.4.2
- js-tokens: 4.0.0
- dev: true
- /@babel/parser@7.23.6:
+ '@babel/parser@7.23.6':
resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==}
engines: {node: '>=6.0.0'}
hasBin: true
- dependencies:
- '@babel/types': 7.23.6
- dev: true
- /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.7):
+ '@babel/plugin-syntax-jsx@7.23.3':
resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.23.7
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
- /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.23.7):
+ '@babel/plugin-transform-react-jsx-development@7.22.5':
resolution: {integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.23.7
- '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.7)
- dev: true
- /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.23.7):
+ '@babel/plugin-transform-react-jsx@7.23.4':
resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.23.7
- '@babel/helper-annotate-as-pure': 7.22.5
- '@babel/helper-module-imports': 7.22.15
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.7)
- '@babel/types': 7.23.6
- dev: true
- /@babel/template@7.22.15:
+ '@babel/template@7.22.15':
resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/code-frame': 7.23.5
- '@babel/parser': 7.23.6
- '@babel/types': 7.23.6
- dev: true
- /@babel/traverse@7.23.7:
+ '@babel/traverse@7.23.7':
resolution: {integrity: sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/code-frame': 7.23.5
- '@babel/generator': 7.23.6
- '@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.6
- '@babel/types': 7.23.6
- debug: 4.3.4
- globals: 11.12.0
- transitivePeerDependencies:
- - supports-color
- dev: true
- /@babel/types@7.23.6:
+ '@babel/types@7.23.6':
resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/helper-string-parser': 7.23.4
- '@babel/helper-validator-identifier': 7.22.20
- to-fast-properties: 2.0.0
- dev: true
- /@esbuild/android-arm64@0.18.20:
+ '@esbuild/android-arm64@0.18.20':
resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==}
engines: {node: '>=12'}
cpu: [arm64]
os: [android]
- requiresBuild: true
- dev: true
- optional: true
- /@esbuild/android-arm@0.18.20:
+ '@esbuild/android-arm@0.18.20':
resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==}
engines: {node: '>=12'}
cpu: [arm]
os: [android]
- requiresBuild: true
- dev: true
- optional: true
- /@esbuild/android-x64@0.18.20:
+ '@esbuild/android-x64@0.18.20':
resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==}
engines: {node: '>=12'}
cpu: [x64]
os: [android]
- requiresBuild: true
- dev: true
- optional: true
- /@esbuild/darwin-arm64@0.18.20:
+ '@esbuild/darwin-arm64@0.18.20':
resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==}
engines: {node: '>=12'}
cpu: [arm64]
os: [darwin]
- requiresBuild: true
- dev: true
- optional: true
- /@esbuild/darwin-x64@0.18.20:
+ '@esbuild/darwin-x64@0.18.20':
resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [darwin]
- requiresBuild: true
- dev: true
- optional: true
- /@esbuild/freebsd-arm64@0.18.20:
+ '@esbuild/freebsd-arm64@0.18.20':
resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==}
engines: {node: '>=12'}
cpu: [arm64]
os: [freebsd]
- requiresBuild: true
- dev: true
- optional: true
- /@esbuild/freebsd-x64@0.18.20:
+ '@esbuild/freebsd-x64@0.18.20':
resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [freebsd]
- requiresBuild: true
- dev: true
- optional: true
- /@esbuild/linux-arm64@0.18.20:
+ '@esbuild/linux-arm64@0.18.20':
resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==}
engines: {node: '>=12'}
cpu: [arm64]
os: [linux]
- requiresBuild: true
- dev: true
- optional: true
- /@esbuild/linux-arm@0.18.20:
+ '@esbuild/linux-arm@0.18.20':
resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==}
engines: {node: '>=12'}
cpu: [arm]
os: [linux]
- requiresBuild: true
- dev: true
- optional: true
- /@esbuild/linux-ia32@0.18.20:
+ '@esbuild/linux-ia32@0.18.20':
resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==}
engines: {node: '>=12'}
cpu: [ia32]
os: [linux]
- requiresBuild: true
- dev: true
- optional: true
- /@esbuild/linux-loong64@0.18.20:
+ '@esbuild/linux-loong64@0.18.20':
resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==}
engines: {node: '>=12'}
cpu: [loong64]
os: [linux]
- requiresBuild: true
- dev: true
- optional: true
- /@esbuild/linux-mips64el@0.18.20:
+ '@esbuild/linux-mips64el@0.18.20':
resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==}
engines: {node: '>=12'}
cpu: [mips64el]
os: [linux]
- requiresBuild: true
- dev: true
- optional: true
- /@esbuild/linux-ppc64@0.18.20:
+ '@esbuild/linux-ppc64@0.18.20':
resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==}
engines: {node: '>=12'}
cpu: [ppc64]
os: [linux]
- requiresBuild: true
- dev: true
- optional: true
- /@esbuild/linux-riscv64@0.18.20:
+ '@esbuild/linux-riscv64@0.18.20':
resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==}
engines: {node: '>=12'}
cpu: [riscv64]
os: [linux]
- requiresBuild: true
- dev: true
- optional: true
- /@esbuild/linux-s390x@0.18.20:
+ '@esbuild/linux-s390x@0.18.20':
resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==}
engines: {node: '>=12'}
cpu: [s390x]
os: [linux]
- requiresBuild: true
- dev: true
- optional: true
- /@esbuild/linux-x64@0.18.20:
+ '@esbuild/linux-x64@0.18.20':
resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==}
engines: {node: '>=12'}
cpu: [x64]
os: [linux]
- requiresBuild: true
- dev: true
- optional: true
- /@esbuild/netbsd-x64@0.18.20:
+ '@esbuild/netbsd-x64@0.18.20':
resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==}
engines: {node: '>=12'}
cpu: [x64]
os: [netbsd]
- requiresBuild: true
- dev: true
- optional: true
- /@esbuild/openbsd-x64@0.18.20:
+ '@esbuild/openbsd-x64@0.18.20':
resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==}
engines: {node: '>=12'}
cpu: [x64]
os: [openbsd]
- requiresBuild: true
- dev: true
- optional: true
- /@esbuild/sunos-x64@0.18.20:
+ '@esbuild/sunos-x64@0.18.20':
resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [sunos]
- requiresBuild: true
- dev: true
- optional: true
- /@esbuild/win32-arm64@0.18.20:
+ '@esbuild/win32-arm64@0.18.20':
resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==}
engines: {node: '>=12'}
cpu: [arm64]
os: [win32]
- requiresBuild: true
- dev: true
- optional: true
- /@esbuild/win32-ia32@0.18.20:
+ '@esbuild/win32-ia32@0.18.20':
resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==}
engines: {node: '>=12'}
cpu: [ia32]
os: [win32]
- requiresBuild: true
- dev: true
- optional: true
- /@esbuild/win32-x64@0.18.20:
+ '@esbuild/win32-x64@0.18.20':
resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [win32]
- requiresBuild: true
- dev: true
- optional: true
- /@jridgewell/gen-mapping@0.3.3:
+ '@isaacs/cliui@8.0.2':
+ resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
+ engines: {node: '>=12'}
+
+ '@jridgewell/gen-mapping@0.3.3':
resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==}
engines: {node: '>=6.0.0'}
- dependencies:
- '@jridgewell/set-array': 1.1.2
- '@jridgewell/sourcemap-codec': 1.4.15
- '@jridgewell/trace-mapping': 0.3.20
- dev: true
- /@jridgewell/resolve-uri@3.1.1:
+ '@jridgewell/resolve-uri@3.1.1':
resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==}
engines: {node: '>=6.0.0'}
- dev: true
- /@jridgewell/set-array@1.1.2:
+ '@jridgewell/set-array@1.1.2':
resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
engines: {node: '>=6.0.0'}
- dev: true
- /@jridgewell/sourcemap-codec@1.4.15:
+ '@jridgewell/sourcemap-codec@1.4.15':
resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
- dev: true
- /@jridgewell/trace-mapping@0.3.20:
+ '@jridgewell/trace-mapping@0.3.20':
resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==}
- dependencies:
- '@jridgewell/resolve-uri': 3.1.1
- '@jridgewell/sourcemap-codec': 1.4.15
- dev: true
- /@kurkle/color@0.3.2:
+ '@kurkle/color@0.3.2':
resolution: {integrity: sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==}
- dev: false
- /@preact/preset-vite@2.8.1(@babel/core@7.23.7)(preact@10.19.3)(vite@4.5.1):
+ '@nodelib/fs.scandir@2.1.5':
+ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.stat@2.0.5':
+ resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.walk@1.2.8':
+ resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
+ engines: {node: '>= 8'}
+
+ '@pkgjs/parseargs@0.11.0':
+ resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
+ engines: {node: '>=14'}
+
+ '@preact/preset-vite@2.8.1':
resolution: {integrity: sha512-a9KV4opdj17X2gOFuGup0aE+sXYABX/tJi/QDptOrleX4FlnoZgDWvz45tHOdVfrZX+3uvVsIYPHxRsTerkDNA==}
peerDependencies:
'@babel/core': 7.x
vite: 2.x || 3.x || 4.x || 5.x
- dependencies:
- '@babel/core': 7.23.7
- '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.7)
- '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.23.7)
- '@prefresh/vite': 2.4.5(preact@10.19.3)(vite@4.5.1)
- '@rollup/pluginutils': 4.2.1
- babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.23.7)
- debug: 4.3.4
- kolorist: 1.8.0
- magic-string: 0.30.5
- node-html-parser: 6.1.12
- resolve: 1.22.8
- vite: 4.5.1
- transitivePeerDependencies:
- - preact
- - supports-color
- dev: true
- /@preact/signals-core@1.5.1:
+ '@preact/signals-core@1.5.1':
resolution: {integrity: sha512-dE6f+WCX5ZUDwXzUIWNMhhglmuLpqJhuy3X3xHrhZYI0Hm2LyQwOu0l9mdPiWrVNsE+Q7txOnJPgtIqHCYoBVA==}
- dev: false
- /@preact/signals@1.2.2(preact@10.19.3):
+ '@preact/signals@1.2.2':
resolution: {integrity: sha512-ColCqdo4cRP18bAuIR4Oik5rDpiyFtPIJIygaYPMEAwTnl4buWkBOflGBSzhYyPyJfKpkwlekrvK+1pzQ2ldWw==}
peerDependencies:
preact: 10.x
- dependencies:
- '@preact/signals-core': 1.5.1
- preact: 10.19.3
- dev: false
- /@prefresh/babel-plugin@0.5.1:
+ '@prefresh/babel-plugin@0.5.1':
resolution: {integrity: sha512-uG3jGEAysxWoyG3XkYfjYHgaySFrSsaEb4GagLzYaxlydbuREtaX+FTxuIidp241RaLl85XoHg9Ej6E4+V1pcg==}
- dev: true
- /@prefresh/core@1.5.2(preact@10.19.3):
+ '@prefresh/core@1.5.2':
resolution: {integrity: sha512-A/08vkaM1FogrCII5PZKCrygxSsc11obExBScm3JF1CryK2uDS3ZXeni7FeKCx1nYdUkj4UcJxzPzc1WliMzZA==}
peerDependencies:
preact: ^10.0.0
- dependencies:
- preact: 10.19.3
- dev: true
- /@prefresh/utils@1.2.0:
+ '@prefresh/utils@1.2.0':
resolution: {integrity: sha512-KtC/fZw+oqtwOLUFM9UtiitB0JsVX0zLKNyRTA332sqREqSALIIQQxdUCS1P3xR/jT1e2e8/5rwH6gdcMLEmsQ==}
- dev: true
- /@prefresh/vite@2.4.5(preact@10.19.3)(vite@4.5.1):
+ '@prefresh/vite@2.4.5':
resolution: {integrity: sha512-iForDVJ2M8gQYnm5pHumvTEJjGGc7YNYC0GVKnHFL+GvFfKHfH9Rpq67nUAzNbjuLEpqEOUuQVQajMazWu2ZNQ==}
peerDependencies:
preact: ^10.4.0
vite: '>=2.0.0'
- dependencies:
- '@babel/core': 7.23.7
- '@prefresh/babel-plugin': 0.5.1
- '@prefresh/core': 1.5.2(preact@10.19.3)
- '@prefresh/utils': 1.2.0
- '@rollup/pluginutils': 4.2.1
- preact: 10.19.3
- vite: 4.5.1
- transitivePeerDependencies:
- - supports-color
- dev: true
- /@rollup/pluginutils@4.2.1:
+ '@rollup/pluginutils@4.2.1':
resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==}
engines: {node: '>= 8.0.0'}
- dependencies:
- estree-walker: 2.0.2
- picomatch: 2.3.1
- dev: true
- /@trpc/client@10.45.0(@trpc/server@10.45.0):
+ '@trpc/client@10.45.0':
resolution: {integrity: sha512-m091R1qte9rvkvL8N1e/mzrbb8S4gb+Q4ZNJnEGDgd7kic/6a8DFgSciBTiCoSp0YwOTVhyQzSrrA/sZI6PhBg==}
peerDependencies:
'@trpc/server': 10.45.0
- dependencies:
- '@trpc/server': 10.45.0
- dev: false
- /@trpc/server@10.45.0:
+ '@trpc/server@10.45.0':
resolution: {integrity: sha512-2Fwzv6nqpE0Ie/G7PeS0EVR89zLm+c1Mw7T+RAGtU807j4oaUx0zGkBXTu5u9AI+j+BYNN2GZxJcuDTAecbr1A==}
- dev: false
- /ansi-styles@3.2.1:
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-regex@6.0.1:
+ resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
+ engines: {node: '>=12'}
+
+ ansi-styles@3.2.1:
resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
engines: {node: '>=4'}
- dependencies:
- color-convert: 1.9.3
- dev: true
- /babel-plugin-transform-hook-names@1.0.2(@babel/core@7.23.7):
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ ansi-styles@6.2.1:
+ resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
+ engines: {node: '>=12'}
+
+ any-promise@1.3.0:
+ resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ arg@5.0.2:
+ resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
+
+ autoprefixer@10.4.19:
+ resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==}
+ engines: {node: ^10 || ^12 || >=14}
+ hasBin: true
+ peerDependencies:
+ postcss: ^8.1.0
+
+ babel-plugin-transform-hook-names@1.0.2:
resolution: {integrity: sha512-5gafyjyyBTTdX/tQQ0hRgu4AhNHG/hqWi0ZZmg2xvs2FgRkJXzDNKBZCyoYqgFkovfDrgM8OoKg8karoUvWeCw==}
peerDependencies:
'@babel/core': ^7.12.10
- dependencies:
- '@babel/core': 7.23.7
- dev: true
- /boolbase@1.0.0:
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ boolbase@1.0.0:
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
- dev: true
- /browserslist@4.22.2:
+ brace-expansion@2.0.1:
+ resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browserslist@4.22.2:
resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
- dependencies:
- caniuse-lite: 1.0.30001575
- electron-to-chromium: 1.4.623
- node-releases: 2.0.14
- update-browserslist-db: 1.0.13(browserslist@4.22.2)
- dev: true
- /caniuse-lite@1.0.30001575:
+ browserslist@4.23.1:
+ resolution: {integrity: sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+
+ camelcase-css@2.0.1:
+ resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
+ engines: {node: '>= 6'}
+
+ caniuse-lite@1.0.30001575:
resolution: {integrity: sha512-VE+TSRJsWdtwTheYnrQikhGWlvJp+4lunXBadY66YIc+itIHm7y9d0NSA150Eh6mNY6d1S/B+fitPr9OzHJc6Q==}
- dev: true
- /chalk@2.4.2:
+ caniuse-lite@1.0.30001629:
+ resolution: {integrity: sha512-c3dl911slnQhmxUIT4HhYzT7wnBK/XYpGnYLOj4nJBaRiw52Ibe7YxlDaAeRECvA786zCuExhxIUJ2K7nHMrBw==}
+
+ chalk@2.4.2:
resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
engines: {node: '>=4'}
- dependencies:
- ansi-styles: 3.2.1
- escape-string-regexp: 1.0.5
- supports-color: 5.5.0
- dev: true
- /chart.js@4.4.1:
+ chart.js@4.4.1:
resolution: {integrity: sha512-C74QN1bxwV1v2PEujhmKjOZ7iUM4w6BWs23Md/6aOZZSlwMzeCIDGuZay++rBgChYru7/+QFeoQW0fQoP534Dg==}
engines: {pnpm: '>=7'}
- dependencies:
- '@kurkle/color': 0.3.2
- dev: false
- /color-convert@1.9.3:
+ chokidar@3.6.0:
+ resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
+ engines: {node: '>= 8.10.0'}
+
+ color-convert@1.9.3:
resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
- dependencies:
- color-name: 1.1.3
- dev: true
- /color-name@1.1.3:
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.3:
resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
- dev: true
- /convert-source-map@2.0.0:
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@4.1.1:
+ resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
+ engines: {node: '>= 6'}
+
+ convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
- dev: true
- /css-select@5.1.0:
+ cross-spawn@7.0.3:
+ resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
+ engines: {node: '>= 8'}
+
+ css-select@5.1.0:
resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==}
- dependencies:
- boolbase: 1.0.0
- css-what: 6.1.0
- domhandler: 5.0.3
- domutils: 3.1.0
- nth-check: 2.1.1
- dev: true
- /css-what@6.1.0:
+ css-what@6.1.0:
resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==}
engines: {node: '>= 6'}
- dev: true
- /debug@4.3.4:
+ cssesc@3.0.0:
+ resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ debug@4.3.4:
resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
engines: {node: '>=6.0'}
peerDependencies:
@@ -696,229 +526,327 @@ packages:
peerDependenciesMeta:
supports-color:
optional: true
- dependencies:
- ms: 2.1.2
- dev: true
- /dom-serializer@2.0.0:
+ didyoumean@1.2.2:
+ resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
+
+ dlv@1.1.3:
+ resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
+
+ dom-serializer@2.0.0:
resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
- dependencies:
- domelementtype: 2.3.0
- domhandler: 5.0.3
- entities: 4.5.0
- dev: true
- /domelementtype@2.3.0:
+ domelementtype@2.3.0:
resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
- dev: true
- /domhandler@5.0.3:
+ domhandler@5.0.3:
resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
engines: {node: '>= 4'}
- dependencies:
- domelementtype: 2.3.0
- dev: true
- /domutils@3.1.0:
+ domutils@3.1.0:
resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==}
- dependencies:
- dom-serializer: 2.0.0
- domelementtype: 2.3.0
- domhandler: 5.0.3
- dev: true
- /dotenv@16.4.1:
+ dotenv@16.4.1:
resolution: {integrity: sha512-CjA3y+Dr3FyFDOAMnxZEGtnW9KBR2M0JvvUtXNW+dYJL5ROWxP9DUHCwgFqpMk0OXCc0ljhaNTr2w/kutYIcHQ==}
engines: {node: '>=12'}
- dev: false
- /electron-to-chromium@1.4.623:
+ eastasianwidth@0.2.0:
+ resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+
+ electron-to-chromium@1.4.623:
resolution: {integrity: sha512-lKoz10iCYlP1WtRYdh5MvocQPWVRoI7ysp6qf18bmeBgR8abE6+I2CsfyNKztRDZvhdWc+krKT6wS7Neg8sw3A==}
- dev: true
- /entities@4.5.0:
+ electron-to-chromium@1.4.796:
+ resolution: {integrity: sha512-NglN/xprcM+SHD2XCli4oC6bWe6kHoytcyLKCWXmRL854F0qhPhaYgUswUsglnPxYaNQIg2uMY4BvaomIf3kLA==}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ emoji-regex@9.2.2:
+ resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+
+ entities@4.5.0:
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
engines: {node: '>=0.12'}
- dev: true
- /esbuild@0.18.20:
+ esbuild@0.18.20:
resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==}
engines: {node: '>=12'}
hasBin: true
- requiresBuild: true
- optionalDependencies:
- '@esbuild/android-arm': 0.18.20
- '@esbuild/android-arm64': 0.18.20
- '@esbuild/android-x64': 0.18.20
- '@esbuild/darwin-arm64': 0.18.20
- '@esbuild/darwin-x64': 0.18.20
- '@esbuild/freebsd-arm64': 0.18.20
- '@esbuild/freebsd-x64': 0.18.20
- '@esbuild/linux-arm': 0.18.20
- '@esbuild/linux-arm64': 0.18.20
- '@esbuild/linux-ia32': 0.18.20
- '@esbuild/linux-loong64': 0.18.20
- '@esbuild/linux-mips64el': 0.18.20
- '@esbuild/linux-ppc64': 0.18.20
- '@esbuild/linux-riscv64': 0.18.20
- '@esbuild/linux-s390x': 0.18.20
- '@esbuild/linux-x64': 0.18.20
- '@esbuild/netbsd-x64': 0.18.20
- '@esbuild/openbsd-x64': 0.18.20
- '@esbuild/sunos-x64': 0.18.20
- '@esbuild/win32-arm64': 0.18.20
- '@esbuild/win32-ia32': 0.18.20
- '@esbuild/win32-x64': 0.18.20
- dev: true
- /escalade@3.1.1:
+ escalade@3.1.1:
resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
engines: {node: '>=6'}
- dev: true
- /escape-string-regexp@1.0.5:
+ escalade@3.1.2:
+ resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@1.0.5:
resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
engines: {node: '>=0.8.0'}
- dev: true
- /estree-walker@2.0.2:
+ estree-walker@2.0.2:
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
- dev: true
- /fsevents@2.3.3:
+ fast-glob@3.3.2:
+ resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
+ engines: {node: '>=8.6.0'}
+
+ fastq@1.17.1:
+ resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ foreground-child@3.1.1:
+ resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==}
+ engines: {node: '>=14'}
+
+ fraction.js@4.3.7:
+ resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
+
+ fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
- requiresBuild: true
- dev: true
- optional: true
- /function-bind@1.1.2:
+ function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
- dev: true
- /gensync@1.0.0-beta.2:
+ gensync@1.0.0-beta.2:
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
engines: {node: '>=6.9.0'}
- dev: true
- /globals@11.12.0:
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob-parent@6.0.2:
+ resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
+ engines: {node: '>=10.13.0'}
+
+ glob@10.4.1:
+ resolution: {integrity: sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==}
+ engines: {node: '>=16 || 14 >=14.18'}
+ hasBin: true
+
+ globals@11.12.0:
resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
engines: {node: '>=4'}
- dev: true
- /has-flag@3.0.0:
+ has-flag@3.0.0:
resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
engines: {node: '>=4'}
- dev: true
- /hasown@2.0.0:
+ hasown@2.0.0:
resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==}
engines: {node: '>= 0.4'}
- dependencies:
- function-bind: 1.1.2
- dev: true
- /he@1.2.0:
+ he@1.2.0:
resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
hasBin: true
- dev: true
- /is-core-module@2.13.1:
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-core-module@2.13.1:
resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==}
- dependencies:
- hasown: 2.0.0
- dev: true
- /js-tokens@4.0.0:
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ jackspeak@3.4.0:
+ resolution: {integrity: sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==}
+ engines: {node: '>=14'}
+
+ jiti@1.21.3:
+ resolution: {integrity: sha512-uy2bNX5zQ+tESe+TiC7ilGRz8AtRGmnJH55NC5S0nSUjvvvM2hJHmefHErugGXN4pNv4Qx7vLsnNw9qJ9mtIsw==}
+ hasBin: true
+
+ js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
- /jsesc@2.5.2:
+ jsesc@2.5.2:
resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
engines: {node: '>=4'}
hasBin: true
- dev: true
- /json5@2.2.3:
+ json5@2.2.3:
resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
engines: {node: '>=6'}
hasBin: true
- dev: true
- /kolorist@1.8.0:
+ kolorist@1.8.0:
resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
- dev: true
- /loose-envify@1.4.0:
+ lilconfig@2.1.0:
+ resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
+ engines: {node: '>=10'}
+
+ lilconfig@3.1.1:
+ resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==}
+ engines: {node: '>=14'}
+
+ lines-and-columns@1.2.4:
+ resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
+
+ loose-envify@1.4.0:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin: true
- dependencies:
- js-tokens: 4.0.0
- dev: false
- /lru-cache@5.1.1:
+ lru-cache@10.2.2:
+ resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==}
+ engines: {node: 14 || >=16.14}
+
+ lru-cache@5.1.1:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
- dependencies:
- yallist: 3.1.1
- dev: true
- /magic-string@0.30.5:
+ magic-string@0.30.5:
resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==}
engines: {node: '>=12'}
- dependencies:
- '@jridgewell/sourcemap-codec': 1.4.15
- dev: true
- /ms@2.1.2:
+ merge2@1.4.1:
+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+ engines: {node: '>= 8'}
+
+ micromatch@4.0.7:
+ resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==}
+ engines: {node: '>=8.6'}
+
+ minimatch@9.0.4:
+ resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ minipass@7.1.2:
+ resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ ms@2.1.2:
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
- dev: true
- /nanoid@3.3.7:
+ mz@2.7.0:
+ resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
+
+ nanoid@3.3.7:
resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
- dev: true
- /node-html-parser@6.1.12:
+ node-html-parser@6.1.12:
resolution: {integrity: sha512-/bT/Ncmv+fbMGX96XG9g05vFt43m/+SYKIs9oAemQVYyVcZmDAI2Xq/SbNcpOA35eF0Zk2av3Ksf+Xk8Vt8abA==}
- dependencies:
- css-select: 5.1.0
- he: 1.2.0
- dev: true
- /node-releases@2.0.14:
+ node-releases@2.0.14:
resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==}
- dev: true
- /nth-check@2.1.1:
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ normalize-range@0.1.2:
+ resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
+ engines: {node: '>=0.10.0'}
+
+ nth-check@2.1.1:
resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
- dependencies:
- boolbase: 1.0.0
- dev: true
- /path-parse@1.0.7:
+ object-assign@4.1.1:
+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
+ engines: {node: '>=0.10.0'}
+
+ object-hash@3.0.0:
+ resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
+ engines: {node: '>= 6'}
+
+ path-key@3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
+
+ path-parse@1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
- dev: true
- /picocolors@1.0.0:
+ path-scurry@1.11.1:
+ resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
+ engines: {node: '>=16 || 14 >=14.18'}
+
+ picocolors@1.0.0:
resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
- dev: true
- /picomatch@2.3.1:
+ picocolors@1.0.1:
+ resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==}
+
+ picomatch@2.3.1:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'}
- dev: true
- /postcss@8.4.33:
- resolution: {integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==}
+ pify@2.3.0:
+ resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
+ engines: {node: '>=0.10.0'}
+
+ pirates@4.0.6:
+ resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
+ engines: {node: '>= 6'}
+
+ postcss-import@15.1.0:
+ resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ postcss: ^8.0.0
+
+ postcss-js@4.0.1:
+ resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==}
+ engines: {node: ^12 || ^14 || >= 16}
+ peerDependencies:
+ postcss: ^8.4.21
+
+ postcss-load-config@4.0.2:
+ resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==}
+ engines: {node: '>= 14'}
+ peerDependencies:
+ postcss: '>=8.0.9'
+ ts-node: '>=9.0.0'
+ peerDependenciesMeta:
+ postcss:
+ optional: true
+ ts-node:
+ optional: true
+
+ postcss-nested@6.0.1:
+ resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==}
+ engines: {node: '>=12.0'}
+ peerDependencies:
+ postcss: ^8.2.14
+
+ postcss-selector-parser@6.1.0:
+ resolution: {integrity: sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==}
+ engines: {node: '>=4'}
+
+ postcss-value-parser@4.2.0:
+ resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
+
+ postcss@8.4.38:
+ resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==}
engines: {node: ^10 || ^12 || >=14}
- dependencies:
- nanoid: 3.3.7
- picocolors: 1.0.0
- source-map-js: 1.0.2
- dev: true
- /preact-iso@2.3.2(preact-render-to-string@6.3.1)(preact@10.19.3):
+ preact-iso@2.3.2:
resolution: {integrity: sha512-OU+6dzX1/qAyWfH4zKVqp/apNLfAr8yx4aBUVKyBWoOyPT08bNJk4o08KWIwyQyEkpayW5q+5+GAkYBSky8ndw==}
peerDependencies:
preact: '>=10'
@@ -926,106 +854,147 @@ packages:
peerDependenciesMeta:
preact-render-to-string:
optional: true
- dependencies:
- preact: 10.19.3
- preact-render-to-string: 6.3.1(preact@10.19.3)
- dev: false
- /preact-render-to-string@6.3.1(preact@10.19.3):
+ preact-render-to-string@6.3.1:
resolution: {integrity: sha512-NQ28WrjLtWY6lKDlTxnFpKHZdpjfF+oE6V4tZ0rTrunHrtZp6Dm0oFrcJalt/5PNeqJz4j1DuZDS0Y6rCBoqDA==}
peerDependencies:
preact: '>=10'
- dependencies:
- preact: 10.19.3
- pretty-format: 3.8.0
- dev: false
- /preact@10.19.3:
+ preact@10.19.3:
resolution: {integrity: sha512-nHHTeFVBTHRGxJXKkKu5hT8C/YWBkPso4/Gad6xuj5dbptt9iF9NZr9pHbPhBrnT2klheu7mHTxTZ/LjwJiEiQ==}
- /pretty-format@3.8.0:
+ pretty-format@3.8.0:
resolution: {integrity: sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==}
- dev: false
- /react-chartjs-2@5.2.0(chart.js@4.4.1)(react@18.2.0):
+ queue-microtask@1.2.3:
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+
+ react-chartjs-2@5.2.0:
resolution: {integrity: sha512-98iN5aguJyVSxp5U3CblRLH67J8gkfyGNbiK3c+l1QI/G4irHMPQw44aEPmjVag+YKTyQ260NcF82GTQ3bdscA==}
peerDependencies:
chart.js: ^4.1.1
react: ^16.8.0 || ^17.0.0 || ^18.0.0
- dependencies:
- chart.js: 4.4.1
- react: 18.2.0
- dev: false
- /react@18.2.0:
+ react@18.2.0:
resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
engines: {node: '>=0.10.0'}
- dependencies:
- loose-envify: 1.4.0
- dev: false
- /resolve@1.22.8:
+ read-cache@1.0.0:
+ resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ resolve@1.22.8:
resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
hasBin: true
- dependencies:
- is-core-module: 2.13.1
- path-parse: 1.0.7
- supports-preserve-symlinks-flag: 1.0.0
- dev: true
- /rollup@3.29.4:
+ reusify@1.0.4:
+ resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+
+ rollup@3.29.4:
resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==}
engines: {node: '>=14.18.0', npm: '>=8.0.0'}
hasBin: true
- optionalDependencies:
- fsevents: 2.3.3
- dev: true
- /semver@6.3.1:
+ run-parallel@1.2.0:
+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+
+ semver@6.3.1:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true
- dev: true
- /source-map-js@1.0.2:
- resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
+ shebang-command@2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
+
+ shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
+
+ signal-exit@4.1.0:
+ resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
+ engines: {node: '>=14'}
+
+ source-map-js@1.2.0:
+ resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==}
engines: {node: '>=0.10.0'}
- dev: true
- /supports-color@5.5.0:
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ string-width@5.1.2:
+ resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
+ engines: {node: '>=12'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-ansi@7.1.0:
+ resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
+ engines: {node: '>=12'}
+
+ sucrase@3.35.0:
+ resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
+ engines: {node: '>=16 || 14 >=14.17'}
+ hasBin: true
+
+ supports-color@5.5.0:
resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
engines: {node: '>=4'}
- dependencies:
- has-flag: 3.0.0
- dev: true
- /supports-preserve-symlinks-flag@1.0.0:
+ supports-preserve-symlinks-flag@1.0.0:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
- dev: true
- /to-fast-properties@2.0.0:
+ tailwindcss@3.4.4:
+ resolution: {integrity: sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==}
+ engines: {node: '>=14.0.0'}
+ hasBin: true
+
+ thenify-all@1.6.0:
+ resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
+ engines: {node: '>=0.8'}
+
+ thenify@3.3.1:
+ resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
+
+ to-fast-properties@2.0.0:
resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
engines: {node: '>=4'}
- dev: true
- /typescript@5.3.3:
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ ts-interface-checker@0.1.13:
+ resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
+
+ typescript@5.3.3:
resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==}
engines: {node: '>=14.17'}
hasBin: true
- dev: true
- /update-browserslist-db@1.0.13(browserslist@4.22.2):
+ update-browserslist-db@1.0.13:
resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==}
hasBin: true
peerDependencies:
browserslist: '>= 4.21.0'
- dependencies:
- browserslist: 4.22.2
- escalade: 3.1.1
- picocolors: 1.0.0
- dev: true
- /vite@4.5.1:
+ update-browserslist-db@1.0.16:
+ resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+
+ util-deprecate@1.0.2:
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+
+ vite@4.5.1:
resolution: {integrity: sha512-AXXFaAJ8yebyqzoNB9fu2pHoo/nWX+xZlaRwoeYUxEqBO+Zj4msE5G+BhGBll9lYEKv9Hfks52PAF2X7qDYXQA==}
engines: {node: ^14.18.0 || >=16.0.0}
hasBin: true
@@ -1052,14 +1021,943 @@ packages:
optional: true
terser:
optional: true
- dependencies:
- esbuild: 0.18.20
- postcss: 8.4.33
- rollup: 3.29.4
- optionalDependencies:
- fsevents: 2.3.3
- dev: true
- /yallist@3.1.1:
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrap-ansi@8.1.0:
+ resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
+ engines: {node: '>=12'}
+
+ yallist@3.1.1:
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
- dev: true
+
+ yaml@2.4.5:
+ resolution: {integrity: sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==}
+ engines: {node: '>= 14'}
+ hasBin: true
+
+snapshots:
+
+ '@alloc/quick-lru@5.2.0': {}
+
+ '@ampproject/remapping@2.2.1':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.3
+ '@jridgewell/trace-mapping': 0.3.20
+
+ '@babel/code-frame@7.23.5':
+ dependencies:
+ '@babel/highlight': 7.23.4
+ chalk: 2.4.2
+
+ '@babel/compat-data@7.23.5': {}
+
+ '@babel/core@7.23.7':
+ dependencies:
+ '@ampproject/remapping': 2.2.1
+ '@babel/code-frame': 7.23.5
+ '@babel/generator': 7.23.6
+ '@babel/helper-compilation-targets': 7.23.6
+ '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7)
+ '@babel/helpers': 7.23.7
+ '@babel/parser': 7.23.6
+ '@babel/template': 7.22.15
+ '@babel/traverse': 7.23.7
+ '@babel/types': 7.23.6
+ convert-source-map: 2.0.0
+ debug: 4.3.4
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/generator@7.23.6':
+ dependencies:
+ '@babel/types': 7.23.6
+ '@jridgewell/gen-mapping': 0.3.3
+ '@jridgewell/trace-mapping': 0.3.20
+ jsesc: 2.5.2
+
+ '@babel/helper-annotate-as-pure@7.22.5':
+ dependencies:
+ '@babel/types': 7.23.6
+
+ '@babel/helper-compilation-targets@7.23.6':
+ dependencies:
+ '@babel/compat-data': 7.23.5
+ '@babel/helper-validator-option': 7.23.5
+ browserslist: 4.22.2
+ lru-cache: 5.1.1
+ semver: 6.3.1
+
+ '@babel/helper-environment-visitor@7.22.20': {}
+
+ '@babel/helper-function-name@7.23.0':
+ dependencies:
+ '@babel/template': 7.22.15
+ '@babel/types': 7.23.6
+
+ '@babel/helper-hoist-variables@7.22.5':
+ dependencies:
+ '@babel/types': 7.23.6
+
+ '@babel/helper-module-imports@7.22.15':
+ dependencies:
+ '@babel/types': 7.23.6
+
+ '@babel/helper-module-transforms@7.23.3(@babel/core@7.23.7)':
+ dependencies:
+ '@babel/core': 7.23.7
+ '@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
+
+ '@babel/helper-plugin-utils@7.22.5': {}
+
+ '@babel/helper-simple-access@7.22.5':
+ dependencies:
+ '@babel/types': 7.23.6
+
+ '@babel/helper-split-export-declaration@7.22.6':
+ dependencies:
+ '@babel/types': 7.23.6
+
+ '@babel/helper-string-parser@7.23.4': {}
+
+ '@babel/helper-validator-identifier@7.22.20': {}
+
+ '@babel/helper-validator-option@7.23.5': {}
+
+ '@babel/helpers@7.23.7':
+ dependencies:
+ '@babel/template': 7.22.15
+ '@babel/traverse': 7.23.7
+ '@babel/types': 7.23.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/highlight@7.23.4':
+ dependencies:
+ '@babel/helper-validator-identifier': 7.22.20
+ chalk: 2.4.2
+ js-tokens: 4.0.0
+
+ '@babel/parser@7.23.6':
+ dependencies:
+ '@babel/types': 7.23.6
+
+ '@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.7)':
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+
+ '@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.23.7)':
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.7)
+
+ '@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.23.7)':
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-annotate-as-pure': 7.22.5
+ '@babel/helper-module-imports': 7.22.15
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.7)
+ '@babel/types': 7.23.6
+
+ '@babel/template@7.22.15':
+ dependencies:
+ '@babel/code-frame': 7.23.5
+ '@babel/parser': 7.23.6
+ '@babel/types': 7.23.6
+
+ '@babel/traverse@7.23.7':
+ dependencies:
+ '@babel/code-frame': 7.23.5
+ '@babel/generator': 7.23.6
+ '@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.6
+ '@babel/types': 7.23.6
+ debug: 4.3.4
+ globals: 11.12.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/types@7.23.6':
+ dependencies:
+ '@babel/helper-string-parser': 7.23.4
+ '@babel/helper-validator-identifier': 7.22.20
+ to-fast-properties: 2.0.0
+
+ '@esbuild/android-arm64@0.18.20':
+ optional: true
+
+ '@esbuild/android-arm@0.18.20':
+ optional: true
+
+ '@esbuild/android-x64@0.18.20':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.18.20':
+ optional: true
+
+ '@esbuild/darwin-x64@0.18.20':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.18.20':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.18.20':
+ optional: true
+
+ '@esbuild/linux-arm64@0.18.20':
+ optional: true
+
+ '@esbuild/linux-arm@0.18.20':
+ optional: true
+
+ '@esbuild/linux-ia32@0.18.20':
+ optional: true
+
+ '@esbuild/linux-loong64@0.18.20':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.18.20':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.18.20':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.18.20':
+ optional: true
+
+ '@esbuild/linux-s390x@0.18.20':
+ optional: true
+
+ '@esbuild/linux-x64@0.18.20':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.18.20':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.18.20':
+ optional: true
+
+ '@esbuild/sunos-x64@0.18.20':
+ optional: true
+
+ '@esbuild/win32-arm64@0.18.20':
+ optional: true
+
+ '@esbuild/win32-ia32@0.18.20':
+ optional: true
+
+ '@esbuild/win32-x64@0.18.20':
+ optional: true
+
+ '@isaacs/cliui@8.0.2':
+ dependencies:
+ string-width: 5.1.2
+ string-width-cjs: string-width@4.2.3
+ strip-ansi: 7.1.0
+ strip-ansi-cjs: strip-ansi@6.0.1
+ wrap-ansi: 8.1.0
+ wrap-ansi-cjs: wrap-ansi@7.0.0
+
+ '@jridgewell/gen-mapping@0.3.3':
+ dependencies:
+ '@jridgewell/set-array': 1.1.2
+ '@jridgewell/sourcemap-codec': 1.4.15
+ '@jridgewell/trace-mapping': 0.3.20
+
+ '@jridgewell/resolve-uri@3.1.1': {}
+
+ '@jridgewell/set-array@1.1.2': {}
+
+ '@jridgewell/sourcemap-codec@1.4.15': {}
+
+ '@jridgewell/trace-mapping@0.3.20':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.1
+ '@jridgewell/sourcemap-codec': 1.4.15
+
+ '@kurkle/color@0.3.2': {}
+
+ '@nodelib/fs.scandir@2.1.5':
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ run-parallel: 1.2.0
+
+ '@nodelib/fs.stat@2.0.5': {}
+
+ '@nodelib/fs.walk@1.2.8':
+ dependencies:
+ '@nodelib/fs.scandir': 2.1.5
+ fastq: 1.17.1
+
+ '@pkgjs/parseargs@0.11.0':
+ optional: true
+
+ '@preact/preset-vite@2.8.1(@babel/core@7.23.7)(preact@10.19.3)(vite@4.5.1)':
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.7)
+ '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.23.7)
+ '@prefresh/vite': 2.4.5(preact@10.19.3)(vite@4.5.1)
+ '@rollup/pluginutils': 4.2.1
+ babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.23.7)
+ debug: 4.3.4
+ kolorist: 1.8.0
+ magic-string: 0.30.5
+ node-html-parser: 6.1.12
+ resolve: 1.22.8
+ vite: 4.5.1
+ transitivePeerDependencies:
+ - preact
+ - supports-color
+
+ '@preact/signals-core@1.5.1': {}
+
+ '@preact/signals@1.2.2(preact@10.19.3)':
+ dependencies:
+ '@preact/signals-core': 1.5.1
+ preact: 10.19.3
+
+ '@prefresh/babel-plugin@0.5.1': {}
+
+ '@prefresh/core@1.5.2(preact@10.19.3)':
+ dependencies:
+ preact: 10.19.3
+
+ '@prefresh/utils@1.2.0': {}
+
+ '@prefresh/vite@2.4.5(preact@10.19.3)(vite@4.5.1)':
+ dependencies:
+ '@babel/core': 7.23.7
+ '@prefresh/babel-plugin': 0.5.1
+ '@prefresh/core': 1.5.2(preact@10.19.3)
+ '@prefresh/utils': 1.2.0
+ '@rollup/pluginutils': 4.2.1
+ preact: 10.19.3
+ vite: 4.5.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@rollup/pluginutils@4.2.1':
+ dependencies:
+ estree-walker: 2.0.2
+ picomatch: 2.3.1
+
+ '@trpc/client@10.45.0(@trpc/server@10.45.0)':
+ dependencies:
+ '@trpc/server': 10.45.0
+
+ '@trpc/server@10.45.0': {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-regex@6.0.1: {}
+
+ ansi-styles@3.2.1:
+ dependencies:
+ color-convert: 1.9.3
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ ansi-styles@6.2.1: {}
+
+ any-promise@1.3.0: {}
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ arg@5.0.2: {}
+
+ autoprefixer@10.4.19(postcss@8.4.38):
+ dependencies:
+ browserslist: 4.23.1
+ caniuse-lite: 1.0.30001629
+ fraction.js: 4.3.7
+ normalize-range: 0.1.2
+ picocolors: 1.0.0
+ postcss: 8.4.38
+ postcss-value-parser: 4.2.0
+
+ babel-plugin-transform-hook-names@1.0.2(@babel/core@7.23.7):
+ dependencies:
+ '@babel/core': 7.23.7
+
+ balanced-match@1.0.2: {}
+
+ binary-extensions@2.3.0: {}
+
+ boolbase@1.0.0: {}
+
+ brace-expansion@2.0.1:
+ dependencies:
+ balanced-match: 1.0.2
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browserslist@4.22.2:
+ dependencies:
+ caniuse-lite: 1.0.30001575
+ electron-to-chromium: 1.4.623
+ node-releases: 2.0.14
+ update-browserslist-db: 1.0.13(browserslist@4.22.2)
+
+ browserslist@4.23.1:
+ dependencies:
+ caniuse-lite: 1.0.30001629
+ electron-to-chromium: 1.4.796
+ node-releases: 2.0.14
+ update-browserslist-db: 1.0.16(browserslist@4.23.1)
+
+ camelcase-css@2.0.1: {}
+
+ caniuse-lite@1.0.30001575: {}
+
+ caniuse-lite@1.0.30001629: {}
+
+ chalk@2.4.2:
+ dependencies:
+ ansi-styles: 3.2.1
+ escape-string-regexp: 1.0.5
+ supports-color: 5.5.0
+
+ chart.js@4.4.1:
+ dependencies:
+ '@kurkle/color': 0.3.2
+
+ chokidar@3.6.0:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ color-convert@1.9.3:
+ dependencies:
+ color-name: 1.1.3
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.3: {}
+
+ color-name@1.1.4: {}
+
+ commander@4.1.1: {}
+
+ convert-source-map@2.0.0: {}
+
+ cross-spawn@7.0.3:
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+
+ css-select@5.1.0:
+ dependencies:
+ boolbase: 1.0.0
+ css-what: 6.1.0
+ domhandler: 5.0.3
+ domutils: 3.1.0
+ nth-check: 2.1.1
+
+ css-what@6.1.0: {}
+
+ cssesc@3.0.0: {}
+
+ debug@4.3.4:
+ dependencies:
+ ms: 2.1.2
+
+ didyoumean@1.2.2: {}
+
+ dlv@1.1.3: {}
+
+ dom-serializer@2.0.0:
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ entities: 4.5.0
+
+ domelementtype@2.3.0: {}
+
+ domhandler@5.0.3:
+ dependencies:
+ domelementtype: 2.3.0
+
+ domutils@3.1.0:
+ dependencies:
+ dom-serializer: 2.0.0
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+
+ dotenv@16.4.1: {}
+
+ eastasianwidth@0.2.0: {}
+
+ electron-to-chromium@1.4.623: {}
+
+ electron-to-chromium@1.4.796: {}
+
+ emoji-regex@8.0.0: {}
+
+ emoji-regex@9.2.2: {}
+
+ entities@4.5.0: {}
+
+ esbuild@0.18.20:
+ optionalDependencies:
+ '@esbuild/android-arm': 0.18.20
+ '@esbuild/android-arm64': 0.18.20
+ '@esbuild/android-x64': 0.18.20
+ '@esbuild/darwin-arm64': 0.18.20
+ '@esbuild/darwin-x64': 0.18.20
+ '@esbuild/freebsd-arm64': 0.18.20
+ '@esbuild/freebsd-x64': 0.18.20
+ '@esbuild/linux-arm': 0.18.20
+ '@esbuild/linux-arm64': 0.18.20
+ '@esbuild/linux-ia32': 0.18.20
+ '@esbuild/linux-loong64': 0.18.20
+ '@esbuild/linux-mips64el': 0.18.20
+ '@esbuild/linux-ppc64': 0.18.20
+ '@esbuild/linux-riscv64': 0.18.20
+ '@esbuild/linux-s390x': 0.18.20
+ '@esbuild/linux-x64': 0.18.20
+ '@esbuild/netbsd-x64': 0.18.20
+ '@esbuild/openbsd-x64': 0.18.20
+ '@esbuild/sunos-x64': 0.18.20
+ '@esbuild/win32-arm64': 0.18.20
+ '@esbuild/win32-ia32': 0.18.20
+ '@esbuild/win32-x64': 0.18.20
+
+ escalade@3.1.1: {}
+
+ escalade@3.1.2: {}
+
+ escape-string-regexp@1.0.5: {}
+
+ estree-walker@2.0.2: {}
+
+ fast-glob@3.3.2:
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ '@nodelib/fs.walk': 1.2.8
+ glob-parent: 5.1.2
+ merge2: 1.4.1
+ micromatch: 4.0.7
+
+ fastq@1.17.1:
+ dependencies:
+ reusify: 1.0.4
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ foreground-child@3.1.1:
+ dependencies:
+ cross-spawn: 7.0.3
+ signal-exit: 4.1.0
+
+ fraction.js@4.3.7: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ function-bind@1.1.2: {}
+
+ gensync@1.0.0-beta.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob-parent@6.0.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@10.4.1:
+ dependencies:
+ foreground-child: 3.1.1
+ jackspeak: 3.4.0
+ minimatch: 9.0.4
+ minipass: 7.1.2
+ path-scurry: 1.11.1
+
+ globals@11.12.0: {}
+
+ has-flag@3.0.0: {}
+
+ hasown@2.0.0:
+ dependencies:
+ function-bind: 1.1.2
+
+ he@1.2.0: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-core-module@2.13.1:
+ dependencies:
+ hasown: 2.0.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ isexe@2.0.0: {}
+
+ jackspeak@3.4.0:
+ dependencies:
+ '@isaacs/cliui': 8.0.2
+ optionalDependencies:
+ '@pkgjs/parseargs': 0.11.0
+
+ jiti@1.21.3: {}
+
+ js-tokens@4.0.0: {}
+
+ jsesc@2.5.2: {}
+
+ json5@2.2.3: {}
+
+ kolorist@1.8.0: {}
+
+ lilconfig@2.1.0: {}
+
+ lilconfig@3.1.1: {}
+
+ lines-and-columns@1.2.4: {}
+
+ loose-envify@1.4.0:
+ dependencies:
+ js-tokens: 4.0.0
+
+ lru-cache@10.2.2: {}
+
+ lru-cache@5.1.1:
+ dependencies:
+ yallist: 3.1.1
+
+ magic-string@0.30.5:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.4.15
+
+ merge2@1.4.1: {}
+
+ micromatch@4.0.7:
+ dependencies:
+ braces: 3.0.3
+ picomatch: 2.3.1
+
+ minimatch@9.0.4:
+ dependencies:
+ brace-expansion: 2.0.1
+
+ minipass@7.1.2: {}
+
+ ms@2.1.2: {}
+
+ mz@2.7.0:
+ dependencies:
+ any-promise: 1.3.0
+ object-assign: 4.1.1
+ thenify-all: 1.6.0
+
+ nanoid@3.3.7: {}
+
+ node-html-parser@6.1.12:
+ dependencies:
+ css-select: 5.1.0
+ he: 1.2.0
+
+ node-releases@2.0.14: {}
+
+ normalize-path@3.0.0: {}
+
+ normalize-range@0.1.2: {}
+
+ nth-check@2.1.1:
+ dependencies:
+ boolbase: 1.0.0
+
+ object-assign@4.1.1: {}
+
+ object-hash@3.0.0: {}
+
+ path-key@3.1.1: {}
+
+ path-parse@1.0.7: {}
+
+ path-scurry@1.11.1:
+ dependencies:
+ lru-cache: 10.2.2
+ minipass: 7.1.2
+
+ picocolors@1.0.0: {}
+
+ picocolors@1.0.1: {}
+
+ picomatch@2.3.1: {}
+
+ pify@2.3.0: {}
+
+ pirates@4.0.6: {}
+
+ postcss-import@15.1.0(postcss@8.4.38):
+ dependencies:
+ postcss: 8.4.38
+ postcss-value-parser: 4.2.0
+ read-cache: 1.0.0
+ resolve: 1.22.8
+
+ postcss-js@4.0.1(postcss@8.4.38):
+ dependencies:
+ camelcase-css: 2.0.1
+ postcss: 8.4.38
+
+ postcss-load-config@4.0.2(postcss@8.4.38):
+ dependencies:
+ lilconfig: 3.1.1
+ yaml: 2.4.5
+ optionalDependencies:
+ postcss: 8.4.38
+
+ postcss-nested@6.0.1(postcss@8.4.38):
+ dependencies:
+ postcss: 8.4.38
+ postcss-selector-parser: 6.1.0
+
+ postcss-selector-parser@6.1.0:
+ dependencies:
+ cssesc: 3.0.0
+ util-deprecate: 1.0.2
+
+ postcss-value-parser@4.2.0: {}
+
+ postcss@8.4.38:
+ dependencies:
+ nanoid: 3.3.7
+ picocolors: 1.0.0
+ source-map-js: 1.2.0
+
+ preact-iso@2.3.2(preact-render-to-string@6.3.1(preact@10.19.3))(preact@10.19.3):
+ dependencies:
+ preact: 10.19.3
+ optionalDependencies:
+ preact-render-to-string: 6.3.1(preact@10.19.3)
+
+ preact-render-to-string@6.3.1(preact@10.19.3):
+ dependencies:
+ preact: 10.19.3
+ pretty-format: 3.8.0
+
+ preact@10.19.3: {}
+
+ pretty-format@3.8.0: {}
+
+ queue-microtask@1.2.3: {}
+
+ react-chartjs-2@5.2.0(chart.js@4.4.1)(react@18.2.0):
+ dependencies:
+ chart.js: 4.4.1
+ react: 18.2.0
+
+ react@18.2.0:
+ dependencies:
+ loose-envify: 1.4.0
+
+ read-cache@1.0.0:
+ dependencies:
+ pify: 2.3.0
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ resolve@1.22.8:
+ dependencies:
+ is-core-module: 2.13.1
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+
+ reusify@1.0.4: {}
+
+ rollup@3.29.4:
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ run-parallel@1.2.0:
+ dependencies:
+ queue-microtask: 1.2.3
+
+ semver@6.3.1: {}
+
+ shebang-command@2.0.0:
+ dependencies:
+ shebang-regex: 3.0.0
+
+ shebang-regex@3.0.0: {}
+
+ signal-exit@4.1.0: {}
+
+ source-map-js@1.2.0: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ string-width@5.1.2:
+ dependencies:
+ eastasianwidth: 0.2.0
+ emoji-regex: 9.2.2
+ strip-ansi: 7.1.0
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-ansi@7.1.0:
+ dependencies:
+ ansi-regex: 6.0.1
+
+ sucrase@3.35.0:
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.3
+ commander: 4.1.1
+ glob: 10.4.1
+ lines-and-columns: 1.2.4
+ mz: 2.7.0
+ pirates: 4.0.6
+ ts-interface-checker: 0.1.13
+
+ supports-color@5.5.0:
+ dependencies:
+ has-flag: 3.0.0
+
+ supports-preserve-symlinks-flag@1.0.0: {}
+
+ tailwindcss@3.4.4:
+ dependencies:
+ '@alloc/quick-lru': 5.2.0
+ arg: 5.0.2
+ chokidar: 3.6.0
+ didyoumean: 1.2.2
+ dlv: 1.1.3
+ fast-glob: 3.3.2
+ glob-parent: 6.0.2
+ is-glob: 4.0.3
+ jiti: 1.21.3
+ lilconfig: 2.1.0
+ micromatch: 4.0.7
+ normalize-path: 3.0.0
+ object-hash: 3.0.0
+ picocolors: 1.0.0
+ postcss: 8.4.38
+ postcss-import: 15.1.0(postcss@8.4.38)
+ postcss-js: 4.0.1(postcss@8.4.38)
+ postcss-load-config: 4.0.2(postcss@8.4.38)
+ postcss-nested: 6.0.1(postcss@8.4.38)
+ postcss-selector-parser: 6.1.0
+ resolve: 1.22.8
+ sucrase: 3.35.0
+ transitivePeerDependencies:
+ - ts-node
+
+ thenify-all@1.6.0:
+ dependencies:
+ thenify: 3.3.1
+
+ thenify@3.3.1:
+ dependencies:
+ any-promise: 1.3.0
+
+ to-fast-properties@2.0.0: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ ts-interface-checker@0.1.13: {}
+
+ typescript@5.3.3: {}
+
+ update-browserslist-db@1.0.13(browserslist@4.22.2):
+ dependencies:
+ browserslist: 4.22.2
+ escalade: 3.1.1
+ picocolors: 1.0.0
+
+ update-browserslist-db@1.0.16(browserslist@4.23.1):
+ dependencies:
+ browserslist: 4.23.1
+ escalade: 3.1.2
+ picocolors: 1.0.1
+
+ util-deprecate@1.0.2: {}
+
+ vite@4.5.1:
+ dependencies:
+ esbuild: 0.18.20
+ postcss: 8.4.38
+ rollup: 3.29.4
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrap-ansi@8.1.0:
+ dependencies:
+ ansi-styles: 6.2.1
+ string-width: 5.1.2
+ strip-ansi: 7.1.0
+
+ yallist@3.1.1: {}
+
+ yaml@2.4.5: {}
diff --git a/frontend/postcss.config.js b/frontend/postcss.config.js
new file mode 100644
index 0000000..2e7af2b
--- /dev/null
+++ b/frontend/postcss.config.js
@@ -0,0 +1,6 @@
+export default {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+}
diff --git a/frontend/src/components/Header.tsx b/frontend/src/components/Header.tsx
index f69e6b7..1da1700 100644
--- a/frontend/src/components/Header.tsx
+++ b/frontend/src/components/Header.tsx
@@ -1,24 +1,27 @@
-import { useLocation } from 'preact-iso';
+import { useLocation } from "preact-iso";
export function Header() {
- const { url } = useLocation();
+ const { url } = useLocation();
- return (
-
- );
+ return (
+
+ );
}
diff --git a/frontend/src/index.tsx b/frontend/src/index.tsx
index 0fa2b63..0bed1a5 100644
--- a/frontend/src/index.tsx
+++ b/frontend/src/index.tsx
@@ -1,28 +1,29 @@
-import _ from './env';
-import { render } from 'preact';
-import { LocationProvider, Router, Route } from 'preact-iso';
+import _ from "./env";
+import { render } from "preact";
+import { LocationProvider, Router, Route } from "preact-iso";
-import { Header } from './components/Header.jsx';
-import { Home } from './pages/Home/index.jsx';
-import { CalendarOptimizer } from './pages/CalendarOptimizer/index.jsx';
-import { NotFound } from './pages/_404.jsx';
-import './style.css';
-import { HistoricalCalendarPrices } from './pages/HistoricalCalendarPrices/HistoricalCalendarPrices.js';
+import { Header } from "./components/Header.jsx";
+import { CalendarOptimizer } from "./pages/CalendarOptimizer.js";
+import { NotFound } from "./pages/_404.jsx";
+// import './style.css';
+import { HistoricalCalendarPrices } from "./pages/HistoricalCalendarPrices.js";
export function App() {
- return (
-
-
-
-
-
-
-
-
-
-
-
- );
+ return (
+
+
+
+
+
+
+
+ {/* */}
+
+
+
+
+
+ );
}
-render(, document.getElementById('app'));
+render(, document.getElementById("app"));
diff --git a/frontend/src/pages/CalendarOptimizer.tsx b/frontend/src/pages/CalendarOptimizer.tsx
new file mode 100644
index 0000000..0394a71
--- /dev/null
+++ b/frontend/src/pages/CalendarOptimizer.tsx
@@ -0,0 +1,345 @@
+import { signal } from "@preact/signals";
+import { useCallback, useEffect } from "preact/hooks";
+import { trpc } from "../trpc.js";
+import {
+ Chart as ChartJS,
+ LinearScale,
+ CategoryScale,
+ PointElement,
+ Tooltip,
+ Title,
+} from "chart.js";
+import { Scatter } from "react-chartjs-2";
+// import "./style.css";
+
+ChartJS.register(LinearScale, CategoryScale, PointElement, Tooltip, Title);
+
+const availableUnderlyings = signal([]);
+const chosenUnderlying = signal(null);
+
+const availableAsOfDates = signal([]);
+const chosenAsOfDate = signal(null);
+
+const availableExpirations = signal([]);
+const chosenExpiration = signal(null);
+
+const availableStrikes = signal([]);
+const chosenStrike = signal(null);
+
+const optionContractUplotData = signal([]);
+const underlyingUplotData = signal([]);
+
+function chooseUnderlying(underlying: string) {
+ chosenUnderlying.value = underlying;
+ trpc.getAvailableAsOfDates
+ .query({ underlying: underlying })
+ .then((getAvailableAsOfDatesResponse) => {
+ availableAsOfDates.value = getAvailableAsOfDatesResponse;
+ chooseAsOfDate(getAvailableAsOfDatesResponse[0]);
+ });
+ trpc.getOpensForUnderlying
+ .query({ underlying: underlying })
+ .then((getOpensForUnderlyingResponse) => {
+ underlyingUplotData.value = getOpensForUnderlyingResponse;
+ });
+}
+
+function chooseAsOfDate(asOfDate: string) {
+ chosenAsOfDate.value = asOfDate;
+ trpc.getExpirationsForUnderlying
+ .query({
+ underlying: chosenUnderlying.value,
+ asOfDate: chosenAsOfDate.value,
+ })
+ .then((getExpirationsForUnderlyingResponse) => {
+ availableExpirations.value = getExpirationsForUnderlyingResponse;
+ chooseExpiration(getExpirationsForUnderlyingResponse[0]);
+ });
+}
+
+function chooseExpiration(expiration: string) {
+ chosenExpiration.value = expiration;
+ trpc.getStrikesForUnderlying
+ .query({
+ underlying: chosenUnderlying.value,
+ asOfDate: chosenAsOfDate.value,
+ expirationDate: expiration,
+ })
+ .then((getStrikesForUnderlyingResponse) => {
+ availableStrikes.value = getStrikesForUnderlyingResponse;
+ chooseStrike(getStrikesForUnderlyingResponse[0]);
+ });
+}
+
+function chooseStrike(strike: string) {
+ chosenStrike.value = strike;
+ trpc.getOpensForOptionContract
+ .query({
+ underlying: chosenUnderlying.value,
+ expirationDate: chosenExpiration.value,
+ strike: parseFloat(strike),
+ })
+ .then((getOpensForOptionContractResponse) => {
+ optionContractUplotData.value = getOpensForOptionContractResponse;
+ });
+}
+
+export function CalendarOptimizer() {
+ const handleInit = useCallback(() => {
+ trpc.getAvailableUnderlyings
+ .query()
+ .then((availableUnderlyingsResponse) => {
+ availableUnderlyings.value = availableUnderlyingsResponse;
+ // load first underlying in list:
+ chooseUnderlying(availableUnderlyingsResponse[0]);
+ });
+ }, []);
+ const handleUnderlyingChange = useCallback((e) => {
+ console.log(`Chose Underlying: ${e.target.value}`);
+ chooseUnderlying(e.target.value);
+ }, []);
+ const handleAsOfDateChange = useCallback((e) => {
+ console.log(`Chose Date: ${e.target.value}`);
+ chooseAsOfDate(e.target.value);
+ }, []);
+ const handleExpirationChange = useCallback((e) => {
+ console.log(`Chose Expiration: ${e.target.value}`);
+ chooseExpiration(e.target.value);
+ }, []);
+ const handleStrikeChange = useCallback((e) => {
+ console.log(`Chose Strike: ${e.target.value}`);
+ chooseStrike(e.target.value);
+ }, []);
+
+ useEffect(handleInit, []);
+
+ return (
+ /* container for centering: */
+
+
+ {/* inputs form container: */}
+
+
+
+
+
+
+ {availableUnderlyings.value.length === 0 ? (
+ "Loading..."
+ ) : (
+
+ )}
+
+
+
+
+
+
+
+ {availableAsOfDates.value.length === 0 ? (
+ "Loading..."
+ ) : (
+
+ )}
+
+
+
+
+
+
+
+ {availableExpirations.value.length === 0 ? (
+ "Loading..."
+ ) : (
+
+ )}
+
+
+
+
+
+
+
+ {availableStrikes.value.length === 0 ? (
+ "Loading..."
+ ) : (
+
+ )}
+
+
+
+
+ {chosenUnderlying.value !== null &&
+ underlyingUplotData.value.length > 0 ? (
+
+
+
+ ) : (
+ <>>
+ )}
+ {chosenUnderlying.value !== null &&
+ chosenAsOfDate.value !== null &&
+ chosenExpiration.value !== null &&
+ chosenStrike.value !== null &&
+ optionContractUplotData.value.length > 0 ? (
+
+
+
+ ) : (
+ <>>
+ )}
+
+
+
+ );
+}
diff --git a/frontend/src/pages/CalendarOptimizer/index.tsx b/frontend/src/pages/CalendarOptimizer/index.tsx
deleted file mode 100644
index 331e7a4..0000000
--- a/frontend/src/pages/CalendarOptimizer/index.tsx
+++ /dev/null
@@ -1,305 +0,0 @@
-import { signal } from "@preact/signals";
-import { useCallback, useEffect } from "preact/hooks";
-import { trpc } from "../../trpc.js";
-import {
- Chart as ChartJS,
- LinearScale,
- CategoryScale,
- PointElement,
- Tooltip,
- Title,
-} from "chart.js";
-import { Scatter } from "react-chartjs-2";
-import "./style.css";
-
-ChartJS.register(LinearScale, CategoryScale, PointElement, Tooltip, Title);
-
-const availableUnderlyings = signal([]);
-const chosenUnderlying = signal(null);
-
-const availableAsOfDates = signal([]);
-const chosenAsOfDate = signal(null);
-
-const availableExpirations = signal([]);
-const chosenExpiration = signal(null);
-
-const availableStrikes = signal([]);
-const chosenStrike = signal(null);
-
-const optionContractUplotData = signal([]);
-const underlyingUplotData = signal([]);
-
-function chooseUnderlying(underlying: string) {
- chosenUnderlying.value = underlying;
- trpc.getAvailableAsOfDates
- .query({ underlying: underlying })
- .then((getAvailableAsOfDatesResponse) => {
- availableAsOfDates.value = getAvailableAsOfDatesResponse;
- chooseAsOfDate(getAvailableAsOfDatesResponse[0]);
- });
- trpc.getOpensForUnderlying
- .query({ underlying: underlying })
- .then((getOpensForUnderlyingResponse) => {
- underlyingUplotData.value = getOpensForUnderlyingResponse;
- });
-}
-
-function chooseAsOfDate(asOfDate: string) {
- chosenAsOfDate.value = asOfDate;
- trpc.getExpirationsForUnderlying
- .query({
- underlying: chosenUnderlying.value,
- asOfDate: chosenAsOfDate.value,
- })
- .then((getExpirationsForUnderlyingResponse) => {
- availableExpirations.value = getExpirationsForUnderlyingResponse;
- chooseExpiration(getExpirationsForUnderlyingResponse[0]);
- });
-}
-
-function chooseExpiration(expiration: string) {
- chosenExpiration.value = expiration;
- trpc.getStrikesForUnderlying
- .query({
- underlying: chosenUnderlying.value,
- asOfDate: chosenAsOfDate.value,
- expirationDate: expiration,
- })
- .then((getStrikesForUnderlyingResponse) => {
- availableStrikes.value = getStrikesForUnderlyingResponse;
- chooseStrike(getStrikesForUnderlyingResponse[0]);
- });
-}
-
-function chooseStrike(strike: string) {
- chosenStrike.value = strike;
- trpc.getOpensForOptionContract
- .query({
- underlying: chosenUnderlying.value,
- expirationDate: chosenExpiration.value,
- strike: parseFloat(strike),
- })
- .then((getOpensForOptionContractResponse) => {
- optionContractUplotData.value = getOpensForOptionContractResponse;
- });
-}
-
-export function CalendarOptimizer() {
- const handleInit = useCallback(() => {
- trpc.getAvailableUnderlyings
- .query()
- .then((availableUnderlyingsResponse) => {
- availableUnderlyings.value = availableUnderlyingsResponse;
- // load first underlying in list:
- chooseUnderlying(availableUnderlyingsResponse[0]);
- });
- }, []);
- const handleUnderlyingChange = useCallback((e) => {
- console.log(`Chose Underlying: ${e.target.value}`);
- chooseUnderlying(e.target.value);
- }, []);
- const handleAsOfDateChange = useCallback((e) => {
- console.log(`Chose Date: ${e.target.value}`);
- chooseAsOfDate(e.target.value);
- }, []);
- const handleExpirationChange = useCallback((e) => {
- console.log(`Chose Expiration: ${e.target.value}`);
- chooseExpiration(e.target.value);
- }, []);
- const handleStrikeChange = useCallback((e) => {
- console.log(`Chose Strike: ${e.target.value}`);
- chooseStrike(e.target.value);
- }, []);
-
- useEffect(handleInit, []);
-
- return (
-
-
-
- {availableUnderlyings.value.length === 0 ? (
- "Loading..."
- ) : (
-
- )}
-
-
-
- {availableAsOfDates.value.length === 0 ? (
- "Loading..."
- ) : (
-
- )}
-
-
-
- {availableExpirations.value.length === 0 ? (
- "Loading..."
- ) : (
-
- )}
-
-
-
- {availableStrikes.value.length === 0 ? (
- "Loading..."
- ) : (
-
- )}
-
-
- {chosenUnderlying.value !== null &&
- underlyingUplotData.value.length > 0 ? (
-
-
-
- ) : (
- <>>
- )}
- {chosenUnderlying.value !== null &&
- chosenAsOfDate.value !== null &&
- chosenExpiration.value !== null &&
- chosenStrike.value !== null &&
- optionContractUplotData.value.length > 0 ? (
-
-
-
- ) : (
- <>>
- )}
-
-
- );
-}
diff --git a/frontend/src/pages/CalendarOptimizer/style.css b/frontend/src/pages/CalendarOptimizer/style.css
deleted file mode 100644
index 093122e..0000000
--- a/frontend/src/pages/CalendarOptimizer/style.css
+++ /dev/null
@@ -1,11 +0,0 @@
-.chart-container {
- display: flex;
- flex-direction: row;
- flex-wrap: nowrap;
- justify-content: space-around;
- width: 1800px;
- height: 480px;
-}
-.chart-container > .chart {
- width: 880px;
-}
diff --git a/frontend/src/pages/HistoricalCalendarPrices.tsx b/frontend/src/pages/HistoricalCalendarPrices.tsx
new file mode 100644
index 0000000..3122fff
--- /dev/null
+++ b/frontend/src/pages/HistoricalCalendarPrices.tsx
@@ -0,0 +1,500 @@
+import { signal, computed } from "@preact/signals";
+import { useEffect } from "preact/hooks";
+import { trpc } from "../trpc.js";
+import {
+ Chart as ChartJS,
+ LinearScale,
+ CategoryScale,
+ PointElement,
+ Tooltip,
+ Title,
+} from "chart.js";
+import { Scatter } from "react-chartjs-2";
+// import './style.css';
+
+ChartJS.register(LinearScale, CategoryScale, PointElement, Tooltip, Title);
+
+const availableUnderlyings = signal([]);
+const chosenUnderlying = signal(null);
+
+const chosenDaysToFrontExpiration = signal(14);
+
+const chosenDaysBetweenFrontAndBackExpiration = signal(14);
+
+const chosenStrikePercentageFromUnderlyingPrice = signal(1.4);
+const chosenStrikePercentageFromUnderlyingPriceRadius = signal(0.05);
+
+const chosenExitToFrontExpiration = signal(2);
+
+const historicalStockQuoteChartData = signal([]);
+
+const historicalCalendarQuoteChartData = signal([]);
+
+const historicalCalendarExitQuoteChartData = signal([]);
+
+const chosenLookbackPeriodStart = signal("2022-01-01");
+const chosenLookbackPeriodEnd = signal("2024-01-01");
+
+const maxChartPrice = computed(() =>
+ Math.max(
+ Math.max.apply(
+ null,
+ historicalCalendarQuoteChartData.value.map((d) => d.y)
+ ),
+ Math.max.apply(
+ null,
+ historicalCalendarExitQuoteChartData.value.map((d) => d.y)
+ )
+ )
+);
+
+const refreshHistoricalStockQuoteChartData = () => {
+ trpc.getHistoricalStockQuoteChartData
+ .query({
+ underlying: chosenUnderlying.value,
+ lookbackPeriodStart: chosenLookbackPeriodStart.value,
+ lookbackPeriodEnd: chosenLookbackPeriodEnd.value,
+ })
+ .then((getHistoricalStockQuoteChartDataResponse) => {
+ historicalStockQuoteChartData.value =
+ getHistoricalStockQuoteChartDataResponse;
+ });
+};
+const refreshHistoricalCalendarQuoteChartData = () => {
+ trpc.getHistoricalCalendarQuoteChartData
+ .query({
+ underlying: chosenUnderlying.value,
+ daysToFrontExpiration: chosenDaysToFrontExpiration.value,
+ daysBetweenFrontAndBackExpiration:
+ chosenDaysBetweenFrontAndBackExpiration.value,
+ strikePercentageFromUnderlyingPriceRangeMin:
+ chosenStrikePercentageFromUnderlyingPrice.value -
+ chosenStrikePercentageFromUnderlyingPriceRadius.value,
+ strikePercentageFromUnderlyingPriceRangeMax:
+ chosenStrikePercentageFromUnderlyingPrice.value +
+ chosenStrikePercentageFromUnderlyingPriceRadius.value,
+ lookbackPeriodStart: chosenLookbackPeriodStart.value,
+ lookbackPeriodEnd: chosenLookbackPeriodEnd.value,
+ })
+ .then((getHistoricalCalendarQuoteChartDataResponse) => {
+ historicalCalendarQuoteChartData.value =
+ getHistoricalCalendarQuoteChartDataResponse;
+ });
+};
+const refreshHistoricalCalendarExitQuoteChartData = () => {
+ trpc.getHistoricalCalendarExitQuoteChartData
+ .query({
+ underlying: chosenUnderlying.value,
+ daysToFrontExpiration: chosenExitToFrontExpiration.value,
+ daysBetweenFrontAndBackExpiration:
+ chosenDaysBetweenFrontAndBackExpiration.value,
+ lookbackPeriodStart: chosenLookbackPeriodStart.value,
+ lookbackPeriodEnd: chosenLookbackPeriodEnd.value,
+ })
+ .then((getHistoricalCalendarExitQuoteChartDataResponse) => {
+ historicalCalendarExitQuoteChartData.value =
+ getHistoricalCalendarExitQuoteChartDataResponse;
+ });
+};
+const handleInit = () => {
+ trpc.getAvailableUnderlyings.query().then((availableUnderlyingsResponse) => {
+ availableUnderlyings.value = availableUnderlyingsResponse;
+ chosenUnderlying.value = availableUnderlyingsResponse[0];
+ refreshHistoricalStockQuoteChartData();
+ refreshHistoricalCalendarQuoteChartData();
+ refreshHistoricalCalendarExitQuoteChartData();
+ });
+};
+const handleUnderlyingChange = (e) => {
+ if (chosenUnderlying.value !== e.target.value) {
+ chosenUnderlying.value = e.target.value;
+ refreshHistoricalStockQuoteChartData();
+ refreshHistoricalCalendarQuoteChartData();
+ refreshHistoricalCalendarExitQuoteChartData();
+ }
+};
+const handleDaysToFrontExpirationChange = (e) => {
+ if (chosenDaysToFrontExpiration.value !== parseInt(e.target.value)) {
+ chosenDaysToFrontExpiration.value = parseInt(e.target.value);
+ refreshHistoricalCalendarQuoteChartData();
+ }
+};
+const handleDaysBetweenFrontAndBackExpirationChange = (e) => {
+ if (
+ chosenDaysBetweenFrontAndBackExpiration.value !== parseInt(e.target.value)
+ ) {
+ chosenDaysBetweenFrontAndBackExpiration.value = parseInt(e.target.value);
+ refreshHistoricalCalendarQuoteChartData();
+ refreshHistoricalCalendarExitQuoteChartData();
+ }
+};
+const handleStrikePercentageFromUnderlyingPriceChange = (e) => {
+ if (
+ chosenStrikePercentageFromUnderlyingPrice.value !==
+ parseFloat(e.target.value)
+ ) {
+ chosenStrikePercentageFromUnderlyingPrice.value = parseFloat(
+ e.target.value
+ );
+ refreshHistoricalCalendarQuoteChartData();
+ }
+};
+const handleStrikePercentageFromUnderlyingPriceRadiusChange = (e) => {
+ if (
+ chosenStrikePercentageFromUnderlyingPriceRadius.value !==
+ parseFloat(e.target.value)
+ ) {
+ chosenStrikePercentageFromUnderlyingPriceRadius.value = parseFloat(
+ e.target.value
+ );
+ refreshHistoricalCalendarQuoteChartData();
+ }
+};
+const handleExitToFrontExpirationChange = (e) => {
+ if (chosenExitToFrontExpiration.value !== parseInt(e.target.value)) {
+ chosenExitToFrontExpiration.value = parseInt(e.target.value);
+ refreshHistoricalCalendarExitQuoteChartData();
+ }
+};
+
+const handleLookbackPeriodStartChange = (e) => {
+ if (chosenLookbackPeriodStart.value !== e.target.value) {
+ chosenLookbackPeriodStart.value = e.target.value;
+ refreshHistoricalStockQuoteChartData();
+ refreshHistoricalCalendarQuoteChartData();
+ refreshHistoricalCalendarExitQuoteChartData();
+ }
+};
+const handleLookbackPeriodEndChange = (e) => {
+ if (chosenLookbackPeriodEnd.value !== e.target.value) {
+ chosenLookbackPeriodEnd.value = e.target.value;
+ refreshHistoricalStockQuoteChartData();
+ refreshHistoricalCalendarQuoteChartData();
+ refreshHistoricalCalendarExitQuoteChartData();
+ }
+};
+
+export function HistoricalCalendarPrices() {
+ useEffect(handleInit, []);
+
+ return (
+ /* container for centering: */
+
+
+ {/* inputs form container: */}
+
+
+
+
+
+
+ {availableUnderlyings.value.length === 0 ? (
+ "Loading..."
+ ) : (
+
+ )}
+
+
+
+
+
+
+
+
+ Days
+
+
+
+
+
+
+
+
+ Days Difference
+
+
+
+
+
+
+
+
+
+ Days
+
+
+
+
+ {/* charts container: */}
+
+
+ {chosenUnderlying.value !== null &&
+ historicalStockQuoteChartData.value.length > 0 ? (
+
+
+
+ ) : (
+
Loading Chart...
+ )}
+
+
+ {chosenUnderlying.value !== null &&
+ historicalCalendarQuoteChartData.value.length > 0 ? (
+
+
+
+ ) : (
+
Loading Chart...
+ )}
+
+ {chosenUnderlying.value !== null &&
+ historicalCalendarQuoteChartData.value.length > 0 ? (
+
+
+
+ ) : (
+
Loading Chart...
+ )}
+
+
+
+
+ );
+}
diff --git a/frontend/src/pages/HistoricalCalendarPrices/HistoricalCalendarPrices.tsx b/frontend/src/pages/HistoricalCalendarPrices/HistoricalCalendarPrices.tsx
deleted file mode 100644
index 44df1dd..0000000
--- a/frontend/src/pages/HistoricalCalendarPrices/HistoricalCalendarPrices.tsx
+++ /dev/null
@@ -1,380 +0,0 @@
-import { signal, computed } from "@preact/signals";
-import { useEffect } from "preact/hooks";
-import {trpc} from '../../trpc.js';
-import {
- Chart as ChartJS,
- LinearScale,
- CategoryScale,
- PointElement,
- Tooltip,
- Title,
-} from 'chart.js';
-import { Scatter } from 'react-chartjs-2';
-import './style.css';
-
-ChartJS.register(LinearScale, CategoryScale, PointElement, Tooltip, Title,);
-
-const availableUnderlyings = signal([]);
-const chosenUnderlying = signal(null);
-
-const chosenDaysToFrontExpiration = signal(14);
-
-const chosenDaysBetweenFrontAndBackExpiration = signal(14);
-
-const chosenStrikePercentageFromUnderlyingPrice = signal(1.4);
-const chosenStrikePercentageFromUnderlyingPriceRadius = signal(0.05);
-
-const chosenExitToFrontExpiration = signal(2);
-
-const historicalStockQuoteChartData = signal([]);
-
-const historicalCalendarQuoteChartData = signal([]);
-
-const historicalCalendarExitQuoteChartData = signal([]);
-
-const chosenLookbackPeriodStart = signal("2022-01-01");
-const chosenLookbackPeriodEnd = signal("2024-01-01");
-
-const maxChartPrice = computed(()=>
- Math.max(
- Math.max.apply(null, historicalCalendarQuoteChartData.value.map(d=>d.y)),
- Math.max.apply(null, historicalCalendarExitQuoteChartData.value.map(d=>d.y)),
- )
-);
-
-
-const refreshHistoricalStockQuoteChartData = ()=>{
- trpc.getHistoricalStockQuoteChartData
- .query({
- underlying:chosenUnderlying.value,
- lookbackPeriodStart:chosenLookbackPeriodStart.value,
- lookbackPeriodEnd:chosenLookbackPeriodEnd.value,
- })
- .then((getHistoricalStockQuoteChartDataResponse)=>{
- historicalStockQuoteChartData.value = getHistoricalStockQuoteChartDataResponse;
- })
-};
-const refreshHistoricalCalendarQuoteChartData = ()=>{
- trpc.getHistoricalCalendarQuoteChartData
- .query({
- underlying:chosenUnderlying.value,
- daysToFrontExpiration:chosenDaysToFrontExpiration.value,
- daysBetweenFrontAndBackExpiration:chosenDaysBetweenFrontAndBackExpiration.value,
- strikePercentageFromUnderlyingPriceRangeMin:chosenStrikePercentageFromUnderlyingPrice.value - chosenStrikePercentageFromUnderlyingPriceRadius.value,
- strikePercentageFromUnderlyingPriceRangeMax:chosenStrikePercentageFromUnderlyingPrice.value + chosenStrikePercentageFromUnderlyingPriceRadius.value,
- lookbackPeriodStart:chosenLookbackPeriodStart.value,
- lookbackPeriodEnd:chosenLookbackPeriodEnd.value,
- })
- .then((getHistoricalCalendarQuoteChartDataResponse)=>{
- historicalCalendarQuoteChartData.value = getHistoricalCalendarQuoteChartDataResponse;
- })
-};
-const refreshHistoricalCalendarExitQuoteChartData = ()=>{
- trpc.getHistoricalCalendarExitQuoteChartData
- .query({
- underlying:chosenUnderlying.value,
- daysToFrontExpiration:chosenExitToFrontExpiration.value,
- daysBetweenFrontAndBackExpiration:chosenDaysBetweenFrontAndBackExpiration.value,
- lookbackPeriodStart:chosenLookbackPeriodStart.value,
- lookbackPeriodEnd:chosenLookbackPeriodEnd.value,
- })
- .then((getHistoricalCalendarExitQuoteChartDataResponse)=>{
- historicalCalendarExitQuoteChartData.value = getHistoricalCalendarExitQuoteChartDataResponse;
- })
-};
-const handleInit = ()=>{
- trpc.getAvailableUnderlyings
- .query()
- .then((availableUnderlyingsResponse)=>{
- availableUnderlyings.value = availableUnderlyingsResponse;
- chosenUnderlying.value = availableUnderlyingsResponse[0];
- refreshHistoricalStockQuoteChartData();
- refreshHistoricalCalendarQuoteChartData();
- refreshHistoricalCalendarExitQuoteChartData();
- });
-};
-const handleUnderlyingChange = (e)=>{
- if(chosenUnderlying.value !== e.target.value){
- chosenUnderlying.value = e.target.value;
- refreshHistoricalStockQuoteChartData();
- refreshHistoricalCalendarQuoteChartData();
- refreshHistoricalCalendarExitQuoteChartData();
- }
-};
-const handleDaysToFrontExpirationChange = (e)=>{
- if(chosenDaysToFrontExpiration.value !== parseInt(e.target.value)){
- chosenDaysToFrontExpiration.value = parseInt(e.target.value);
- refreshHistoricalCalendarQuoteChartData();
- }
-};
-const handleDaysBetweenFrontAndBackExpirationChange = (e)=>{
- if(chosenDaysBetweenFrontAndBackExpiration.value !== parseInt(e.target.value)){
- chosenDaysBetweenFrontAndBackExpiration.value = parseInt(e.target.value);
- refreshHistoricalCalendarQuoteChartData();
- refreshHistoricalCalendarExitQuoteChartData();
- }
-};
-const handleStrikePercentageFromUnderlyingPriceChange = (e)=>{
- if(chosenStrikePercentageFromUnderlyingPrice.value !== parseFloat(e.target.value)){
- chosenStrikePercentageFromUnderlyingPrice.value = parseFloat(e.target.value);
- refreshHistoricalCalendarQuoteChartData();
- }
-};
-const handleStrikePercentageFromUnderlyingPriceRadiusChange = (e)=>{
- if(chosenStrikePercentageFromUnderlyingPriceRadius.value !== parseFloat(e.target.value)){
- chosenStrikePercentageFromUnderlyingPriceRadius.value = parseFloat(e.target.value);
- refreshHistoricalCalendarQuoteChartData();
- }
-};
-const handleExitToFrontExpirationChange = (e)=>{
- if(chosenExitToFrontExpiration.value !== parseInt(e.target.value)){
- chosenExitToFrontExpiration.value = parseInt(e.target.value);
- refreshHistoricalCalendarExitQuoteChartData();
- }
-};
-
-const handleLookbackPeriodStartChange = (e)=>{
- if(chosenLookbackPeriodStart.value !== e.target.value){
- chosenLookbackPeriodStart.value = e.target.value;
- refreshHistoricalStockQuoteChartData();
- refreshHistoricalCalendarQuoteChartData();
- refreshHistoricalCalendarExitQuoteChartData();
- }
-};
-const handleLookbackPeriodEndChange = (e)=>{
- if(chosenLookbackPeriodEnd.value !== e.target.value){
- chosenLookbackPeriodEnd.value = e.target.value;
- refreshHistoricalStockQuoteChartData();
- refreshHistoricalCalendarQuoteChartData();
- refreshHistoricalCalendarExitQuoteChartData();
- }
-};
-
-export function HistoricalCalendarPrices(){
- useEffect(handleInit, []);
-
- return (
-
-
-
- {
- availableUnderlyings.value.length === 0
- ? "Loading..."
- :
- }
-
-
-
-
- Days
-
-
-
-
- Days Difference
-
-
-
-
- %
- +/-
-
- % from ATM
-
-
-
-
- Days
-
-
-
-
- -
-
-
-
- {chosenUnderlying.value!==null && historicalStockQuoteChartData.value.length>0
- ?
-
-
- :
Loading Chart...
}
-
-
- {chosenUnderlying.value!==null && historicalCalendarQuoteChartData.value.length>0
- ?
-
-
- :
Loading Chart...
}
-
- {chosenUnderlying.value!==null && historicalCalendarQuoteChartData.value.length>0
- ?
-
-
- :
Loading Chart...
}
-
-
- );
-}
\ No newline at end of file
diff --git a/frontend/src/pages/HistoricalCalendarPrices/style.css b/frontend/src/pages/HistoricalCalendarPrices/style.css
deleted file mode 100644
index dc4fb2a..0000000
--- a/frontend/src/pages/HistoricalCalendarPrices/style.css
+++ /dev/null
@@ -1,11 +0,0 @@
-.chart-container {
- display: flex;
- flex-direction: row;
- flex-wrap: nowrap;
- justify-content: space-around;
- width: 1800px;
- height: 480px;
-}
-.chart-container > .chart {
- width: 880px;
-}
diff --git a/frontend/src/pages/Home/style.css b/frontend/src/pages/Home/style.css
deleted file mode 100644
index f51cfc1..0000000
--- a/frontend/src/pages/Home/style.css
+++ /dev/null
@@ -1,47 +0,0 @@
-img {
- margin-bottom: 1.5rem;
-}
-
-img:hover {
- filter: drop-shadow(0 0 2em #673ab8aa);
-}
-
-.home section {
- margin-top: 5rem;
- display: grid;
- grid-template-columns: repeat(3, 1fr);
- column-gap: 1.5rem;
-}
-
-.resource {
- padding: 0.75rem 1.5rem;
- border-radius: 0.5rem;
- text-align: left;
- text-decoration: none;
- color: #222;
- background-color: #f1f1f1;
- border: 1px solid transparent;
-}
-
-.resource:hover {
- border: 1px solid #000;
- box-shadow: 0 25px 50px -12px #673ab888;
-}
-
-@media (max-width: 639px) {
- .home section {
- margin-top: 5rem;
- grid-template-columns: 1fr;
- row-gap: 1rem;
- }
-}
-
-@media (prefers-color-scheme: dark) {
- .resource {
- color: #ccc;
- background-color: #161616;
- }
- .resource:hover {
- border: 1px solid #bbb;
- }
-}
diff --git a/frontend/src/pages/Home/index.tsx b/frontend/src/pages/index.tsx
similarity index 100%
rename from frontend/src/pages/Home/index.tsx
rename to frontend/src/pages/index.tsx
diff --git a/frontend/src/style.css b/frontend/src/style.css
deleted file mode 100644
index 104128b..0000000
--- a/frontend/src/style.css
+++ /dev/null
@@ -1,72 +0,0 @@
-:root {
- font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
- line-height: 1.5;
- font-weight: 400;
-
- color: #222;
- background-color: #ffffff;
-
- font-synthesis: none;
- text-rendering: optimizeLegibility;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- -webkit-text-size-adjust: 100%;
-}
-
-body {
- margin: 0;
-}
-
-#app {
- display: flex;
- flex-direction: column;
- min-height: 100vh;
- justify-content: start;
-}
-
-header {
- display: flex;
- justify-content: flex-end;
- background-color: #673ab8;
-}
-
-header nav {
- display: flex;
-}
-
-header a {
- color: #fff;
- padding: 0.75rem;
- text-decoration: none;
-}
-
-header a.active {
- background-color: #0005;
-}
-
-header a:hover {
- background-color: #0008;
-}
-
-main {
- flex: auto;
- display: flex;
- flex-direction: column;
- align-items: start;
- max-width: 1280px;
- justify-content: center;
- text-align: center;
-}
-
-@media (max-width: 639px) {
- main {
- margin: 2rem;
- }
-}
-
-@media (prefers-color-scheme: dark) {
- :root {
- color: #ccc;
- background-color: #1a1a1a;
- }
-}
diff --git a/frontend/tailwind.config.js b/frontend/tailwind.config.js
new file mode 100644
index 0000000..fc061f0
--- /dev/null
+++ b/frontend/tailwind.config.js
@@ -0,0 +1,13 @@
+/** @type {import('tailwindcss').Config} */
+export default {
+ content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}"],
+ theme: {
+ extend: {
+ width: {
+ 128: "32rem",
+ 160: "40rem",
+ },
+ },
+ },
+ plugins: [],
+};