authorgravatar for git@paperclover.netclover caruso <git@paperclover.net> 2026-03-19 19:56:44-07:00
committergravatar for git@paperclover.netclover caruso <git@paperclover.net> 2026-03-20 01:17:10-07:00
log9aff7edf050088cee3bc2d69cc5a6c4f4d512704
treee16773874a39b94fa1d750b636356af1ecbb2cc9
parenta5ec1eef9bc66643cc4a597bbcac83d7b713bd3d
signaturebadge-check Signed by SSH key SHA256:xbd+BjjhyBfwk7GVoURf9Yx0gzDerHbvYv7SddNWmAs

feat: prepare publishing


20 files changed, 4022 insertions(+), 1113 deletions(-)

.gitignore+2-3
......@@ -1,4 +1,3 @@
11node_modules
2dist
3*.log
4.DS_Store
2# non-canonical lockfile
3deno.lock
.npmrc created+1
......@@ -0,0 +1 @@
1@jsr:registry=https://npm.jsr.io
.oxfmtrc.json created+4
......@@ -0,0 +1,4 @@
1{
2 "$schema": "./node_modules/oxfmt/configuration_schema.json",
3 "ignorePatterns": []
4}
LICENSE created+5
......@@ -0,0 +1,5 @@
1Copyright 2026 clover caruso
2
3Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
4
5THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
README.md+36-6
......@@ -6,14 +6,15 @@ component is extremely memoized, making it suitable for streaming situations
66such as LLM chat interfaces.
77
88- **Bring your Existing Pipeline**: The primary option for configuration is
9 providing a `unified.Processor` with or without the `rehypeReact` plugin.
9 providing a `unified.Processor` with remark and rehype plugins configured.
1010 Additionally, you can override the element renderers with the `components`
1111 attribute. By default, `@clo/react-markdown` applies a bare bones config so
1212 you can get started with just `<Markdown content="hi" />`. Configuration is
1313 done either with a provider, or right at the component level.
14- **Handle Partial Markdown**: When the `predict` prop is set, sequences like
15 `hello **world` will be emitted as `hello <strong>world</strong>`. This
16 behavior can be used standlone via the `@clo/react-markdown/Predict` class.
14- **Handle Partial Markdown**: When the `predict` prop is set, the document
15 will be treated as an incomplete stream at the end of a document.
16 `hello **world` will be emitted as `hello <strong>world</strong>`, perfect for
17 the LLM case. (standalone predictor exported as `@clo/react-markdown/Predict`)
1718
1819The motivation for this package is to have an easy to understand version of
1920[Streamdown]. With me banning all Vercel software at the company I work at,
......@@ -27,7 +28,7 @@ to Streamdown:
2728- **Headless UI**: No built in styles or components, bring your own CSS to blend
2829 your markdown with your existing theme. `@clo/react-markdown` simply takes in
2930 your existing `unified` pipeline and works off of that.
30- **Easy to Audit**: Under 700 lines of precise, highly commented TypeScript.
31- **Easy to Audit**: ~850 lines of TypeScript. Main dependency is [unified].
3132
3233[Streamdown]: https://streamdown.ai
3334[unified]: https://unifiedjs.com/
......@@ -41,7 +42,12 @@ import remarkParse from "remark-parse";
4142import { unified } from "unified";
4243
4344// Define any unified processing pipeline. We expect that your
44// app already has one of these.
45// app already has one of these. @clo/react-markdown works with
46// most pipelines, but some important things to note:
47// - During parsing, all nodes have to have a source location.
48// - The pipeline must output a remark (Markdown) AST.
49// - You can also add `remarkRehype` and some rehype plugins.
50// - Do not include the `rehypeReact` plugin in here. It is added for you.
4551const processor = unified().use(remarkParse).use(remarkGfm);
4652
4753// Define custom components. (maps to rehypeReact's option)
......@@ -63,3 +69,27 @@ export function HelloWorld() {
6369 );
6470}
6571```
72
73## Architecture
74
75The `Markdown` component is built out of a memoizer which uses the following tricks to improve performance:
76
77- Using proper `React.memo()` calls. Obviously.
78- Prediction is implemented in a stateful way that only parses the tail end of
79 the document, marking how much of the document is stable and where possible
80 incomplete syntax may live. Since prediction only applies at the end, changing
81 text midway through can invalidate the whole predictor.
82- Separate the parsed document into "blocks", noting the source location of
83 where each block lives.
84- Only start parsing after the first changed character, rounded to the nearest
85 block. In the append-only stream, this essentially means the last two blocks
86 are the only things being re-parsed.
87- Similarly, run AST transforms only on the changed data. This step has a couple
88 of slow paths for when reference link definitions are added or edited, since
89 it means any places that might have used a reference link may now have to
90 reflect it.
91- After all that, a special AST -> React node transform is used that diffs the
92 new ast with the last ast, reusing React nodes whenever possible. This is what
93 prevents most rerenders.
94
95All put together, basically nothing rerenders except what actually changed, and the document is beautiful.
deno.json created+11
......@@ -0,0 +1,11 @@
1{
2 "name": "@clo/react-markdown",
3 "version": "1.0.0-beta.4",
4 "exports": {
5 ".": "./src/Markdown.ts",
6 "./Predict": "./src/Predict.ts"
7 },
8 "publish": {
9 "include": ["README.md", "src/**/*.ts", "tests/**/*.ts", "tests/**/*.tsx"]
10 }
11}
deno.lock created+3101
......@@ -0,0 +1,3101 @@
1{
2 "version": "5",
3 "specifiers": {
4 "jsr:@clo/lib@3": "3.0.0",
5 "npm:@jsr/clo__lib@3": "3.0.0",
6 "npm:@tailwindcss/typography@~0.5.19": "0.5.19_tailwindcss@4.2.2",
7 "npm:@tailwindcss/vite@^4.2.2": "4.2.2_vite@8.0.1__@types+node@25.5.0_@types+node@25.5.0",
8 "npm:@testing-library/react@^16.3.2": "16.3.2_@testing-library+dom@10.4.1_@types+react@19.2.14_@types+react-dom@19.2.3__@types+react@19.2.14_react@19.2.4_react-dom@19.2.4__react@19.2.4",
9 "npm:@types/hast@^3.0.4": "3.0.4",
10 "npm:@types/node@^25.5.0": "25.5.0",
11 "npm:@types/react-dom@^19.2.3": "19.2.3_@types+react@19.2.14",
12 "npm:@types/react@^19.2.14": "19.2.14",
13 "npm:@types/unist@^3.0.3": "3.0.3",
14 "npm:@vitejs/plugin-react@^6.0.1": "6.0.1_vite@8.0.1__@types+node@25.5.0_@types+node@25.5.0",
15 "npm:dequal@2": "2.0.3",
16 "npm:dequal@^2.0.3": "2.0.3",
17 "npm:happy-dom@^20.8.4": "20.8.4",
18 "npm:hast-util-to-jsx-runtime@2": "2.3.6",
19 "npm:hast-util-to-jsx-runtime@2.3.6": "2.3.6",
20 "npm:oxfmt@0.40": "0.40.0",
21 "npm:oxlint@^1.55.0": "1.56.0",
22 "npm:react-dom@^19.2.4": "19.2.4_react@19.2.4",
23 "npm:react-markdown@^10.1.0": "10.1.0_@types+react@19.2.14_react@19.2.4",
24 "npm:react-scan@~0.5.3": "0.5.3_react@19.2.4_react-dom@19.2.4__react@19.2.4_preact@10.29.0_@types+react@19.2.14",
25 "npm:react@^19.2.4": "19.2.4",
26 "npm:rehype-react@8": "8.0.0",
27 "npm:remark-gfm@^4.0.1": "4.0.1",
28 "npm:remark-parse@11": "11.0.0",
29 "npm:remark-rehype@11": "11.1.2",
30 "npm:remark-rehype@^11.1.2": "11.1.2",
31 "npm:streamdown@^2.5.0": "2.5.0_react@19.2.4_react-dom@19.2.4__react@19.2.4",
32 "npm:tailwindcss@^4.2.2": "4.2.2",
33 "npm:typescript@^5.9.3": "5.9.3",
34 "npm:unified@11": "11.0.5",
35 "npm:unified@^11.0.5": "11.0.5",
36 "npm:vite@8": "8.0.1_@types+node@25.5.0",
37 "npm:vitest@4": "4.1.0_@types+node@25.5.0_happy-dom@20.8.4_vite@8.0.1__@types+node@25.5.0"
38 },
39 "jsr": {
40 "@clo/lib@3.0.0": {
41 "integrity": "0c806e34505442ad4969e0b66c032e6cb3f27513b27b02c53990ce8494d1f805"
42 }
43 },
44 "npm": {
45 "@antfu/install-pkg@1.1.0": {
46 "integrity": "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==",
47 "dependencies": [
48 "package-manager-detector",
49 "tinyexec"
50 ]
51 },
52 "@babel/code-frame@7.29.0": {
53 "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
54 "dependencies": [
55 "@babel/helper-validator-identifier",
56 "js-tokens",
57 "picocolors"
58 ]
59 },
60 "@babel/compat-data@7.29.0": {
61 "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg=="
62 },
63 "@babel/core@7.29.0": {
64 "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==",
65 "dependencies": [
66 "@babel/code-frame",
67 "@babel/generator",
68 "@babel/helper-compilation-targets",
69 "@babel/helper-module-transforms",
70 "@babel/helpers",
71 "@babel/parser",
72 "@babel/template",
73 "@babel/traverse",
74 "@babel/types",
75 "@jridgewell/remapping",
76 "convert-source-map",
77 "debug",
78 "gensync",
79 "json5",
80 "semver"
81 ]
82 },
83 "@babel/generator@7.29.1": {
84 "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==",
85 "dependencies": [
86 "@babel/parser",
87 "@babel/types",
88 "@jridgewell/gen-mapping",
89 "@jridgewell/trace-mapping",
90 "jsesc"
91 ]
92 },
93 "@babel/helper-compilation-targets@7.28.6": {
94 "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==",
95 "dependencies": [
96 "@babel/compat-data",
97 "@babel/helper-validator-option",
98 "browserslist",
99 "lru-cache",
100 "semver"
101 ]
102 },
103 "@babel/helper-globals@7.28.0": {
104 "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw=="
105 },
106 "@babel/helper-module-imports@7.28.6": {
107 "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==",
108 "dependencies": [
109 "@babel/traverse",
110 "@babel/types"
111 ]
112 },
113 "@babel/helper-module-transforms@7.28.6_@babel+core@7.29.0": {
114 "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==",
115 "dependencies": [
116 "@babel/core",
117 "@babel/helper-module-imports",
118 "@babel/helper-validator-identifier",
119 "@babel/traverse"
120 ]
121 },
122 "@babel/helper-string-parser@7.27.1": {
123 "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="
124 },
125 "@babel/helper-validator-identifier@7.28.5": {
126 "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="
127 },
128 "@babel/helper-validator-option@7.27.1": {
129 "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg=="
130 },
131 "@babel/helpers@7.29.2": {
132 "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==",
133 "dependencies": [
134 "@babel/template",
135 "@babel/types"
136 ]
137 },
138 "@babel/parser@7.29.2": {
139 "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==",
140 "dependencies": [
141 "@babel/types"
142 ],
143 "bin": true
144 },
145 "@babel/runtime@7.29.2": {
146 "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g=="
147 },
148 "@babel/template@7.28.6": {
149 "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==",
150 "dependencies": [
151 "@babel/code-frame",
152 "@babel/parser",
153 "@babel/types"
154 ]
155 },
156 "@babel/traverse@7.29.0": {
157 "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==",
158 "dependencies": [
159 "@babel/code-frame",
160 "@babel/generator",
161 "@babel/helper-globals",
162 "@babel/parser",
163 "@babel/template",
164 "@babel/types",
165 "debug"
166 ]
167 },
168 "@babel/types@7.29.0": {
169 "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==",
170 "dependencies": [
171 "@babel/helper-string-parser",
172 "@babel/helper-validator-identifier"
173 ]
174 },
175 "@braintree/sanitize-url@7.1.2": {
176 "integrity": "sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA=="
177 },
178 "@chevrotain/cst-dts-gen@11.1.2": {
179 "integrity": "sha512-XTsjvDVB5nDZBQB8o0o/0ozNelQtn2KrUVteIHSlPd2VAV2utEb6JzyCJaJ8tGxACR4RiBNWy5uYUHX2eji88Q==",
180 "dependencies": [
181 "@chevrotain/gast",
182 "@chevrotain/types",
183 "lodash-es"
184 ]
185 },
186 "@chevrotain/gast@11.1.2": {
187 "integrity": "sha512-Z9zfXR5jNZb1Hlsd/p+4XWeUFugrHirq36bKzPWDSIacV+GPSVXdk+ahVWZTwjhNwofAWg/sZg58fyucKSQx5g==",
188 "dependencies": [
189 "@chevrotain/types",
190 "lodash-es"
191 ]
192 },
193 "@chevrotain/regexp-to-ast@11.1.2": {
194 "integrity": "sha512-nMU3Uj8naWer7xpZTYJdxbAs6RIv/dxYzkYU8GSwgUtcAAlzjcPfX1w+RKRcYG8POlzMeayOQ/znfwxEGo5ulw=="
195 },
196 "@chevrotain/types@11.1.2": {
197 "integrity": "sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw=="
198 },
199 "@chevrotain/utils@11.1.2": {
200 "integrity": "sha512-4mudFAQ6H+MqBTfqLmU7G1ZwRzCLfJEooL/fsF6rCX5eePMbGhoy5n4g+G4vlh2muDcsCTJtL+uKbOzWxs5LHA=="
201 },
202 "@emnapi/core@1.9.1": {
203 "integrity": "sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==",
204 "dependencies": [
205 "@emnapi/wasi-threads",
206 "tslib"
207 ]
208 },
209 "@emnapi/runtime@1.9.1": {
210 "integrity": "sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==",
211 "dependencies": [
212 "tslib"
213 ]
214 },
215 "@emnapi/wasi-threads@1.2.0": {
216 "integrity": "sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==",
217 "dependencies": [
218 "tslib"
219 ]
220 },
221 "@esbuild/aix-ppc64@0.25.12": {
222 "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==",
223 "os": ["aix"],
224 "cpu": ["ppc64"]
225 },
226 "@esbuild/android-arm64@0.25.12": {
227 "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==",
228 "os": ["android"],
229 "cpu": ["arm64"]
230 },
231 "@esbuild/android-arm@0.25.12": {
232 "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==",
233 "os": ["android"],
234 "cpu": ["arm"]
235 },
236 "@esbuild/android-x64@0.25.12": {
237 "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==",
238 "os": ["android"],
239 "cpu": ["x64"]
240 },
241 "@esbuild/darwin-arm64@0.25.12": {
242 "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==",
243 "os": ["darwin"],
244 "cpu": ["arm64"]
245 },
246 "@esbuild/darwin-x64@0.25.12": {
247 "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==",
248 "os": ["darwin"],
249 "cpu": ["x64"]
250 },
251 "@esbuild/freebsd-arm64@0.25.12": {
252 "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==",
253 "os": ["freebsd"],
254 "cpu": ["arm64"]
255 },
256 "@esbuild/freebsd-x64@0.25.12": {
257 "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==",
258 "os": ["freebsd"],
259 "cpu": ["x64"]
260 },
261 "@esbuild/linux-arm64@0.25.12": {
262 "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==",
263 "os": ["linux"],
264 "cpu": ["arm64"]
265 },
266 "@esbuild/linux-arm@0.25.12": {
267 "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==",
268 "os": ["linux"],
269 "cpu": ["arm"]
270 },
271 "@esbuild/linux-ia32@0.25.12": {
272 "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==",
273 "os": ["linux"],
274 "cpu": ["ia32"]
275 },
276 "@esbuild/linux-loong64@0.25.12": {
277 "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==",
278 "os": ["linux"],
279 "cpu": ["loong64"]
280 },
281 "@esbuild/linux-mips64el@0.25.12": {
282 "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==",
283 "os": ["linux"],
284 "cpu": ["mips64el"]
285 },
286 "@esbuild/linux-ppc64@0.25.12": {
287 "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==",
288 "os": ["linux"],
289 "cpu": ["ppc64"]
290 },
291 "@esbuild/linux-riscv64@0.25.12": {
292 "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==",
293 "os": ["linux"],
294 "cpu": ["riscv64"]
295 },
296 "@esbuild/linux-s390x@0.25.12": {
297 "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==",
298 "os": ["linux"],
299 "cpu": ["s390x"]
300 },
301 "@esbuild/linux-x64@0.25.12": {
302 "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==",
303 "os": ["linux"],
304 "cpu": ["x64"]
305 },
306 "@esbuild/netbsd-arm64@0.25.12": {
307 "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==",
308 "os": ["netbsd"],
309 "cpu": ["arm64"]
310 },
311 "@esbuild/netbsd-x64@0.25.12": {
312 "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==",
313 "os": ["netbsd"],
314 "cpu": ["x64"]
315 },
316 "@esbuild/openbsd-arm64@0.25.12": {
317 "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==",
318 "os": ["openbsd"],
319 "cpu": ["arm64"]
320 },
321 "@esbuild/openbsd-x64@0.25.12": {
322 "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==",
323 "os": ["openbsd"],
324 "cpu": ["x64"]
325 },
326 "@esbuild/openharmony-arm64@0.25.12": {
327 "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==",
328 "os": ["openharmony"],
329 "cpu": ["arm64"]
330 },
331 "@esbuild/sunos-x64@0.25.12": {
332 "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==",
333 "os": ["sunos"],
334 "cpu": ["x64"]
335 },
336 "@esbuild/win32-arm64@0.25.12": {
337 "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==",
338 "os": ["win32"],
339 "cpu": ["arm64"]
340 },
341 "@esbuild/win32-ia32@0.25.12": {
342 "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==",
343 "os": ["win32"],
344 "cpu": ["ia32"]
345 },
346 "@esbuild/win32-x64@0.25.12": {
347 "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==",
348 "os": ["win32"],
349 "cpu": ["x64"]
350 },
351 "@iconify/types@2.0.0": {
352 "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg=="
353 },
354 "@iconify/utils@3.1.0": {
355 "integrity": "sha512-Zlzem1ZXhI1iHeeERabLNzBHdOa4VhQbqAcOQaMKuTuyZCpwKbC2R4Dd0Zo3g9EAc+Y4fiarO8HIHRAth7+skw==",
356 "dependencies": [
357 "@antfu/install-pkg",
358 "@iconify/types",
359 "mlly"
360 ]
361 },
362 "@jridgewell/gen-mapping@0.3.13": {
363 "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
364 "dependencies": [
365 "@jridgewell/sourcemap-codec",
366 "@jridgewell/trace-mapping"
367 ]
368 },
369 "@jridgewell/remapping@2.3.5": {
370 "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
371 "dependencies": [
372 "@jridgewell/gen-mapping",
373 "@jridgewell/trace-mapping"
374 ]
375 },
376 "@jridgewell/resolve-uri@3.1.2": {
377 "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="
378 },
379 "@jridgewell/sourcemap-codec@1.5.5": {
380 "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="
381 },
382 "@jridgewell/trace-mapping@0.3.31": {
383 "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
384 "dependencies": [
385 "@jridgewell/resolve-uri",
386 "@jridgewell/sourcemap-codec"
387 ]
388 },
389 "@jsr/clo__lib@3.0.0": {
390 "integrity": "sha512-oseZwHCAcXNPbqnGZ37l7+wAoj6ikIXE1VM0s6eD6fz4DcgM030Slf0T7Lgtn7fIdas5hlfx4JF54TR+vo4THw==",
391 "tarball": "https://npm.jsr.io/~/11/@jsr/clo__lib/3.0.0.tgz"
392 },
393 "@mermaid-js/parser@1.0.1": {
394 "integrity": "sha512-opmV19kN1JsK0T6HhhokHpcVkqKpF+x2pPDKKM2ThHtZAB5F4PROopk0amuVYK5qMrIA4erzpNm8gmPNJgMDxQ==",
395 "dependencies": [
396 "langium"
397 ]
398 },
399 "@napi-rs/wasm-runtime@1.1.1": {
400 "integrity": "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==",
401 "dependencies": [
402 "@emnapi/core",
403 "@emnapi/runtime",
404 "@tybys/wasm-util"
405 ]
406 },
407 "@oxc-project/types@0.120.0": {
408 "integrity": "sha512-k1YNu55DuvAip/MGE1FTsIuU3FUCn6v/ujG9V7Nq5Df/kX2CWb13hhwD0lmJGMGqE+bE1MXvv9SZVnMzEXlWcg=="
409 },
410 "@oxfmt/binding-android-arm-eabi@0.40.0": {
411 "integrity": "sha512-S6zd5r1w/HmqR8t0CTnGjFTBLDq2QKORPwriCHxo4xFNuhmOTABGjPaNvCJJVnrKBLsohOeiDX3YqQfJPF+FXw==",
412 "os": ["android"],
413 "cpu": ["arm"]
414 },
415 "@oxfmt/binding-android-arm64@0.40.0": {
416 "integrity": "sha512-/mbS9UUP/5Vbl2D6osIdcYiP0oie63LKMoTyGj5hyMCK/SFkl3EhtyRAfdjPvuvHC0SXdW6ePaTKkBSq1SNcIw==",
417 "os": ["android"],
418 "cpu": ["arm64"]
419 },
420 "@oxfmt/binding-darwin-arm64@0.40.0": {
421 "integrity": "sha512-wRt8fRdfLiEhnRMBonlIbKrJWixoEmn6KCjKE9PElnrSDSXETGZfPb8ee+nQNTobXkCVvVLytp2o0obAsxl78Q==",
422 "os": ["darwin"],
423 "cpu": ["arm64"]
424 },
425 "@oxfmt/binding-darwin-x64@0.40.0": {
426 "integrity": "sha512-fzowhqbOE/NRy+AE5ob0+Y4X243WbWzDb00W+pKwD7d9tOqsAFbtWUwIyqqCoCLxj791m2xXIEeLH/3uz7zCCg==",
427 "os": ["darwin"],
428 "cpu": ["x64"]
429 },
430 "@oxfmt/binding-freebsd-x64@0.40.0": {
431 "integrity": "sha512-agZ9ITaqdBjcerRRFEHB8s0OyVcQW8F9ZxsszjxzeSthQ4fcN2MuOtQFWec1ed8/lDa50jSLHVE2/xPmTgtCfQ==",
432 "os": ["freebsd"],
433 "cpu": ["x64"]
434 },
435 "@oxfmt/binding-linux-arm-gnueabihf@0.40.0": {
436 "integrity": "sha512-ZM2oQ47p28TP1DVIp7HL1QoMUgqlBFHey0ksHct7tMXoU5BqjNvPWw7888azzMt25lnyPODVuye1wvNbvVUFOA==",
437 "os": ["linux"],
438 "cpu": ["arm"]
439 },
440 "@oxfmt/binding-linux-arm-musleabihf@0.40.0": {
441 "integrity": "sha512-RBFPAxRAIsMisKM47Oe6Lwdv6agZYLz02CUhVCD1sOv5ajAcRMrnwCFBPWwGXpazToW2mjnZxFos8TuFjTU15A==",
442 "os": ["linux"],
443 "cpu": ["arm"]
444 },
445 "@oxfmt/binding-linux-arm64-gnu@0.40.0": {
446 "integrity": "sha512-Nb2XbQ+wV3W2jSIihXdPj7k83eOxeSgYP3N/SRXvQ6ZYPIk6Q86qEh5Gl/7OitX3bQoQrESqm1yMLvZV8/J7dA==",
447 "os": ["linux"],
448 "cpu": ["arm64"]
449 },
450 "@oxfmt/binding-linux-arm64-musl@0.40.0": {
451 "integrity": "sha512-tGmWhLD/0YMotCdfezlT6tC/MJG/wKpo4vnQ3Cq+4eBk/BwNv7EmkD0VkD5F/dYkT3b8FNU01X2e8vvJuWoM1w==",
452 "os": ["linux"],
453 "cpu": ["arm64"]
454 },
455 "@oxfmt/binding-linux-ppc64-gnu@0.40.0": {
456 "integrity": "sha512-rVbFyM3e7YhkVnp0IVYjaSHfrBWcTRWb60LEcdNAJcE2mbhTpbqKufx0FrhWfoxOrW/+7UJonAOShoFFLigDqQ==",
457 "os": ["linux"],
458 "cpu": ["ppc64"]
459 },
460 "@oxfmt/binding-linux-riscv64-gnu@0.40.0": {
461 "integrity": "sha512-3ZqBw14JtWeEoLiioJcXSJz8RQyPE+3jLARnYM1HdPzZG4vk+Ua8CUupt2+d+vSAvMyaQBTN2dZK+kbBS/j5mA==",
462 "os": ["linux"],
463 "cpu": ["riscv64"]
464 },
465 "@oxfmt/binding-linux-riscv64-musl@0.40.0": {
466 "integrity": "sha512-JJ4PPSdcbGBjPvb+O7xYm2FmAsKCyuEMYhqatBAHMp/6TA6rVlf9Z/sYPa4/3Bommb+8nndm15SPFRHEPU5qFA==",
467 "os": ["linux"],
468 "cpu": ["riscv64"]
469 },
470 "@oxfmt/binding-linux-s390x-gnu@0.40.0": {
471 "integrity": "sha512-Kp0zNJoX9Ik77wUya2tpBY3W9f40VUoMQLWVaob5SgCrblH/t2xr/9B2bWHfs0WCefuGmqXcB+t0Lq77sbBmZw==",
472 "os": ["linux"],
473 "cpu": ["s390x"]
474 },
475 "@oxfmt/binding-linux-x64-gnu@0.40.0": {
476 "integrity": "sha512-7YTCNzleWTaQTqNGUNQ66qVjpoV6DjbCOea+RnpMBly2bpzrI/uu7Rr+2zcgRfNxyjXaFTVQKaRKjqVdeUfeVA==",
477 "os": ["linux"],
478 "cpu": ["x64"]
479 },
480 "@oxfmt/binding-linux-x64-musl@0.40.0": {
481 "integrity": "sha512-hWnSzJ0oegeOwfOEeejYXfBqmnRGHusgtHfCPzmvJvHTwy1s3Neo59UKc1CmpE3zxvrCzJoVHos0rr97GHMNPw==",
482 "os": ["linux"],
483 "cpu": ["x64"]
484 },
485 "@oxfmt/binding-openharmony-arm64@0.40.0": {
486 "integrity": "sha512-28sJC1lR4qtBJGzSRRbPnSW3GxU2+4YyQFE6rCmsUYqZ5XYH8jg0/w+CvEzQ8TuAQz5zLkcA25nFQGwoU0PT3Q==",
487 "os": ["openharmony"],
488 "cpu": ["arm64"]
489 },
490 "@oxfmt/binding-win32-arm64-msvc@0.40.0": {
491 "integrity": "sha512-cDkRnyT0dqwF5oIX1Cv59HKCeZQFbWWdUpXa3uvnHFT2iwYSSZspkhgjXjU6iDp5pFPaAEAe9FIbMoTgkTmKPg==",
492 "os": ["win32"],
493 "cpu": ["arm64"]
494 },
495 "@oxfmt/binding-win32-ia32-msvc@0.40.0": {
496 "integrity": "sha512-7rPemBJjqm5Gkv6ZRCPvK8lE6AqQ/2z31DRdWazyx2ZvaSgL7QGofHXHNouRpPvNsT9yxRNQJgigsWkc+0qg4w==",
497 "os": ["win32"],
498 "cpu": ["ia32"]
499 },
500 "@oxfmt/binding-win32-x64-msvc@0.40.0": {
501 "integrity": "sha512-/Zmj0yTYSvmha6TG1QnoLqVT7ZMRDqXvFXXBQpIjteEwx9qvUYMBH2xbiOFhDeMUJkGwC3D6fdKsFtaqUvkwNA==",
502 "os": ["win32"],
503 "cpu": ["x64"]
504 },
505 "@oxlint/binding-android-arm-eabi@1.56.0": {
506 "integrity": "sha512-IyfYPthZyiSKwAv/dLjeO18SaK8MxLI9Yss2JrRDyweQAkuL3LhEy7pwIwI7uA3KQc1Vdn20kdmj3q0oUIQL6A==",
507 "os": ["android"],
508 "cpu": ["arm"]
509 },
510 "@oxlint/binding-android-arm64@1.56.0": {
511 "integrity": "sha512-Ga5zYrzH6vc/VFxhn6MmyUnYEfy9vRpwTIks99mY3j6Nz30yYpIkWryI0QKPCgvGUtDSXVLEaMum5nA+WrNOSg==",
512 "os": ["android"],
513 "cpu": ["arm64"]
514 },
515 "@oxlint/binding-darwin-arm64@1.56.0": {
516 "integrity": "sha512-ogmbdJysnw/D4bDcpf1sPLpFThZ48lYp4aKYm10Z/6Nh1SON6NtnNhTNOlhEY296tDFItsZUz+2tgcSYqh8Eyw==",
517 "os": ["darwin"],
518 "cpu": ["arm64"]
519 },
520 "@oxlint/binding-darwin-x64@1.56.0": {
521 "integrity": "sha512-x8QE1h+RAtQ2g+3KPsP6Fk/tdz6zJQUv5c7fTrJxXV3GHOo+Ry5p/PsogU4U+iUZg0rj6hS+E4xi+mnwwlDCWQ==",
522 "os": ["darwin"],
523 "cpu": ["x64"]
524 },
525 "@oxlint/binding-freebsd-x64@1.56.0": {
526 "integrity": "sha512-6G+WMZvwJpMvY7my+/SHEjb7BTk/PFbePqLpmVmUJRIsJMy/UlyYqjpuh0RCgYYkPLcnXm1rUM04kbTk8yS1Yg==",
527 "os": ["freebsd"],
528 "cpu": ["x64"]
529 },
530 "@oxlint/binding-linux-arm-gnueabihf@1.56.0": {
531 "integrity": "sha512-YYHBsk/sl7fYwQOok+6W5lBPeUEvisznV/HZD2IfZmF3Bns6cPC3Z0vCtSEOaAWTjYWN3jVsdu55jMxKlsdlhg==",
532 "os": ["linux"],
533 "cpu": ["arm"]
534 },
535 "@oxlint/binding-linux-arm-musleabihf@1.56.0": {
536 "integrity": "sha512-+AZK8rOUr78y8WT6XkDb04IbMRqauNV+vgT6f8ZLOH8wnpQ9i7Nol0XLxAu+Cq7Sb+J9wC0j6Km5hG8rj47/yQ==",
537 "os": ["linux"],
538 "cpu": ["arm"]
539 },
540 "@oxlint/binding-linux-arm64-gnu@1.56.0": {
541 "integrity": "sha512-urse2SnugwJRojUkGSSeH2LPMaje5Q50yQtvtL9HFckiyeqXzoFwOAZqD5TR29R2lq7UHidfFDM9EGcchcbb8A==",
542 "os": ["linux"],
543 "cpu": ["arm64"]
544 },
545 "@oxlint/binding-linux-arm64-musl@1.56.0": {
546 "integrity": "sha512-rkTZkBfJ4TYLjansjSzL6mgZOdN5IvUnSq3oNJSLwBcNvy3dlgQtpHPrRxrCEbbcp7oQ6If0tkNaqfOsphYZ9g==",
547 "os": ["linux"],
548 "cpu": ["arm64"]
549 },
550 "@oxlint/binding-linux-ppc64-gnu@1.56.0": {
551 "integrity": "sha512-uqL1kMH3u69/e1CH2EJhP3CP28jw2ExLsku4o8RVAZ7fySo9zOyI2fy9pVlTAp4voBLVgzndXi3SgtdyCTa2aA==",
552 "os": ["linux"],
553 "cpu": ["ppc64"]
554 },
555 "@oxlint/binding-linux-riscv64-gnu@1.56.0": {
556 "integrity": "sha512-j0CcMBOgV6KsRaBdsebIeiy7hCjEvq2KdEsiULf2LZqAq0v1M1lWjelhCV57LxsqaIGChXFuFJ0RiFrSRHPhSg==",
557 "os": ["linux"],
558 "cpu": ["riscv64"]
559 },
560 "@oxlint/binding-linux-riscv64-musl@1.56.0": {
561 "integrity": "sha512-7VDOiL8cDG3DQ/CY3yKjbV1c4YPvc4vH8qW09Vv+5ukq3l/Kcyr6XGCd5NvxUmxqDb2vjMpM+eW/4JrEEsUetA==",
562 "os": ["linux"],
563 "cpu": ["riscv64"]
564 },
565 "@oxlint/binding-linux-s390x-gnu@1.56.0": {
566 "integrity": "sha512-JGRpX0M+ikD3WpwJ7vKcHKV6Kg0dT52BW2Eu2BupXotYeqGXBrbY+QPkAyKO6MNgKozyTNaRh3r7g+VWgyAQYQ==",
567 "os": ["linux"],
568 "cpu": ["s390x"]
569 },
570 "@oxlint/binding-linux-x64-gnu@1.56.0": {
571 "integrity": "sha512-dNaICPvtmuxFP/VbqdofrLqdS3bM/AKJN3LMJD52si44ea7Be1cBk6NpfIahaysG9Uo+L98QKddU9CD5L8UHnQ==",
572 "os": ["linux"],
573 "cpu": ["x64"]
574 },
575 "@oxlint/binding-linux-x64-musl@1.56.0": {
576 "integrity": "sha512-pF1vOtM+GuXmbklM1hV8WMsn6tCNPvkUzklj/Ej98JhlanbmA2RB1BILgOpwSuCTRTIYx2MXssmEyQQ90QF5aA==",
577 "os": ["linux"],
578 "cpu": ["x64"]
579 },
580 "@oxlint/binding-openharmony-arm64@1.56.0": {
581 "integrity": "sha512-bp8NQ4RE6fDIFLa4bdBiOA+TAvkNkg+rslR+AvvjlLTYXLy9/uKAYLQudaQouWihLD/hgkrXIKKzXi5IXOewwg==",
582 "os": ["openharmony"],
583 "cpu": ["arm64"]
584 },
585 "@oxlint/binding-win32-arm64-msvc@1.56.0": {
586 "integrity": "sha512-PxT4OJDfMOQBzo3OlzFb9gkoSD+n8qSBxyVq2wQSZIHFQYGEqIRTo9M0ZStvZm5fdhMqaVYpOnJvH2hUMEDk/g==",
587 "os": ["win32"],
588 "cpu": ["arm64"]
589 },
590 "@oxlint/binding-win32-ia32-msvc@1.56.0": {
591 "integrity": "sha512-PTRy6sIEPqy2x8PTP1baBNReN/BNEFmde0L+mYeHmjXE1Vlcc9+I5nsqENsB2yAm5wLkzPoTNCMY/7AnabT4/A==",
592 "os": ["win32"],
593 "cpu": ["ia32"]
594 },
595 "@oxlint/binding-win32-x64-msvc@1.56.0": {
596 "integrity": "sha512-ZHa0clocjLmIDr+1LwoWtxRcoYniAvERotvwKUYKhH41NVfl0Y4LNbyQkwMZzwDvKklKGvGZ5+DAG58/Ik47tQ==",
597 "os": ["win32"],
598 "cpu": ["x64"]
599 },
600 "@preact/signals-core@1.14.0": {
601 "integrity": "sha512-AowtCcCU/33lFlh1zRFf/u+12rfrhtNakj7UpaGEsmMwUKpKWMVvcktOGcwBBNiB4lWrZWc01LhiyyzVklJyaQ=="
602 },
603 "@preact/signals@1.3.4_preact@10.29.0": {
604 "integrity": "sha512-TPMkStdT0QpSc8FpB63aOwXoSiZyIrPsP9Uj347KopdS6olZdAYeeird/5FZv/M1Yc1ge5qstub2o8VDbvkT4g==",
605 "dependencies": [
606 "@preact/signals-core",
607 "preact"
608 ]
609 },
610 "@rolldown/binding-android-arm64@1.0.0-rc.10": {
611 "integrity": "sha512-jOHxwXhxmFKuXztiu1ORieJeTbx5vrTkcOkkkn2d35726+iwhrY1w/+nYY/AGgF12thg33qC3R1LMBF5tHTZHg==",
612 "os": ["android"],
613 "cpu": ["arm64"]
614 },
615 "@rolldown/binding-darwin-arm64@1.0.0-rc.10": {
616 "integrity": "sha512-gED05Teg/vtTZbIJBc4VNMAxAFDUPkuO/rAIyyxZjTj1a1/s6z5TII/5yMGZ0uLRCifEtwUQn8OlYzuYc0m70w==",
617 "os": ["darwin"],
618 "cpu": ["arm64"]
619 },
620 "@rolldown/binding-darwin-x64@1.0.0-rc.10": {
621 "integrity": "sha512-rI15NcM1mA48lqrIxVkHfAqcyFLcQwyXWThy+BQ5+mkKKPvSO26ir+ZDp36AgYoYVkqvMcdS8zOE6SeBsR9e8A==",
622 "os": ["darwin"],
623 "cpu": ["x64"]
624 },
625 "@rolldown/binding-freebsd-x64@1.0.0-rc.10": {
626 "integrity": "sha512-XZRXHdTa+4ME1MuDVp021+doQ+z6Ei4CCFmNc5/sKbqb8YmkiJdj8QKlV3rCI0AJtAeSB5n0WGPuJWNL9p/L2w==",
627 "os": ["freebsd"],
628 "cpu": ["x64"]
629 },
630 "@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.10": {
631 "integrity": "sha512-R0SQMRluISSLzFE20sPWYHVmJdDQnRyc/FzSCN72BqQmh2SOZUFG+N3/vBZpR4C6WpEUVYJLrYUXaj43sJsNLA==",
632 "os": ["linux"],
633 "cpu": ["arm"]
634 },
635 "@rolldown/binding-linux-arm64-gnu@1.0.0-rc.10": {
636 "integrity": "sha512-Y1reMrV/o+cwpduYhJuOE3OMKx32RMYCidf14y+HssARRmhDuWXJ4yVguDg2R/8SyyGNo+auzz64LnPK9Hq6jg==",
637 "os": ["linux"],
638 "cpu": ["arm64"]
639 },
640 "@rolldown/binding-linux-arm64-musl@1.0.0-rc.10": {
641 "integrity": "sha512-vELN+HNb2IzuzSBUOD4NHmP9yrGwl1DVM29wlQvx1OLSclL0NgVWnVDKl/8tEks79EFek/kebQKnNJkIAA4W2g==",
642 "os": ["linux"],
643 "cpu": ["arm64"]
644 },
645 "@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.10": {
646 "integrity": "sha512-ZqrufYTgzxbHwpqOjzSsb0UV/aV2TFIY5rP8HdsiPTv/CuAgCRjM6s9cYFwQ4CNH+hf9Y4erHW1GjZuZ7WoI7w==",
647 "os": ["linux"],
648 "cpu": ["ppc64"]
649 },
650 "@rolldown/binding-linux-s390x-gnu@1.0.0-rc.10": {
651 "integrity": "sha512-gSlmVS1FZJSRicA6IyjoRoKAFK7IIHBs7xJuHRSmjImqk3mPPWbR7RhbnfH2G6bcmMEllCt2vQ/7u9e6bBnByg==",
652 "os": ["linux"],
653 "cpu": ["s390x"]
654 },
655 "@rolldown/binding-linux-x64-gnu@1.0.0-rc.10": {
656 "integrity": "sha512-eOCKUpluKgfObT2pHjztnaWEIbUabWzk3qPZ5PuacuPmr4+JtQG4k2vGTY0H15edaTnicgU428XW/IH6AimcQw==",
657 "os": ["linux"],
658 "cpu": ["x64"]
659 },
660 "@rolldown/binding-linux-x64-musl@1.0.0-rc.10": {
661 "integrity": "sha512-Xdf2jQbfQowJnLcgYfD/m0Uu0Qj5OdxKallD78/IPPfzaiaI4KRAwZzHcKQ4ig1gtg1SuzC7jovNiM2TzQsBXA==",
662 "os": ["linux"],
663 "cpu": ["x64"]
664 },
665 "@rolldown/binding-openharmony-arm64@1.0.0-rc.10": {
666 "integrity": "sha512-o1hYe8hLi1EY6jgPFyxQgQ1wcycX+qz8eEbVmot2hFkgUzPxy9+kF0u0NIQBeDq+Mko47AkaFFaChcvZa9UX9Q==",
667 "os": ["openharmony"],
668 "cpu": ["arm64"]
669 },
670 "@rolldown/binding-wasm32-wasi@1.0.0-rc.10": {
671 "integrity": "sha512-Ugv9o7qYJudqQO5Y5y2N2SOo6S4WiqiNOpuQyoPInnhVzCY+wi/GHltcLHypG9DEUYMB0iTB/huJrpadiAcNcA==",
672 "dependencies": [
673 "@napi-rs/wasm-runtime"
674 ],
675 "cpu": ["wasm32"]
676 },
677 "@rolldown/binding-win32-arm64-msvc@1.0.0-rc.10": {
678 "integrity": "sha512-7UODQb4fQUNT/vmgDZBl3XOBAIOutP5R3O/rkxg0aLfEGQ4opbCgU5vOw/scPe4xOqBwL9fw7/RP1vAMZ6QlAQ==",
679 "os": ["win32"],
680 "cpu": ["arm64"]
681 },
682 "@rolldown/binding-win32-x64-msvc@1.0.0-rc.10": {
683 "integrity": "sha512-PYxKHMVHOb5NJuDL53vBUl1VwUjymDcYI6rzpIni0C9+9mTiJedvUxSk7/RPp7OOAm3v+EjgMu9bIy3N6b408w==",
684 "os": ["win32"],
685 "cpu": ["x64"]
686 },
687 "@rolldown/pluginutils@1.0.0-rc.10": {
688 "integrity": "sha512-UkVDEFk1w3mveXeKgaTuYfKWtPbvgck1dT8TUG3bnccrH0XtLTuAyfCoks4Q/M5ZGToSVJTIQYCzy2g/atAOeg=="
689 },
690 "@rolldown/pluginutils@1.0.0-rc.7": {
691 "integrity": "sha512-qujRfC8sFVInYSPPMLQByRh7zhwkGFS4+tyMQ83srV1qrxL4g8E2tyxVVyxd0+8QeBM1mIk9KbWxkegRr76XzA=="
692 },
693 "@rollup/pluginutils@5.3.0": {
694 "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==",
695 "dependencies": [
696 "@types/estree",
697 "estree-walker@2.0.2",
698 "picomatch"
699 ]
700 },
701 "@standard-schema/spec@1.1.0": {
702 "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="
703 },
704 "@tailwindcss/node@4.2.2": {
705 "integrity": "sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==",
706 "dependencies": [
707 "@jridgewell/remapping",
708 "enhanced-resolve",
709 "jiti",
710 "lightningcss",
711 "magic-string",
712 "source-map-js",
713 "tailwindcss"
714 ]
715 },
716 "@tailwindcss/oxide-android-arm64@4.2.2": {
717 "integrity": "sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg==",
718 "os": ["android"],
719 "cpu": ["arm64"]
720 },
721 "@tailwindcss/oxide-darwin-arm64@4.2.2": {
722 "integrity": "sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg==",
723 "os": ["darwin"],
724 "cpu": ["arm64"]
725 },
726 "@tailwindcss/oxide-darwin-x64@4.2.2": {
727 "integrity": "sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw==",
728 "os": ["darwin"],
729 "cpu": ["x64"]
730 },
731 "@tailwindcss/oxide-freebsd-x64@4.2.2": {
732 "integrity": "sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ==",
733 "os": ["freebsd"],
734 "cpu": ["x64"]
735 },
736 "@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2": {
737 "integrity": "sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ==",
738 "os": ["linux"],
739 "cpu": ["arm"]
740 },
741 "@tailwindcss/oxide-linux-arm64-gnu@4.2.2": {
742 "integrity": "sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw==",
743 "os": ["linux"],
744 "cpu": ["arm64"]
745 },
746 "@tailwindcss/oxide-linux-arm64-musl@4.2.2": {
747 "integrity": "sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag==",
748 "os": ["linux"],
749 "cpu": ["arm64"]
750 },
751 "@tailwindcss/oxide-linux-x64-gnu@4.2.2": {
752 "integrity": "sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg==",
753 "os": ["linux"],
754 "cpu": ["x64"]
755 },
756 "@tailwindcss/oxide-linux-x64-musl@4.2.2": {
757 "integrity": "sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ==",
758 "os": ["linux"],
759 "cpu": ["x64"]
760 },
761 "@tailwindcss/oxide-wasm32-wasi@4.2.2": {
762 "integrity": "sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q==",
763 "cpu": ["wasm32"]
764 },
765 "@tailwindcss/oxide-win32-arm64-msvc@4.2.2": {
766 "integrity": "sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ==",
767 "os": ["win32"],
768 "cpu": ["arm64"]
769 },
770 "@tailwindcss/oxide-win32-x64-msvc@4.2.2": {
771 "integrity": "sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA==",
772 "os": ["win32"],
773 "cpu": ["x64"]
774 },
775 "@tailwindcss/oxide@4.2.2": {
776 "integrity": "sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg==",
777 "optionalDependencies": [
778 "@tailwindcss/oxide-android-arm64",
779 "@tailwindcss/oxide-darwin-arm64",
780 "@tailwindcss/oxide-darwin-x64",
781 "@tailwindcss/oxide-freebsd-x64",
782 "@tailwindcss/oxide-linux-arm-gnueabihf",
783 "@tailwindcss/oxide-linux-arm64-gnu",
784 "@tailwindcss/oxide-linux-arm64-musl",
785 "@tailwindcss/oxide-linux-x64-gnu",
786 "@tailwindcss/oxide-linux-x64-musl",
787 "@tailwindcss/oxide-wasm32-wasi",
788 "@tailwindcss/oxide-win32-arm64-msvc",
789 "@tailwindcss/oxide-win32-x64-msvc"
790 ]
791 },
792 "@tailwindcss/typography@0.5.19_tailwindcss@4.2.2": {
793 "integrity": "sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg==",
794 "dependencies": [
795 "postcss-selector-parser",
796 "tailwindcss"
797 ]
798 },
799 "@tailwindcss/vite@4.2.2_vite@8.0.1__@types+node@25.5.0_@types+node@25.5.0": {
800 "integrity": "sha512-mEiF5HO1QqCLXoNEfXVA1Tzo+cYsrqV7w9Juj2wdUFyW07JRenqMG225MvPwr3ZD9N1bFQj46X7r33iHxLUW0w==",
801 "dependencies": [
802 "@tailwindcss/node",
803 "@tailwindcss/oxide",
804 "tailwindcss",
805 "vite"
806 ]
807 },
808 "@testing-library/dom@10.4.1": {
809 "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==",
810 "dependencies": [
811 "@babel/code-frame",
812 "@babel/runtime",
813 "@types/aria-query",
814 "aria-query",
815 "dom-accessibility-api",
816 "lz-string",
817 "picocolors",
818 "pretty-format"
819 ]
820 },
821 "@testing-library/react@16.3.2_@testing-library+dom@10.4.1_@types+react@19.2.14_@types+react-dom@19.2.3__@types+react@19.2.14_react@19.2.4_react-dom@19.2.4__react@19.2.4": {
822 "integrity": "sha512-XU5/SytQM+ykqMnAnvB2umaJNIOsLF3PVv//1Ew4CTcpz0/BRyy/af40qqrt7SjKpDdT1saBMc42CUok5gaw+g==",
823 "dependencies": [
824 "@babel/runtime",
825 "@testing-library/dom",
826 "@types/react",
827 "@types/react-dom",
828 "react",
829 "react-dom"
830 ],
831 "optionalPeers": [
832 "@types/react",
833 "@types/react-dom"
834 ]
835 },
836 "@tybys/wasm-util@0.10.1": {
837 "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==",
838 "dependencies": [
839 "tslib"
840 ]
841 },
842 "@types/aria-query@5.0.4": {
843 "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw=="
844 },
845 "@types/chai@5.2.3": {
846 "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==",
847 "dependencies": [
848 "@types/deep-eql",
849 "assertion-error"
850 ]
851 },
852 "@types/d3-array@3.2.2": {
853 "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw=="
854 },
855 "@types/d3-axis@3.0.6": {
856 "integrity": "sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==",
857 "dependencies": [
858 "@types/d3-selection"
859 ]
860 },
861 "@types/d3-brush@3.0.6": {
862 "integrity": "sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==",
863 "dependencies": [
864 "@types/d3-selection"
865 ]
866 },
867 "@types/d3-chord@3.0.6": {
868 "integrity": "sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg=="
869 },
870 "@types/d3-color@3.1.3": {
871 "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A=="
872 },
873 "@types/d3-contour@3.0.6": {
874 "integrity": "sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==",
875 "dependencies": [
876 "@types/d3-array",
877 "@types/geojson"
878 ]
879 },
880 "@types/d3-delaunay@6.0.4": {
881 "integrity": "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw=="
882 },
883 "@types/d3-dispatch@3.0.7": {
884 "integrity": "sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA=="
885 },
886 "@types/d3-drag@3.0.7": {
887 "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==",
888 "dependencies": [
889 "@types/d3-selection"
890 ]
891 },
892 "@types/d3-dsv@3.0.7": {
893 "integrity": "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g=="
894 },
895 "@types/d3-ease@3.0.2": {
896 "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA=="
897 },
898 "@types/d3-fetch@3.0.7": {
899 "integrity": "sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==",
900 "dependencies": [
901 "@types/d3-dsv"
902 ]
903 },
904 "@types/d3-force@3.0.10": {
905 "integrity": "sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw=="
906 },
907 "@types/d3-format@3.0.4": {
908 "integrity": "sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g=="
909 },
910 "@types/d3-geo@3.1.0": {
911 "integrity": "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==",
912 "dependencies": [
913 "@types/geojson"
914 ]
915 },
916 "@types/d3-hierarchy@3.1.7": {
917 "integrity": "sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg=="
918 },
919 "@types/d3-interpolate@3.0.4": {
920 "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==",
921 "dependencies": [
922 "@types/d3-color"
923 ]
924 },
925 "@types/d3-path@3.1.1": {
926 "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg=="
927 },
928 "@types/d3-polygon@3.0.2": {
929 "integrity": "sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA=="
930 },
931 "@types/d3-quadtree@3.0.6": {
932 "integrity": "sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg=="
933 },
934 "@types/d3-random@3.0.3": {
935 "integrity": "sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ=="
936 },
937 "@types/d3-scale-chromatic@3.1.0": {
938 "integrity": "sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ=="
939 },
940 "@types/d3-scale@4.0.9": {
941 "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==",
942 "dependencies": [
943 "@types/d3-time"
944 ]
945 },
946 "@types/d3-selection@3.0.11": {
947 "integrity": "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w=="
948 },
949 "@types/d3-shape@3.1.8": {
950 "integrity": "sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==",
951 "dependencies": [
952 "@types/d3-path"
953 ]
954 },
955 "@types/d3-time-format@4.0.3": {
956 "integrity": "sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg=="
957 },
958 "@types/d3-time@3.0.4": {
959 "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g=="
960 },
961 "@types/d3-timer@3.0.2": {
962 "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw=="
963 },
964 "@types/d3-transition@3.0.9": {
965 "integrity": "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==",
966 "dependencies": [
967 "@types/d3-selection"
968 ]
969 },
970 "@types/d3-zoom@3.0.8": {
971 "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==",
972 "dependencies": [
973 "@types/d3-interpolate",
974 "@types/d3-selection"
975 ]
976 },
977 "@types/d3@7.4.3": {
978 "integrity": "sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==",
979 "dependencies": [
980 "@types/d3-array",
981 "@types/d3-axis",
982 "@types/d3-brush",
983 "@types/d3-chord",
984 "@types/d3-color",
985 "@types/d3-contour",
986 "@types/d3-delaunay",
987 "@types/d3-dispatch",
988 "@types/d3-drag",
989 "@types/d3-dsv",
990 "@types/d3-ease",
991 "@types/d3-fetch",
992 "@types/d3-force",
993 "@types/d3-format",
994 "@types/d3-geo",
995 "@types/d3-hierarchy",
996 "@types/d3-interpolate",
997 "@types/d3-path",
998 "@types/d3-polygon",
999 "@types/d3-quadtree",
1000 "@types/d3-random",
1001 "@types/d3-scale",
1002 "@types/d3-scale-chromatic",
1003 "@types/d3-selection",
1004 "@types/d3-shape",
1005 "@types/d3-time",
1006 "@types/d3-time-format",
1007 "@types/d3-timer",
1008 "@types/d3-transition",
1009 "@types/d3-zoom"
1010 ]
1011 },
1012 "@types/debug@4.1.13": {
1013 "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==",
1014 "dependencies": [
1015 "@types/ms"
1016 ]
1017 },
1018 "@types/deep-eql@4.0.2": {
1019 "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw=="
1020 },
1021 "@types/estree-jsx@1.0.5": {
1022 "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==",
1023 "dependencies": [
1024 "@types/estree"
1025 ]
1026 },
1027 "@types/estree@1.0.8": {
1028 "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="
1029 },
1030 "@types/geojson@7946.0.16": {
1031 "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg=="
1032 },
1033 "@types/hast@3.0.4": {
1034 "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
1035 "dependencies": [
1036 "@types/unist@3.0.3"
1037 ]
1038 },
1039 "@types/mdast@4.0.4": {
1040 "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
1041 "dependencies": [
1042 "@types/unist@3.0.3"
1043 ]
1044 },
1045 "@types/ms@2.1.0": {
1046 "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="
1047 },
1048 "@types/node@20.19.37": {
1049 "integrity": "sha512-8kzdPJ3FsNsVIurqBs7oodNnCEVbni9yUEkaHbgptDACOPW04jimGagZ51E6+lXUwJjgnBw+hyko/lkFWCldqw==",
1050 "dependencies": [
1051 "undici-types@6.21.0"
1052 ]
1053 },
1054 "@types/node@25.5.0": {
1055 "integrity": "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==",
1056 "dependencies": [
1057 "undici-types@7.18.2"
1058 ]
1059 },
1060 "@types/react-dom@19.2.3_@types+react@19.2.14": {
1061 "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==",
1062 "dependencies": [
1063 "@types/react"
1064 ]
1065 },
1066 "@types/react-reconciler@0.28.9_@types+react@19.2.14": {
1067 "integrity": "sha512-HHM3nxyUZ3zAylX8ZEyrDNd2XZOnQ0D5XfunJF5FLQnZbHHYq4UWvW1QfelQNXv1ICNkwYhfxjwfnqivYB6bFg==",
1068 "dependencies": [
1069 "@types/react"
1070 ]
1071 },
1072 "@types/react@19.2.14": {
1073 "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==",
1074 "dependencies": [
1075 "csstype"
1076 ]
1077 },
1078 "@types/trusted-types@2.0.7": {
1079 "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw=="
1080 },
1081 "@types/unist@2.0.11": {
1082 "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="
1083 },
1084 "@types/unist@3.0.3": {
1085 "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="
1086 },
1087 "@types/whatwg-mimetype@3.0.2": {
1088 "integrity": "sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA=="
1089 },
1090 "@types/ws@8.18.1": {
1091 "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==",
1092 "dependencies": [
1093 "@types/node@25.5.0"
1094 ]
1095 },
1096 "@ungap/structured-clone@1.3.0": {
1097 "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="
1098 },
1099 "@upsetjs/venn.js@2.0.0_d3-selection@3.0.0": {
1100 "integrity": "sha512-WbBhLrooyePuQ1VZxrJjtLvTc4NVfpOyKx0sKqioq9bX1C1m7Jgykkn8gLrtwumBioXIqam8DLxp88Adbue6Hw==",
1101 "optionalDependencies": [
1102 "d3-selection",
1103 "d3-transition"
1104 ]
1105 },
1106 "@vitejs/plugin-react@6.0.1_vite@8.0.1__@types+node@25.5.0_@types+node@25.5.0": {
1107 "integrity": "sha512-l9X/E3cDb+xY3SWzlG1MOGt2usfEHGMNIaegaUGFsLkb3RCn/k8/TOXBcab+OndDI4TBtktT8/9BwwW8Vi9KUQ==",
1108 "dependencies": [
1109 "@rolldown/pluginutils@1.0.0-rc.7",
1110 "vite"
1111 ]
1112 },
1113 "@vitest/expect@4.1.0": {
1114 "integrity": "sha512-EIxG7k4wlWweuCLG9Y5InKFwpMEOyrMb6ZJ1ihYu02LVj/bzUwn2VMU+13PinsjRW75XnITeFrQBMH5+dLvCDA==",
1115 "dependencies": [
1116 "@standard-schema/spec",
1117 "@types/chai",
1118 "@vitest/spy",
1119 "@vitest/utils",
1120 "chai",
1121 "tinyrainbow"
1122 ]
1123 },
1124 "@vitest/mocker@4.1.0_vite@8.0.1__@types+node@25.5.0_@types+node@25.5.0": {
1125 "integrity": "sha512-evxREh+Hork43+Y4IOhTo+h5lGmVRyjqI739Rz4RlUPqwrkFFDF6EMvOOYjTx4E8Tl6gyCLRL8Mu7Ry12a13Tw==",
1126 "dependencies": [
1127 "@vitest/spy",
1128 "estree-walker@3.0.3",
1129 "magic-string",
1130 "vite"
1131 ],
1132 "optionalPeers": [
1133 "vite"
1134 ]
1135 },
1136 "@vitest/pretty-format@4.1.0": {
1137 "integrity": "sha512-3RZLZlh88Ib0J7NQTRATfc/3ZPOnSUn2uDBUoGNn5T36+bALixmzphN26OUD3LRXWkJu4H0s5vvUeqBiw+kS0A==",
1138 "dependencies": [
1139 "tinyrainbow"
1140 ]
1141 },
1142 "@vitest/runner@4.1.0": {
1143 "integrity": "sha512-Duvx2OzQ7d6OjchL+trw+aSrb9idh7pnNfxrklo14p3zmNL4qPCDeIJAK+eBKYjkIwG96Bc6vYuxhqDXQOWpoQ==",
1144 "dependencies": [
1145 "@vitest/utils",
1146 "pathe"
1147 ]
1148 },
1149 "@vitest/snapshot@4.1.0": {
1150 "integrity": "sha512-0Vy9euT1kgsnj1CHttwi9i9o+4rRLEaPRSOJ5gyv579GJkNpgJK+B4HSv/rAWixx2wdAFci1X4CEPjiu2bXIMg==",
1151 "dependencies": [
1152 "@vitest/pretty-format",
1153 "@vitest/utils",
1154 "magic-string",
1155 "pathe"
1156 ]
1157 },
1158 "@vitest/spy@4.1.0": {
1159 "integrity": "sha512-pz77k+PgNpyMDv2FV6qmk5ZVau6c3R8HC8v342T2xlFxQKTrSeYw9waIJG8KgV9fFwAtTu4ceRzMivPTH6wSxw=="
1160 },
1161 "@vitest/utils@4.1.0": {
1162 "integrity": "sha512-XfPXT6a8TZY3dcGY8EdwsBulFCIw+BeeX0RZn2x/BtiY/75YGh8FeWGG8QISN/WhaqSrE2OrlDgtF8q5uhOTmw==",
1163 "dependencies": [
1164 "@vitest/pretty-format",
1165 "convert-source-map",
1166 "tinyrainbow"
1167 ]
1168 },
1169 "acorn@8.16.0": {
1170 "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
1171 "bin": true
1172 },
1173 "ansi-regex@5.0.1": {
1174 "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
1175 },
1176 "ansi-styles@5.2.0": {
1177 "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="
1178 },
1179 "aria-query@5.3.0": {
1180 "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
1181 "dependencies": [
1182 "dequal"
1183 ]
1184 },
1185 "assertion-error@2.0.1": {
1186 "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA=="
1187 },
1188 "bail@2.0.2": {
1189 "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="
1190 },
1191 "baseline-browser-mapping@2.10.9": {
1192 "integrity": "sha512-OZd0e2mU11ClX8+IdXe3r0dbqMEznRiT4TfbhYIbcRPZkqJ7Qwer8ij3GZAmLsRKa+II9V1v5czCkvmHH3XZBg==",
1193 "bin": true
1194 },
1195 "bippy@0.5.32_react@19.2.4_@types+react@19.2.14": {
1196 "integrity": "sha512-yt1mC8eReTxjfg41YBZdN4PvsDwHFWxltoiQX0Q+Htlbf41aSniopb7ECZits01HwNAvXEh69RGk/ImlswDTEw==",
1197 "dependencies": [
1198 "@types/react-reconciler",
1199 "react"
1200 ]
1201 },
1202 "browserslist@4.28.1": {
1203 "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==",
1204 "dependencies": [
1205 "baseline-browser-mapping",
1206 "caniuse-lite",
1207 "electron-to-chromium",
1208 "node-releases",
1209 "update-browserslist-db"
1210 ],
1211 "bin": true
1212 },
1213 "caniuse-lite@1.0.30001780": {
1214 "integrity": "sha512-llngX0E7nQci5BPJDqoZSbuZ5Bcs9F5db7EtgfwBerX9XGtkkiO4NwfDDIRzHTTwcYC8vC7bmeUEPGrKlR/TkQ=="
1215 },
1216 "ccount@2.0.1": {
1217 "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="
1218 },
1219 "chai@6.2.2": {
1220 "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg=="
1221 },
1222 "character-entities-html4@2.1.0": {
1223 "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA=="
1224 },
1225 "character-entities-legacy@3.0.0": {
1226 "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ=="
1227 },
1228 "character-entities@2.0.2": {
1229 "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ=="
1230 },
1231 "character-reference-invalid@2.0.1": {
1232 "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw=="
1233 },
1234 "chevrotain-allstar@0.3.1_chevrotain@11.1.2": {
1235 "integrity": "sha512-b7g+y9A0v4mxCW1qUhf3BSVPg+/NvGErk/dOkrDaHA0nQIQGAtrOjlX//9OQtRlSCy+x9rfB5N8yC71lH1nvMw==",
1236 "dependencies": [
1237 "chevrotain",
1238 "lodash-es"
1239 ]
1240 },
1241 "chevrotain@11.1.2": {
1242 "integrity": "sha512-opLQzEVriiH1uUQ4Kctsd49bRoFDXGGSC4GUqj7pGyxM3RehRhvTlZJc1FL/Flew2p5uwxa1tUDWKzI4wNM8pg==",
1243 "dependencies": [
1244 "@chevrotain/cst-dts-gen",
1245 "@chevrotain/gast",
1246 "@chevrotain/regexp-to-ast",
1247 "@chevrotain/types",
1248 "@chevrotain/utils",
1249 "lodash-es"
1250 ]
1251 },
1252 "clsx@2.1.1": {
1253 "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="
1254 },
1255 "comma-separated-tokens@2.0.3": {
1256 "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg=="
1257 },
1258 "commander@14.0.3": {
1259 "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="
1260 },
1261 "commander@7.2.0": {
1262 "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="
1263 },
1264 "commander@8.3.0": {
1265 "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww=="
1266 },
1267 "confbox@0.1.8": {
1268 "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="
1269 },
1270 "convert-source-map@2.0.0": {
1271 "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="
1272 },
1273 "cose-base@1.0.3": {
1274 "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==",
1275 "dependencies": [
1276 "layout-base@1.0.2"
1277 ]
1278 },
1279 "cose-base@2.2.0": {
1280 "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==",
1281 "dependencies": [
1282 "layout-base@2.0.1"
1283 ]
1284 },
1285 "cssesc@3.0.0": {
1286 "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
1287 "bin": true
1288 },
1289 "csstype@3.2.3": {
1290 "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="
1291 },
1292 "cytoscape-cose-bilkent@4.1.0_cytoscape@3.33.1": {
1293 "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==",
1294 "dependencies": [
1295 "cose-base@1.0.3",
1296 "cytoscape"
1297 ]
1298 },
1299 "cytoscape-fcose@2.2.0_cytoscape@3.33.1": {
1300 "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==",
1301 "dependencies": [
1302 "cose-base@2.2.0",
1303 "cytoscape"
1304 ]
1305 },
1306 "cytoscape@3.33.1": {
1307 "integrity": "sha512-iJc4TwyANnOGR1OmWhsS9ayRS3s+XQ185FmuHObThD+5AeJCakAAbWv8KimMTt08xCCLNgneQwFp+JRJOr9qGQ=="
1308 },
1309 "d3-array@2.12.1": {
1310 "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==",
1311 "dependencies": [
1312 "internmap"
1313 ]
1314 },
1315 "d3-array@3.2.4": {
1316 "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==",
1317 "dependencies": [
1318 "internmap"
1319 ]
1320 },
1321 "d3-axis@3.0.0": {
1322 "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw=="
1323 },
1324 "d3-brush@3.0.0_d3-selection@3.0.0": {
1325 "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==",
1326 "dependencies": [
1327 "d3-dispatch",
1328 "d3-drag",
1329 "d3-interpolate",
1330 "d3-selection",
1331 "d3-transition"
1332 ]
1333 },
1334 "d3-chord@3.0.1": {
1335 "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==",
1336 "dependencies": [
1337 "d3-path@3.1.0"
1338 ]
1339 },
1340 "d3-color@3.1.0": {
1341 "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA=="
1342 },
1343 "d3-contour@4.0.2": {
1344 "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==",
1345 "dependencies": [
1346 "d3-array@3.2.4"
1347 ]
1348 },
1349 "d3-delaunay@6.0.4": {
1350 "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==",
1351 "dependencies": [
1352 "delaunator"
1353 ]
1354 },
1355 "d3-dispatch@3.0.1": {
1356 "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg=="
1357 },
1358 "d3-drag@3.0.0": {
1359 "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==",
1360 "dependencies": [
1361 "d3-dispatch",
1362 "d3-selection"
1363 ]
1364 },
1365 "d3-dsv@3.0.1": {
1366 "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==",
1367 "dependencies": [
1368 "commander@7.2.0",
1369 "iconv-lite",
1370 "rw"
1371 ],
1372 "bin": true
1373 },
1374 "d3-ease@3.0.1": {
1375 "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w=="
1376 },
1377 "d3-fetch@3.0.1": {
1378 "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==",
1379 "dependencies": [
1380 "d3-dsv"
1381 ]
1382 },
1383 "d3-force@3.0.0": {
1384 "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==",
1385 "dependencies": [
1386 "d3-dispatch",
1387 "d3-quadtree",
1388 "d3-timer"
1389 ]
1390 },
1391 "d3-format@3.1.2": {
1392 "integrity": "sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg=="
1393 },
1394 "d3-geo@3.1.1": {
1395 "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==",
1396 "dependencies": [
1397 "d3-array@3.2.4"
1398 ]
1399 },
1400 "d3-hierarchy@3.1.2": {
1401 "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA=="
1402 },
1403 "d3-interpolate@3.0.1": {
1404 "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
1405 "dependencies": [
1406 "d3-color"
1407 ]
1408 },
1409 "d3-path@1.0.9": {
1410 "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg=="
1411 },
1412 "d3-path@3.1.0": {
1413 "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ=="
1414 },
1415 "d3-polygon@3.0.1": {
1416 "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg=="
1417 },
1418 "d3-quadtree@3.0.1": {
1419 "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw=="
1420 },
1421 "d3-random@3.0.1": {
1422 "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ=="
1423 },
1424 "d3-sankey@0.12.3": {
1425 "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==",
1426 "dependencies": [
1427 "d3-array@2.12.1",
1428 "d3-shape@1.3.7"
1429 ]
1430 },
1431 "d3-scale-chromatic@3.1.0": {
1432 "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==",
1433 "dependencies": [
1434 "d3-color",
1435 "d3-interpolate"
1436 ]
1437 },
1438 "d3-scale@4.0.2": {
1439 "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
1440 "dependencies": [
1441 "d3-array@3.2.4",
1442 "d3-format",
1443 "d3-interpolate",
1444 "d3-time",
1445 "d3-time-format"
1446 ]
1447 },
1448 "d3-selection@3.0.0": {
1449 "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ=="
1450 },
1451 "d3-shape@1.3.7": {
1452 "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==",
1453 "dependencies": [
1454 "d3-path@1.0.9"
1455 ]
1456 },
1457 "d3-shape@3.2.0": {
1458 "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==",
1459 "dependencies": [
1460 "d3-path@3.1.0"
1461 ]
1462 },
1463 "d3-time-format@4.1.0": {
1464 "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
1465 "dependencies": [
1466 "d3-time"
1467 ]
1468 },
1469 "d3-time@3.1.0": {
1470 "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==",
1471 "dependencies": [
1472 "d3-array@3.2.4"
1473 ]
1474 },
1475 "d3-timer@3.0.1": {
1476 "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA=="
1477 },
1478 "d3-transition@3.0.1_d3-selection@3.0.0": {
1479 "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==",
1480 "dependencies": [
1481 "d3-color",
1482 "d3-dispatch",
1483 "d3-ease",
1484 "d3-interpolate",
1485 "d3-selection",
1486 "d3-timer"
1487 ]
1488 },
1489 "d3-zoom@3.0.0_d3-selection@3.0.0": {
1490 "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==",
1491 "dependencies": [
1492 "d3-dispatch",
1493 "d3-drag",
1494 "d3-interpolate",
1495 "d3-selection",
1496 "d3-transition"
1497 ]
1498 },
1499 "d3@7.9.0_d3-selection@3.0.0": {
1500 "integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==",
1501 "dependencies": [
1502 "d3-array@3.2.4",
1503 "d3-axis",
1504 "d3-brush",
1505 "d3-chord",
1506 "d3-color",
1507 "d3-contour",
1508 "d3-delaunay",
1509 "d3-dispatch",
1510 "d3-drag",
1511 "d3-dsv",
1512 "d3-ease",
1513 "d3-fetch",
1514 "d3-force",
1515 "d3-format",
1516 "d3-geo",
1517 "d3-hierarchy",
1518 "d3-interpolate",
1519 "d3-path@3.1.0",
1520 "d3-polygon",
1521 "d3-quadtree",
1522 "d3-random",
1523 "d3-scale",
1524 "d3-scale-chromatic",
1525 "d3-selection",
1526 "d3-shape@3.2.0",
1527 "d3-time",
1528 "d3-time-format",
1529 "d3-timer",
1530 "d3-transition",
1531 "d3-zoom"
1532 ]
1533 },
1534 "dagre-d3-es@7.0.14": {
1535 "integrity": "sha512-P4rFMVq9ESWqmOgK+dlXvOtLwYg0i7u0HBGJER0LZDJT2VHIPAMZ/riPxqJceWMStH5+E61QxFra9kIS3AqdMg==",
1536 "dependencies": [
1537 "d3",
1538 "lodash-es"
1539 ]
1540 },
1541 "dayjs@1.11.20": {
1542 "integrity": "sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ=="
1543 },
1544 "debug@4.4.3": {
1545 "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
1546 "dependencies": [
1547 "ms"
1548 ]
1549 },
1550 "decode-named-character-reference@1.3.0": {
1551 "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==",
1552 "dependencies": [
1553 "character-entities"
1554 ]
1555 },
1556 "delaunator@5.0.1": {
1557 "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==",
1558 "dependencies": [
1559 "robust-predicates"
1560 ]
1561 },
1562 "dequal@2.0.3": {
1563 "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="
1564 },
1565 "detect-libc@2.1.2": {
1566 "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="
1567 },
1568 "devlop@1.1.0": {
1569 "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==",
1570 "dependencies": [
1571 "dequal"
1572 ]
1573 },
1574 "dom-accessibility-api@0.5.16": {
1575 "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg=="
1576 },
1577 "dompurify@3.3.3": {
1578 "integrity": "sha512-Oj6pzI2+RqBfFG+qOaOLbFXLQ90ARpcGG6UePL82bJLtdsa6CYJD7nmiU8MW9nQNOtCHV3lZ/Bzq1X0QYbBZCA==",
1579 "optionalDependencies": [
1580 "@types/trusted-types"
1581 ]
1582 },
1583 "electron-to-chromium@1.5.321": {
1584 "integrity": "sha512-L2C7Q279W2D/J4PLZLk7sebOILDSWos7bMsMNN06rK482umHUrh/3lM8G7IlHFOYip2oAg5nha1rCMxr/rs6ZQ=="
1585 },
1586 "enhanced-resolve@5.20.1": {
1587 "integrity": "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==",
1588 "dependencies": [
1589 "graceful-fs",
1590 "tapable"
1591 ]
1592 },
1593 "entities@6.0.1": {
1594 "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="
1595 },
1596 "entities@7.0.1": {
1597 "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA=="
1598 },
1599 "es-module-lexer@2.0.0": {
1600 "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw=="
1601 },
1602 "esbuild@0.25.12": {
1603 "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==",
1604 "optionalDependencies": [
1605 "@esbuild/aix-ppc64",
1606 "@esbuild/android-arm",
1607 "@esbuild/android-arm64",
1608 "@esbuild/android-x64",
1609 "@esbuild/darwin-arm64",
1610 "@esbuild/darwin-x64",
1611 "@esbuild/freebsd-arm64",
1612 "@esbuild/freebsd-x64",
1613 "@esbuild/linux-arm",
1614 "@esbuild/linux-arm64",
1615 "@esbuild/linux-ia32",
1616 "@esbuild/linux-loong64",
1617 "@esbuild/linux-mips64el",
1618 "@esbuild/linux-ppc64",
1619 "@esbuild/linux-riscv64",
1620 "@esbuild/linux-s390x",
1621 "@esbuild/linux-x64",
1622 "@esbuild/netbsd-arm64",
1623 "@esbuild/netbsd-x64",
1624 "@esbuild/openbsd-arm64",
1625 "@esbuild/openbsd-x64",
1626 "@esbuild/openharmony-arm64",
1627 "@esbuild/sunos-x64",
1628 "@esbuild/win32-arm64",
1629 "@esbuild/win32-ia32",
1630 "@esbuild/win32-x64"
1631 ],
1632 "scripts": true,
1633 "bin": true
1634 },
1635 "escalade@3.2.0": {
1636 "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="
1637 },
1638 "escape-string-regexp@5.0.0": {
1639 "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="
1640 },
1641 "estree-util-is-identifier-name@3.0.0": {
1642 "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg=="
1643 },
1644 "estree-walker@2.0.2": {
1645 "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
1646 },
1647 "estree-walker@3.0.3": {
1648 "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
1649 "dependencies": [
1650 "@types/estree"
1651 ]
1652 },
1653 "expect-type@1.3.0": {
1654 "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA=="
1655 },
1656 "extend@3.0.2": {
1657 "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
1658 },
1659 "fdir@6.5.0_picomatch@4.0.3": {
1660 "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
1661 "dependencies": [
1662 "picomatch"
1663 ],
1664 "optionalPeers": [
1665 "picomatch"
1666 ]
1667 },
1668 "fsevents@2.3.3": {
1669 "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
1670 "os": ["darwin"],
1671 "scripts": true
1672 },
1673 "gensync@1.0.0-beta.2": {
1674 "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="
1675 },
1676 "graceful-fs@4.2.11": {
1677 "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
1678 },
1679 "hachure-fill@0.5.2": {
1680 "integrity": "sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg=="
1681 },
1682 "happy-dom@20.8.4": {
1683 "integrity": "sha512-GKhjq4OQCYB4VLFBzv8mmccUadwlAusOZOI7hC1D9xDIT5HhzkJK17c4el2f6R6C715P9xB4uiMxeKUa2nHMwQ==",
1684 "dependencies": [
1685 "@types/node@25.5.0",
1686 "@types/whatwg-mimetype",
1687 "@types/ws",
1688 "entities@7.0.1",
1689 "whatwg-mimetype",
1690 "ws"
1691 ]
1692 },
1693 "hast-util-from-parse5@8.0.3": {
1694 "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==",
1695 "dependencies": [
1696 "@types/hast",
1697 "@types/unist@3.0.3",
1698 "devlop",
1699 "hastscript",
1700 "property-information",
1701 "vfile",
1702 "vfile-location",
1703 "web-namespaces"
1704 ]
1705 },
1706 "hast-util-parse-selector@4.0.0": {
1707 "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==",
1708 "dependencies": [
1709 "@types/hast"
1710 ]
1711 },
1712 "hast-util-raw@9.1.0": {
1713 "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==",
1714 "dependencies": [
1715 "@types/hast",
1716 "@types/unist@3.0.3",
1717 "@ungap/structured-clone",
1718 "hast-util-from-parse5",
1719 "hast-util-to-parse5",
1720 "html-void-elements",
1721 "mdast-util-to-hast",
1722 "parse5",
1723 "unist-util-position",
1724 "unist-util-visit",
1725 "vfile",
1726 "web-namespaces",
1727 "zwitch"
1728 ]
1729 },
1730 "hast-util-sanitize@5.0.2": {
1731 "integrity": "sha512-3yTWghByc50aGS7JlGhk61SPenfE/p1oaFeNwkOOyrscaOkMGrcW9+Cy/QAIOBpZxP1yqDIzFMR0+Np0i0+usg==",
1732 "dependencies": [
1733 "@types/hast",
1734 "@ungap/structured-clone",
1735 "unist-util-position"
1736 ]
1737 },
1738 "hast-util-to-jsx-runtime@2.3.6": {
1739 "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==",
1740 "dependencies": [
1741 "@types/estree",
1742 "@types/hast",
1743 "@types/unist@3.0.3",
1744 "comma-separated-tokens",
1745 "devlop",
1746 "estree-util-is-identifier-name",
1747 "hast-util-whitespace",
1748 "mdast-util-mdx-expression",
1749 "mdast-util-mdx-jsx",
1750 "mdast-util-mdxjs-esm",
1751 "property-information",
1752 "space-separated-tokens",
1753 "style-to-js",
1754 "unist-util-position",
1755 "vfile-message"
1756 ]
1757 },
1758 "hast-util-to-parse5@8.0.1": {
1759 "integrity": "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==",
1760 "dependencies": [
1761 "@types/hast",
1762 "comma-separated-tokens",
1763 "devlop",
1764 "property-information",
1765 "space-separated-tokens",
1766 "web-namespaces",
1767 "zwitch"
1768 ]
1769 },
1770 "hast-util-whitespace@3.0.0": {
1771 "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==",
1772 "dependencies": [
1773 "@types/hast"
1774 ]
1775 },
1776 "hastscript@9.0.1": {
1777 "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==",
1778 "dependencies": [
1779 "@types/hast",
1780 "comma-separated-tokens",
1781 "hast-util-parse-selector",
1782 "property-information",
1783 "space-separated-tokens"
1784 ]
1785 },
1786 "html-url-attributes@3.0.1": {
1787 "integrity": "sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ=="
1788 },
1789 "html-void-elements@3.0.0": {
1790 "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg=="
1791 },
1792 "iconv-lite@0.6.3": {
1793 "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
1794 "dependencies": [
1795 "safer-buffer"
1796 ]
1797 },
1798 "inline-style-parser@0.2.7": {
1799 "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA=="
1800 },
1801 "internmap@1.0.1": {
1802 "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw=="
1803 },
1804 "is-alphabetical@2.0.1": {
1805 "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ=="
1806 },
1807 "is-alphanumerical@2.0.1": {
1808 "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==",
1809 "dependencies": [
1810 "is-alphabetical",
1811 "is-decimal"
1812 ]
1813 },
1814 "is-decimal@2.0.1": {
1815 "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A=="
1816 },
1817 "is-hexadecimal@2.0.1": {
1818 "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg=="
1819 },
1820 "is-plain-obj@4.1.0": {
1821 "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="
1822 },
1823 "jiti@2.6.1": {
1824 "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==",
1825 "bin": true
1826 },
1827 "js-tokens@4.0.0": {
1828 "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
1829 },
1830 "jsesc@3.1.0": {
1831 "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
1832 "bin": true
1833 },
1834 "json5@2.2.3": {
1835 "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
1836 "bin": true
1837 },
1838 "katex@0.16.39": {
1839 "integrity": "sha512-FR2f6y85+81ZLO0GPhyQ+EJl/E5ILNWltJhpAeOTzRny952Z13x2867lTFDmvMZix//Ux3CuMQ2VkLXRbUwOFg==",
1840 "dependencies": [
1841 "commander@8.3.0"
1842 ],
1843 "bin": true
1844 },
1845 "khroma@2.1.0": {
1846 "integrity": "sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw=="
1847 },
1848 "kleur@3.0.3": {
1849 "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="
1850 },
1851 "langium@4.2.1_chevrotain@11.1.2": {
1852 "integrity": "sha512-zu9QWmjpzJcomzdJQAHgDVhLGq5bLosVak1KVa40NzQHXfqr4eAHupvnPOVXEoLkg6Ocefvf/93d//SB7du4YQ==",
1853 "dependencies": [
1854 "chevrotain",
1855 "chevrotain-allstar",
1856 "vscode-languageserver",
1857 "vscode-languageserver-textdocument",
1858 "vscode-uri"
1859 ]
1860 },
1861 "layout-base@1.0.2": {
1862 "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg=="
1863 },
1864 "layout-base@2.0.1": {
1865 "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg=="
1866 },
1867 "lightningcss-android-arm64@1.32.0": {
1868 "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==",
1869 "os": ["android"],
1870 "cpu": ["arm64"]
1871 },
1872 "lightningcss-darwin-arm64@1.32.0": {
1873 "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==",
1874 "os": ["darwin"],
1875 "cpu": ["arm64"]
1876 },
1877 "lightningcss-darwin-x64@1.32.0": {
1878 "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==",
1879 "os": ["darwin"],
1880 "cpu": ["x64"]
1881 },
1882 "lightningcss-freebsd-x64@1.32.0": {
1883 "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==",
1884 "os": ["freebsd"],
1885 "cpu": ["x64"]
1886 },
1887 "lightningcss-linux-arm-gnueabihf@1.32.0": {
1888 "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==",
1889 "os": ["linux"],
1890 "cpu": ["arm"]
1891 },
1892 "lightningcss-linux-arm64-gnu@1.32.0": {
1893 "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==",
1894 "os": ["linux"],
1895 "cpu": ["arm64"]
1896 },
1897 "lightningcss-linux-arm64-musl@1.32.0": {
1898 "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==",
1899 "os": ["linux"],
1900 "cpu": ["arm64"]
1901 },
1902 "lightningcss-linux-x64-gnu@1.32.0": {
1903 "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==",
1904 "os": ["linux"],
1905 "cpu": ["x64"]
1906 },
1907 "lightningcss-linux-x64-musl@1.32.0": {
1908 "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==",
1909 "os": ["linux"],
1910 "cpu": ["x64"]
1911 },
1912 "lightningcss-win32-arm64-msvc@1.32.0": {
1913 "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==",
1914 "os": ["win32"],
1915 "cpu": ["arm64"]
1916 },
1917 "lightningcss-win32-x64-msvc@1.32.0": {
1918 "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==",
1919 "os": ["win32"],
1920 "cpu": ["x64"]
1921 },
1922 "lightningcss@1.32.0": {
1923 "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==",
1924 "dependencies": [
1925 "detect-libc"
1926 ],
1927 "optionalDependencies": [
1928 "lightningcss-android-arm64",
1929 "lightningcss-darwin-arm64",
1930 "lightningcss-darwin-x64",
1931 "lightningcss-freebsd-x64",
1932 "lightningcss-linux-arm-gnueabihf",
1933 "lightningcss-linux-arm64-gnu",
1934 "lightningcss-linux-arm64-musl",
1935 "lightningcss-linux-x64-gnu",
1936 "lightningcss-linux-x64-musl",
1937 "lightningcss-win32-arm64-msvc",
1938 "lightningcss-win32-x64-msvc"
1939 ]
1940 },
1941 "lodash-es@4.17.23": {
1942 "integrity": "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg=="
1943 },
1944 "longest-streak@3.1.0": {
1945 "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g=="
1946 },
1947 "lru-cache@5.1.1": {
1948 "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
1949 "dependencies": [
1950 "yallist"
1951 ]
1952 },
1953 "lz-string@1.5.0": {
1954 "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==",
1955 "bin": true
1956 },
1957 "magic-string@0.30.21": {
1958 "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
1959 "dependencies": [
1960 "@jridgewell/sourcemap-codec"
1961 ]
1962 },
1963 "markdown-table@3.0.4": {
1964 "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw=="
1965 },
1966 "marked@16.4.2": {
1967 "integrity": "sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA==",
1968 "bin": true
1969 },
1970 "marked@17.0.4": {
1971 "integrity": "sha512-NOmVMM+KAokHMvjWmC5N/ZOvgmSWuqJB8FoYI019j4ogb/PeRMKoKIjReZ2w3376kkA8dSJIP8uD993Kxc0iRQ==",
1972 "bin": true
1973 },
1974 "mdast-util-find-and-replace@3.0.2": {
1975 "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==",
1976 "dependencies": [
1977 "@types/mdast",
1978 "escape-string-regexp",
1979 "unist-util-is",
1980 "unist-util-visit-parents"
1981 ]
1982 },
1983 "mdast-util-from-markdown@2.0.3": {
1984 "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==",
1985 "dependencies": [
1986 "@types/mdast",
1987 "@types/unist@3.0.3",
1988 "decode-named-character-reference",
1989 "devlop",
1990 "mdast-util-to-string",
1991 "micromark",
1992 "micromark-util-decode-numeric-character-reference",
1993 "micromark-util-decode-string",
1994 "micromark-util-normalize-identifier",
1995 "micromark-util-symbol",
1996 "micromark-util-types",
1997 "unist-util-stringify-position"
1998 ]
1999 },
2000 "mdast-util-gfm-autolink-literal@2.0.1": {
2001 "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==",
2002 "dependencies": [
2003 "@types/mdast",
2004 "ccount",
2005 "devlop",
2006 "mdast-util-find-and-replace",
2007 "micromark-util-character"
2008 ]
2009 },
2010 "mdast-util-gfm-footnote@2.1.0": {
2011 "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==",
2012 "dependencies": [
2013 "@types/mdast",
2014 "devlop",
2015 "mdast-util-from-markdown",
2016 "mdast-util-to-markdown",
2017 "micromark-util-normalize-identifier"
2018 ]
2019 },
2020 "mdast-util-gfm-strikethrough@2.0.0": {
2021 "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==",
2022 "dependencies": [
2023 "@types/mdast",
2024 "mdast-util-from-markdown",
2025 "mdast-util-to-markdown"
2026 ]
2027 },
2028 "mdast-util-gfm-table@2.0.0": {
2029 "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==",
2030 "dependencies": [
2031 "@types/mdast",
2032 "devlop",
2033 "markdown-table",
2034 "mdast-util-from-markdown",
2035 "mdast-util-to-markdown"
2036 ]
2037 },
2038 "mdast-util-gfm-task-list-item@2.0.0": {
2039 "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==",
2040 "dependencies": [
2041 "@types/mdast",
2042 "devlop",
2043 "mdast-util-from-markdown",
2044 "mdast-util-to-markdown"
2045 ]
2046 },
2047 "mdast-util-gfm@3.1.0": {
2048 "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==",
2049 "dependencies": [
2050 "mdast-util-from-markdown",
2051 "mdast-util-gfm-autolink-literal",
2052 "mdast-util-gfm-footnote",
2053 "mdast-util-gfm-strikethrough",
2054 "mdast-util-gfm-table",
2055 "mdast-util-gfm-task-list-item",
2056 "mdast-util-to-markdown"
2057 ]
2058 },
2059 "mdast-util-mdx-expression@2.0.1": {
2060 "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==",
2061 "dependencies": [
2062 "@types/estree-jsx",
2063 "@types/hast",
2064 "@types/mdast",
2065 "devlop",
2066 "mdast-util-from-markdown",
2067 "mdast-util-to-markdown"
2068 ]
2069 },
2070 "mdast-util-mdx-jsx@3.2.0": {
2071 "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==",
2072 "dependencies": [
2073 "@types/estree-jsx",
2074 "@types/hast",
2075 "@types/mdast",
2076 "@types/unist@3.0.3",
2077 "ccount",
2078 "devlop",
2079 "mdast-util-from-markdown",
2080 "mdast-util-to-markdown",
2081 "parse-entities",
2082 "stringify-entities",
2083 "unist-util-stringify-position",
2084 "vfile-message"
2085 ]
2086 },
2087 "mdast-util-mdxjs-esm@2.0.1": {
2088 "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==",
2089 "dependencies": [
2090 "@types/estree-jsx",
2091 "@types/hast",
2092 "@types/mdast",
2093 "devlop",
2094 "mdast-util-from-markdown",
2095 "mdast-util-to-markdown"
2096 ]
2097 },
2098 "mdast-util-phrasing@4.1.0": {
2099 "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==",
2100 "dependencies": [
2101 "@types/mdast",
2102 "unist-util-is"
2103 ]
2104 },
2105 "mdast-util-to-hast@13.2.1": {
2106 "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==",
2107 "dependencies": [
2108 "@types/hast",
2109 "@types/mdast",
2110 "@ungap/structured-clone",
2111 "devlop",
2112 "micromark-util-sanitize-uri",
2113 "trim-lines",
2114 "unist-util-position",
2115 "unist-util-visit",
2116 "vfile"
2117 ]
2118 },
2119 "mdast-util-to-markdown@2.1.2": {
2120 "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==",
2121 "dependencies": [
2122 "@types/mdast",
2123 "@types/unist@3.0.3",
2124 "longest-streak",
2125 "mdast-util-phrasing",
2126 "mdast-util-to-string",
2127 "micromark-util-classify-character",
2128 "micromark-util-decode-string",
2129 "unist-util-visit",
2130 "zwitch"
2131 ]
2132 },
2133 "mdast-util-to-string@4.0.0": {
2134 "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==",
2135 "dependencies": [
2136 "@types/mdast"
2137 ]
2138 },
2139 "mermaid@11.13.0_cytoscape@3.33.1": {
2140 "integrity": "sha512-fEnci+Immw6lKMFI8sqzjlATTyjLkRa6axrEgLV2yHTfv8r+h1wjFbV6xeRtd4rUV1cS4EpR9rwp3Rci7TRWDw==",
2141 "dependencies": [
2142 "@braintree/sanitize-url",
2143 "@iconify/utils",
2144 "@mermaid-js/parser",
2145 "@types/d3",
2146 "@upsetjs/venn.js",
2147 "cytoscape",
2148 "cytoscape-cose-bilkent",
2149 "cytoscape-fcose",
2150 "d3",
2151 "d3-sankey",
2152 "dagre-d3-es",
2153 "dayjs",
2154 "dompurify",
2155 "katex",
2156 "khroma",
2157 "lodash-es",
2158 "marked@16.4.2",
2159 "roughjs",
2160 "stylis",
2161 "ts-dedent",
2162 "uuid"
2163 ]
2164 },
2165 "micromark-core-commonmark@2.0.3": {
2166 "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==",
2167 "dependencies": [
2168 "decode-named-character-reference",
2169 "devlop",
2170 "micromark-factory-destination",
2171 "micromark-factory-label",
2172 "micromark-factory-space",
2173 "micromark-factory-title",
2174 "micromark-factory-whitespace",
2175 "micromark-util-character",
2176 "micromark-util-chunked",
2177 "micromark-util-classify-character",
2178 "micromark-util-html-tag-name",
2179 "micromark-util-normalize-identifier",
2180 "micromark-util-resolve-all",
2181 "micromark-util-subtokenize",
2182 "micromark-util-symbol",
2183 "micromark-util-types"
2184 ]
2185 },
2186 "micromark-extension-gfm-autolink-literal@2.1.0": {
2187 "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==",
2188 "dependencies": [
2189 "micromark-util-character",
2190 "micromark-util-sanitize-uri",
2191 "micromark-util-symbol",
2192 "micromark-util-types"
2193 ]
2194 },
2195 "micromark-extension-gfm-footnote@2.1.0": {
2196 "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==",
2197 "dependencies": [
2198 "devlop",
2199 "micromark-core-commonmark",
2200 "micromark-factory-space",
2201 "micromark-util-character",
2202 "micromark-util-normalize-identifier",
2203 "micromark-util-sanitize-uri",
2204 "micromark-util-symbol",
2205 "micromark-util-types"
2206 ]
2207 },
2208 "micromark-extension-gfm-strikethrough@2.1.0": {
2209 "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==",
2210 "dependencies": [
2211 "devlop",
2212 "micromark-util-chunked",
2213 "micromark-util-classify-character",
2214 "micromark-util-resolve-all",
2215 "micromark-util-symbol",
2216 "micromark-util-types"
2217 ]
2218 },
2219 "micromark-extension-gfm-table@2.1.1": {
2220 "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==",
2221 "dependencies": [
2222 "devlop",
2223 "micromark-factory-space",
2224 "micromark-util-character",
2225 "micromark-util-symbol",
2226 "micromark-util-types"
2227 ]
2228 },
2229 "micromark-extension-gfm-tagfilter@2.0.0": {
2230 "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==",
2231 "dependencies": [
2232 "micromark-util-types"
2233 ]
2234 },
2235 "micromark-extension-gfm-task-list-item@2.1.0": {
2236 "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==",
2237 "dependencies": [
2238 "devlop",
2239 "micromark-factory-space",
2240 "micromark-util-character",
2241 "micromark-util-symbol",
2242 "micromark-util-types"
2243 ]
2244 },
2245 "micromark-extension-gfm@3.0.0": {
2246 "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==",
2247 "dependencies": [
2248 "micromark-extension-gfm-autolink-literal",
2249 "micromark-extension-gfm-footnote",
2250 "micromark-extension-gfm-strikethrough",
2251 "micromark-extension-gfm-table",
2252 "micromark-extension-gfm-tagfilter",
2253 "micromark-extension-gfm-task-list-item",
2254 "micromark-util-combine-extensions",
2255 "micromark-util-types"
2256 ]
2257 },
2258 "micromark-factory-destination@2.0.1": {
2259 "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==",
2260 "dependencies": [
2261 "micromark-util-character",
2262 "micromark-util-symbol",
2263 "micromark-util-types"
2264 ]
2265 },
2266 "micromark-factory-label@2.0.1": {
2267 "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==",
2268 "dependencies": [
2269 "devlop",
2270 "micromark-util-character",
2271 "micromark-util-symbol",
2272 "micromark-util-types"
2273 ]
2274 },
2275 "micromark-factory-space@2.0.1": {
2276 "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==",
2277 "dependencies": [
2278 "micromark-util-character",
2279 "micromark-util-types"
2280 ]
2281 },
2282 "micromark-factory-title@2.0.1": {
2283 "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==",
2284 "dependencies": [
2285 "micromark-factory-space",
2286 "micromark-util-character",
2287 "micromark-util-symbol",
2288 "micromark-util-types"
2289 ]
2290 },
2291 "micromark-factory-whitespace@2.0.1": {
2292 "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==",
2293 "dependencies": [
2294 "micromark-factory-space",
2295 "micromark-util-character",
2296 "micromark-util-symbol",
2297 "micromark-util-types"
2298 ]
2299 },
2300 "micromark-util-character@2.1.1": {
2301 "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==",
2302 "dependencies": [
2303 "micromark-util-symbol",
2304 "micromark-util-types"
2305 ]
2306 },
2307 "micromark-util-chunked@2.0.1": {
2308 "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==",
2309 "dependencies": [
2310 "micromark-util-symbol"
2311 ]
2312 },
2313 "micromark-util-classify-character@2.0.1": {
2314 "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==",
2315 "dependencies": [
2316 "micromark-util-character",
2317 "micromark-util-symbol",
2318 "micromark-util-types"
2319 ]
2320 },
2321 "micromark-util-combine-extensions@2.0.1": {
2322 "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==",
2323 "dependencies": [
2324 "micromark-util-chunked",
2325 "micromark-util-types"
2326 ]
2327 },
2328 "micromark-util-decode-numeric-character-reference@2.0.2": {
2329 "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==",
2330 "dependencies": [
2331 "micromark-util-symbol"
2332 ]
2333 },
2334 "micromark-util-decode-string@2.0.1": {
2335 "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==",
2336 "dependencies": [
2337 "decode-named-character-reference",
2338 "micromark-util-character",
2339 "micromark-util-decode-numeric-character-reference",
2340 "micromark-util-symbol"
2341 ]
2342 },
2343 "micromark-util-encode@2.0.1": {
2344 "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw=="
2345 },
2346 "micromark-util-html-tag-name@2.0.1": {
2347 "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA=="
2348 },
2349 "micromark-util-normalize-identifier@2.0.1": {
2350 "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==",
2351 "dependencies": [
2352 "micromark-util-symbol"
2353 ]
2354 },
2355 "micromark-util-resolve-all@2.0.1": {
2356 "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==",
2357 "dependencies": [
2358 "micromark-util-types"
2359 ]
2360 },
2361 "micromark-util-sanitize-uri@2.0.1": {
2362 "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==",
2363 "dependencies": [
2364 "micromark-util-character",
2365 "micromark-util-encode",
2366 "micromark-util-symbol"
2367 ]
2368 },
2369 "micromark-util-subtokenize@2.1.0": {
2370 "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==",
2371 "dependencies": [
2372 "devlop",
2373 "micromark-util-chunked",
2374 "micromark-util-symbol",
2375 "micromark-util-types"
2376 ]
2377 },
2378 "micromark-util-symbol@2.0.1": {
2379 "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="
2380 },
2381 "micromark-util-types@2.0.2": {
2382 "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA=="
2383 },
2384 "micromark@4.0.2": {
2385 "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==",
2386 "dependencies": [
2387 "@types/debug",
2388 "debug",
2389 "decode-named-character-reference",
2390 "devlop",
2391 "micromark-core-commonmark",
2392 "micromark-factory-space",
2393 "micromark-util-character",
2394 "micromark-util-chunked",
2395 "micromark-util-combine-extensions",
2396 "micromark-util-decode-numeric-character-reference",
2397 "micromark-util-encode",
2398 "micromark-util-normalize-identifier",
2399 "micromark-util-resolve-all",
2400 "micromark-util-sanitize-uri",
2401 "micromark-util-subtokenize",
2402 "micromark-util-symbol",
2403 "micromark-util-types"
2404 ]
2405 },
2406 "mlly@1.8.2": {
2407 "integrity": "sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==",
2408 "dependencies": [
2409 "acorn",
2410 "pathe",
2411 "pkg-types",
2412 "ufo"
2413 ]
2414 },
2415 "ms@2.1.3": {
2416 "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
2417 },
2418 "nanoid@3.3.11": {
2419 "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
2420 "bin": true
2421 },
2422 "node-releases@2.0.36": {
2423 "integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA=="
2424 },
2425 "obug@2.1.1": {
2426 "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ=="
2427 },
2428 "oxfmt@0.40.0": {
2429 "integrity": "sha512-g0C3I7xUj4b4DcagevM9kgH6+pUHytikxUcn3/VUkvzTNaaXBeyZqb7IBsHwojeXm4mTBEC/aBjBTMVUkZwWUQ==",
2430 "dependencies": [
2431 "tinypool"
2432 ],
2433 "optionalDependencies": [
2434 "@oxfmt/binding-android-arm-eabi",
2435 "@oxfmt/binding-android-arm64",
2436 "@oxfmt/binding-darwin-arm64",
2437 "@oxfmt/binding-darwin-x64",
2438 "@oxfmt/binding-freebsd-x64",
2439 "@oxfmt/binding-linux-arm-gnueabihf",
2440 "@oxfmt/binding-linux-arm-musleabihf",
2441 "@oxfmt/binding-linux-arm64-gnu",
2442 "@oxfmt/binding-linux-arm64-musl",
2443 "@oxfmt/binding-linux-ppc64-gnu",
2444 "@oxfmt/binding-linux-riscv64-gnu",
2445 "@oxfmt/binding-linux-riscv64-musl",
2446 "@oxfmt/binding-linux-s390x-gnu",
2447 "@oxfmt/binding-linux-x64-gnu",
2448 "@oxfmt/binding-linux-x64-musl",
2449 "@oxfmt/binding-openharmony-arm64",
2450 "@oxfmt/binding-win32-arm64-msvc",
2451 "@oxfmt/binding-win32-ia32-msvc",
2452 "@oxfmt/binding-win32-x64-msvc"
2453 ],
2454 "bin": true
2455 },
2456 "oxlint@1.56.0": {
2457 "integrity": "sha512-Q+5Mj5PVaH/R6/fhMMFzw4dT+KPB+kQW4kaL8FOIq7tfhlnEVp6+3lcWqFruuTNlUo9srZUW3qH7Id4pskeR6g==",
2458 "optionalDependencies": [
2459 "@oxlint/binding-android-arm-eabi",
2460 "@oxlint/binding-android-arm64",
2461 "@oxlint/binding-darwin-arm64",
2462 "@oxlint/binding-darwin-x64",
2463 "@oxlint/binding-freebsd-x64",
2464 "@oxlint/binding-linux-arm-gnueabihf",
2465 "@oxlint/binding-linux-arm-musleabihf",
2466 "@oxlint/binding-linux-arm64-gnu",
2467 "@oxlint/binding-linux-arm64-musl",
2468 "@oxlint/binding-linux-ppc64-gnu",
2469 "@oxlint/binding-linux-riscv64-gnu",
2470 "@oxlint/binding-linux-riscv64-musl",
2471 "@oxlint/binding-linux-s390x-gnu",
2472 "@oxlint/binding-linux-x64-gnu",
2473 "@oxlint/binding-linux-x64-musl",
2474 "@oxlint/binding-openharmony-arm64",
2475 "@oxlint/binding-win32-arm64-msvc",
2476 "@oxlint/binding-win32-ia32-msvc",
2477 "@oxlint/binding-win32-x64-msvc"
2478 ],
2479 "bin": true
2480 },
2481 "package-manager-detector@1.6.0": {
2482 "integrity": "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA=="
2483 },
2484 "parse-entities@4.0.2": {
2485 "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==",
2486 "dependencies": [
2487 "@types/unist@2.0.11",
2488 "character-entities-legacy",
2489 "character-reference-invalid",
2490 "decode-named-character-reference",
2491 "is-alphanumerical",
2492 "is-decimal",
2493 "is-hexadecimal"
2494 ]
2495 },
2496 "parse5@7.3.0": {
2497 "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==",
2498 "dependencies": [
2499 "entities@6.0.1"
2500 ]
2501 },
2502 "path-data-parser@0.1.0": {
2503 "integrity": "sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w=="
2504 },
2505 "pathe@2.0.3": {
2506 "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="
2507 },
2508 "picocolors@1.1.1": {
2509 "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
2510 },
2511 "picomatch@4.0.3": {
2512 "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="
2513 },
2514 "pkg-types@1.3.1": {
2515 "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==",
2516 "dependencies": [
2517 "confbox",
2518 "mlly",
2519 "pathe"
2520 ]
2521 },
2522 "points-on-curve@0.2.0": {
2523 "integrity": "sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A=="
2524 },
2525 "points-on-path@0.2.1": {
2526 "integrity": "sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==",
2527 "dependencies": [
2528 "path-data-parser",
2529 "points-on-curve"
2530 ]
2531 },
2532 "postcss-selector-parser@6.0.10": {
2533 "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
2534 "dependencies": [
2535 "cssesc",
2536 "util-deprecate"
2537 ]
2538 },
2539 "postcss@8.5.8": {
2540 "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==",
2541 "dependencies": [
2542 "nanoid",
2543 "picocolors",
2544 "source-map-js"
2545 ]
2546 },
2547 "preact@10.29.0": {
2548 "integrity": "sha512-wSAGyk2bYR1c7t3SZ3jHcM6xy0lcBcDel6lODcs9ME6Th++Dx2KU+6D3HD8wMMKGA8Wpw7OMd3/4RGzYRpzwRg=="
2549 },
2550 "pretty-format@27.5.1": {
2551 "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==",
2552 "dependencies": [
2553 "ansi-regex",
2554 "ansi-styles",
2555 "react-is"
2556 ]
2557 },
2558 "prompts@2.4.2": {
2559 "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
2560 "dependencies": [
2561 "kleur",
2562 "sisteransi"
2563 ]
2564 },
2565 "property-information@7.1.0": {
2566 "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ=="
2567 },
2568 "react-dom@19.2.4_react@19.2.4": {
2569 "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==",
2570 "dependencies": [
2571 "react",
2572 "scheduler"
2573 ]
2574 },
2575 "react-is@17.0.2": {
2576 "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="
2577 },
2578 "react-markdown@10.1.0_@types+react@19.2.14_react@19.2.4": {
2579 "integrity": "sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==",
2580 "dependencies": [
2581 "@types/hast",
2582 "@types/mdast",
2583 "@types/react",
2584 "devlop",
2585 "hast-util-to-jsx-runtime",
2586 "html-url-attributes",
2587 "mdast-util-to-hast",
2588 "react",
2589 "remark-parse",
2590 "remark-rehype",
2591 "unified",
2592 "unist-util-visit",
2593 "vfile"
2594 ]
2595 },
2596 "react-scan@0.5.3_react@19.2.4_react-dom@19.2.4__react@19.2.4_preact@10.29.0_@types+react@19.2.14": {
2597 "integrity": "sha512-qde9PupmUf0L3MU1H6bjmoukZNbCXdMyTEwP4Gh8RQ4rZPd2GGNBgEKWszwLm96E8k+sGtMpc0B9P0KyFDP6Bw==",
2598 "dependencies": [
2599 "@babel/core",
2600 "@babel/generator",
2601 "@babel/types",
2602 "@preact/signals",
2603 "@rollup/pluginutils",
2604 "@types/node@20.19.37",
2605 "bippy",
2606 "commander@14.0.3",
2607 "esbuild",
2608 "estree-walker@3.0.3",
2609 "picocolors",
2610 "preact",
2611 "prompts",
2612 "react",
2613 "react-dom"
2614 ],
2615 "optionalDependencies": [
2616 "unplugin"
2617 ],
2618 "bin": true
2619 },
2620 "react@19.2.4": {
2621 "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ=="
2622 },
2623 "rehype-harden@1.1.8": {
2624 "integrity": "sha512-Qn7vR1xrf6fZCrkm9TDWi/AB4ylrHy+jqsNm1EHOAmbARYA6gsnVJBq/sdBh6kmT4NEZxH5vgIjrscefJAOXcw==",
2625 "dependencies": [
2626 "unist-util-visit"
2627 ]
2628 },
2629 "rehype-raw@7.0.0": {
2630 "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==",
2631 "dependencies": [
2632 "@types/hast",
2633 "hast-util-raw",
2634 "vfile"
2635 ]
2636 },
2637 "rehype-react@8.0.0": {
2638 "integrity": "sha512-vzo0YxYbB2HE+36+9HWXVdxNoNDubx63r5LBzpxBGVWM8s9mdnMdbmuJBAX6TTyuGdZjZix6qU3GcSuKCIWivw==",
2639 "dependencies": [
2640 "@types/hast",
2641 "hast-util-to-jsx-runtime",
2642 "unified"
2643 ]
2644 },
2645 "rehype-sanitize@6.0.0": {
2646 "integrity": "sha512-CsnhKNsyI8Tub6L4sm5ZFsme4puGfc6pYylvXo1AeqaGbjOYyzNv3qZPwvs0oMJ39eryyeOdmxwUIo94IpEhqg==",
2647 "dependencies": [
2648 "@types/hast",
2649 "hast-util-sanitize"
2650 ]
2651 },
2652 "remark-gfm@4.0.1": {
2653 "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==",
2654 "dependencies": [
2655 "@types/mdast",
2656 "mdast-util-gfm",
2657 "micromark-extension-gfm",
2658 "remark-parse",
2659 "remark-stringify",
2660 "unified"
2661 ]
2662 },
2663 "remark-parse@11.0.0": {
2664 "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==",
2665 "dependencies": [
2666 "@types/mdast",
2667 "mdast-util-from-markdown",
2668 "micromark-util-types",
2669 "unified"
2670 ]
2671 },
2672 "remark-rehype@11.1.2": {
2673 "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==",
2674 "dependencies": [
2675 "@types/hast",
2676 "@types/mdast",
2677 "mdast-util-to-hast",
2678 "unified",
2679 "vfile"
2680 ]
2681 },
2682 "remark-stringify@11.0.0": {
2683 "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==",
2684 "dependencies": [
2685 "@types/mdast",
2686 "mdast-util-to-markdown",
2687 "unified"
2688 ]
2689 },
2690 "remend@1.3.0": {
2691 "integrity": "sha512-iIhggPkhW3hFImKtB10w0dz4EZbs28mV/dmbcYVonWEJ6UGHHpP+bFZnTh6GNWJONg5m+U56JrL+8IxZRdgWjw=="
2692 },
2693 "robust-predicates@3.0.2": {
2694 "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg=="
2695 },
2696 "rolldown@1.0.0-rc.10": {
2697 "integrity": "sha512-q7j6vvarRFmKpgJUT8HCAUljkgzEp4LAhPlJUvQhA5LA1SUL36s5QCysMutErzL3EbNOZOkoziSx9iZC4FddKA==",
2698 "dependencies": [
2699 "@oxc-project/types",
2700 "@rolldown/pluginutils@1.0.0-rc.10"
2701 ],
2702 "optionalDependencies": [
2703 "@rolldown/binding-android-arm64",
2704 "@rolldown/binding-darwin-arm64",
2705 "@rolldown/binding-darwin-x64",
2706 "@rolldown/binding-freebsd-x64",
2707 "@rolldown/binding-linux-arm-gnueabihf",
2708 "@rolldown/binding-linux-arm64-gnu",
2709 "@rolldown/binding-linux-arm64-musl",
2710 "@rolldown/binding-linux-ppc64-gnu",
2711 "@rolldown/binding-linux-s390x-gnu",
2712 "@rolldown/binding-linux-x64-gnu",
2713 "@rolldown/binding-linux-x64-musl",
2714 "@rolldown/binding-openharmony-arm64",
2715 "@rolldown/binding-wasm32-wasi",
2716 "@rolldown/binding-win32-arm64-msvc",
2717 "@rolldown/binding-win32-x64-msvc"
2718 ],
2719 "bin": true
2720 },
2721 "roughjs@4.6.6": {
2722 "integrity": "sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==",
2723 "dependencies": [
2724 "hachure-fill",
2725 "path-data-parser",
2726 "points-on-curve",
2727 "points-on-path"
2728 ]
2729 },
2730 "rw@1.3.3": {
2731 "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ=="
2732 },
2733 "safer-buffer@2.1.2": {
2734 "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
2735 },
2736 "scheduler@0.27.0": {
2737 "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="
2738 },
2739 "semver@6.3.1": {
2740 "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
2741 "bin": true
2742 },
2743 "siginfo@2.0.0": {
2744 "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g=="
2745 },
2746 "sisteransi@1.0.5": {
2747 "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="
2748 },
2749 "source-map-js@1.2.1": {
2750 "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="
2751 },
2752 "space-separated-tokens@2.0.2": {
2753 "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q=="
2754 },
2755 "stackback@0.0.2": {
2756 "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw=="
2757 },
2758 "std-env@4.0.0": {
2759 "integrity": "sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ=="
2760 },
2761 "streamdown@2.5.0_react@19.2.4_react-dom@19.2.4__react@19.2.4": {
2762 "integrity": "sha512-/tTnURfIOxZK/pqJAxsfCvETG/XCJHoWnk3jq9xLcuz6CSpnjjuxSRBTTL4PKGhxiZQf0lqPxGhImdpwcZ2XwA==",
2763 "dependencies": [
2764 "clsx",
2765 "hast-util-to-jsx-runtime",
2766 "html-url-attributes",
2767 "marked@17.0.4",
2768 "mermaid",
2769 "react",
2770 "react-dom",
2771 "rehype-harden",
2772 "rehype-raw",
2773 "rehype-sanitize",
2774 "remark-gfm",
2775 "remark-parse",
2776 "remark-rehype",
2777 "remend",
2778 "tailwind-merge",
2779 "unified",
2780 "unist-util-visit",
2781 "unist-util-visit-parents"
2782 ]
2783 },
2784 "stringify-entities@4.0.4": {
2785 "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==",
2786 "dependencies": [
2787 "character-entities-html4",
2788 "character-entities-legacy"
2789 ]
2790 },
2791 "style-to-js@1.1.21": {
2792 "integrity": "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==",
2793 "dependencies": [
2794 "style-to-object"
2795 ]
2796 },
2797 "style-to-object@1.0.14": {
2798 "integrity": "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==",
2799 "dependencies": [
2800 "inline-style-parser"
2801 ]
2802 },
2803 "stylis@4.3.6": {
2804 "integrity": "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ=="
2805 },
2806 "tailwind-merge@3.5.0": {
2807 "integrity": "sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A=="
2808 },
2809 "tailwindcss@4.2.2": {
2810 "integrity": "sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q=="
2811 },
2812 "tapable@2.3.0": {
2813 "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg=="
2814 },
2815 "tinybench@2.9.0": {
2816 "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg=="
2817 },
2818 "tinyexec@1.0.4": {
2819 "integrity": "sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw=="
2820 },
2821 "tinyglobby@0.2.15_picomatch@4.0.3": {
2822 "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
2823 "dependencies": [
2824 "fdir",
2825 "picomatch"
2826 ]
2827 },
2828 "tinypool@2.1.0": {
2829 "integrity": "sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw=="
2830 },
2831 "tinyrainbow@3.1.0": {
2832 "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw=="
2833 },
2834 "trim-lines@3.0.1": {
2835 "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg=="
2836 },
2837 "trough@2.2.0": {
2838 "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw=="
2839 },
2840 "ts-dedent@2.2.0": {
2841 "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ=="
2842 },
2843 "tslib@2.8.1": {
2844 "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
2845 },
2846 "typescript@5.9.3": {
2847 "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
2848 "bin": true
2849 },
2850 "ufo@1.6.3": {
2851 "integrity": "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="
2852 },
2853 "undici-types@6.21.0": {
2854 "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="
2855 },
2856 "undici-types@7.18.2": {
2857 "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="
2858 },
2859 "unified@11.0.5": {
2860 "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==",
2861 "dependencies": [
2862 "@types/unist@3.0.3",
2863 "bail",
2864 "devlop",
2865 "extend",
2866 "is-plain-obj",
2867 "trough",
2868 "vfile"
2869 ]
2870 },
2871 "unist-util-is@6.0.1": {
2872 "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==",
2873 "dependencies": [
2874 "@types/unist@3.0.3"
2875 ]
2876 },
2877 "unist-util-position@5.0.0": {
2878 "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==",
2879 "dependencies": [
2880 "@types/unist@3.0.3"
2881 ]
2882 },
2883 "unist-util-stringify-position@4.0.0": {
2884 "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
2885 "dependencies": [
2886 "@types/unist@3.0.3"
2887 ]
2888 },
2889 "unist-util-visit-parents@6.0.2": {
2890 "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==",
2891 "dependencies": [
2892 "@types/unist@3.0.3",
2893 "unist-util-is"
2894 ]
2895 },
2896 "unist-util-visit@5.1.0": {
2897 "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==",
2898 "dependencies": [
2899 "@types/unist@3.0.3",
2900 "unist-util-is",
2901 "unist-util-visit-parents"
2902 ]
2903 },
2904 "unplugin@2.1.0": {
2905 "integrity": "sha512-us4j03/499KhbGP8BU7Hrzrgseo+KdfJYWcbcajCOqsAyb8Gk0Yn2kiUIcZISYCb1JFaZfIuG3b42HmguVOKCQ==",
2906 "dependencies": [
2907 "acorn",
2908 "webpack-virtual-modules"
2909 ]
2910 },
2911 "update-browserslist-db@1.2.3_browserslist@4.28.1": {
2912 "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
2913 "dependencies": [
2914 "browserslist",
2915 "escalade",
2916 "picocolors"
2917 ],
2918 "bin": true
2919 },
2920 "util-deprecate@1.0.2": {
2921 "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
2922 },
2923 "uuid@11.1.0": {
2924 "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==",
2925 "bin": true
2926 },
2927 "vfile-location@5.0.3": {
2928 "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==",
2929 "dependencies": [
2930 "@types/unist@3.0.3",
2931 "vfile"
2932 ]
2933 },
2934 "vfile-message@4.0.3": {
2935 "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==",
2936 "dependencies": [
2937 "@types/unist@3.0.3",
2938 "unist-util-stringify-position"
2939 ]
2940 },
2941 "vfile@6.0.3": {
2942 "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==",
2943 "dependencies": [
2944 "@types/unist@3.0.3",
2945 "vfile-message"
2946 ]
2947 },
2948 "vite@8.0.1_@types+node@25.5.0": {
2949 "integrity": "sha512-wt+Z2qIhfFt85uiyRt5LPU4oVEJBXj8hZNWKeqFG4gRG/0RaRGJ7njQCwzFVjO+v4+Ipmf5CY7VdmZRAYYBPHw==",
2950 "dependencies": [
2951 "@types/node@25.5.0",
2952 "lightningcss",
2953 "picomatch",
2954 "postcss",
2955 "rolldown",
2956 "tinyglobby"
2957 ],
2958 "optionalDependencies": [
2959 "fsevents"
2960 ],
2961 "optionalPeers": [
2962 "@types/node@25.5.0"
2963 ],
2964 "bin": true
2965 },
2966 "vitest@4.1.0_@types+node@25.5.0_happy-dom@20.8.4_vite@8.0.1__@types+node@25.5.0": {
2967 "integrity": "sha512-YbDrMF9jM2Lqc++2530UourxZHmkKLxrs4+mYhEwqWS97WJ7wOYEkcr+QfRgJ3PW9wz3odRijLZjHEaRLTNbqw==",
2968 "dependencies": [
2969 "@types/node@25.5.0",
2970 "@vitest/expect",
2971 "@vitest/mocker",
2972 "@vitest/pretty-format",
2973 "@vitest/runner",
2974 "@vitest/snapshot",
2975 "@vitest/spy",
2976 "@vitest/utils",
2977 "es-module-lexer",
2978 "expect-type",
2979 "happy-dom",
2980 "magic-string",
2981 "obug",
2982 "pathe",
2983 "picomatch",
2984 "std-env",
2985 "tinybench",
2986 "tinyexec",
2987 "tinyglobby",
2988 "tinyrainbow",
2989 "vite",
2990 "why-is-node-running"
2991 ],
2992 "optionalPeers": [
2993 "@types/node@25.5.0",
2994 "happy-dom"
2995 ],
2996 "bin": true
2997 },
2998 "vscode-jsonrpc@8.2.0": {
2999 "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA=="
3000 },
3001 "vscode-languageserver-protocol@3.17.5": {
3002 "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==",
3003 "dependencies": [
3004 "vscode-jsonrpc",
3005 "vscode-languageserver-types"
3006 ]
3007 },
3008 "vscode-languageserver-textdocument@1.0.12": {
3009 "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA=="
3010 },
3011 "vscode-languageserver-types@3.17.5": {
3012 "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg=="
3013 },
3014 "vscode-languageserver@9.0.1": {
3015 "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==",
3016 "dependencies": [
3017 "vscode-languageserver-protocol"
3018 ],
3019 "bin": true
3020 },
3021 "vscode-uri@3.1.0": {
3022 "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ=="
3023 },
3024 "web-namespaces@2.0.1": {
3025 "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ=="
3026 },
3027 "webpack-virtual-modules@0.6.2": {
3028 "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ=="
3029 },
3030 "whatwg-mimetype@3.0.0": {
3031 "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q=="
3032 },
3033 "why-is-node-running@2.3.0": {
3034 "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==",
3035 "dependencies": [
3036 "siginfo",
3037 "stackback"
3038 ],
3039 "bin": true
3040 },
3041 "ws@8.19.0": {
3042 "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg=="
3043 },
3044 "yallist@3.1.1": {
3045 "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
3046 },
3047 "zwitch@2.0.4": {
3048 "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="
3049 }
3050 },
3051 "workspace": {
3052 "dependencies": [
3053 "jsr:@clo/lib@3",
3054 "npm:@testing-library/react@^16.3.2",
3055 "npm:@types/hast@^3.0.4",
3056 "npm:@types/unist@^3.0.3",
3057 "npm:dequal@^2.0.3",
3058 "npm:hast-util-to-jsx-runtime@2.3.6",
3059 "npm:react-dom@^19.2.4",
3060 "npm:react@^19.2.4",
3061 "npm:rehype-react@8",
3062 "npm:remark-parse@11",
3063 "npm:remark-rehype@^11.1.2",
3064 "npm:unified@^11.0.5",
3065 "npm:vitest@4"
3066 ],
3067 "packageJson": {
3068 "dependencies": [
3069 "npm:@jsr/clo__lib@3",
3070 "npm:@tailwindcss/typography@~0.5.19",
3071 "npm:@tailwindcss/vite@^4.2.2",
3072 "npm:@testing-library/react@^16.3.2",
3073 "npm:@types/hast@^3.0.4",
3074 "npm:@types/node@^25.5.0",
3075 "npm:@types/react-dom@^19.2.3",
3076 "npm:@types/react@^19.2.14",
3077 "npm:@types/unist@^3.0.3",
3078 "npm:@vitejs/plugin-react@^6.0.1",
3079 "npm:dequal@2",
3080 "npm:happy-dom@^20.8.4",
3081 "npm:hast-util-to-jsx-runtime@2",
3082 "npm:oxfmt@0.40",
3083 "npm:oxlint@^1.55.0",
3084 "npm:react-dom@^19.2.4",
3085 "npm:react-markdown@^10.1.0",
3086 "npm:react-scan@~0.5.3",
3087 "npm:react@^19.2.4",
3088 "npm:rehype-react@8",
3089 "npm:remark-gfm@^4.0.1",
3090 "npm:remark-parse@11",
3091 "npm:remark-rehype@11",
3092 "npm:streamdown@^2.5.0",
3093 "npm:tailwindcss@^4.2.2",
3094 "npm:typescript@^5.9.3",
3095 "npm:unified@11",
3096 "npm:vite@8",
3097 "npm:vitest@4"
3098 ]
3099 }
3100 }
3101}
example/App.tsx+6-9
......@@ -2,11 +2,7 @@ import { type ReactNode, useDeferredValue, useId, useState } from "react";
22import ReactMarkdown from "react-markdown";
33import { Streamdown } from "streamdown";
44import { Markdown } from "../src/Markdown.ts";
5import {
6 components,
7 reactMarkdownComponents,
8 streamdownComponents,
9} from "./markdown-components";
5import { components, reactMarkdownComponents, streamdownComponents } from "./markdown-components";
106import { initialMarkdown, processor, reactMarkdownRemarkPlugins } from "./markdown-demo";
117
128type Renderer = "memo" | "streamdown" | "react-markdown";
......@@ -36,7 +32,10 @@ function ToggleSwitch({ checked, label, onChange }: ToggleSwitchProps) {
3632 const id = useId();
3733
3834 return (
39 <label className="inline-flex items-center gap-3 text-xs font-medium text-stone-600" htmlFor={id}>
35 <label
36 className="inline-flex items-center gap-3 text-xs font-medium text-stone-600"
37 htmlFor={id}
38 >
4039 <span>{label}</span>
4140 <span className="relative inline-flex h-6 w-11 shrink-0">
4241 <input
......@@ -148,9 +147,7 @@ export function App() {
148147 ))}
149148 </div>
150149 }
151 toolbar={
152 previewToolbar
153 }
150 toolbar={previewToolbar}
154151 >
155152 {renderer === "memo" ? (
156153 <div className="preview-prose">
package.json+26-41
......@@ -1,65 +1,50 @@
11{
2 "license": "ISC",
3 "files": [
4 "dist"
5 ],
2 "name": "@clo/react-markdown",
63 "type": "module",
4 "scripts": {
5 "demo": "vite dev",
6 "all": "pnpm --parallel fmt && pnpm --stream '/check|test$/'",
7 "test": "vitest",
8 "check": "oxlint --react-plugin --vitest-plugin --type-aware --type-check .",
9 "check:publish": "deno publish --dry-run --allow-dirty",
10 "fmt": "oxfmt --write ."
11 },
712 "exports": {
813 ".": "./src/Markdown.ts",
914 "./Predict": "./src/Predict.ts"
1015 },
11 "publishConfig": {
12 "access": "public"
13 },
14 "scripts": {
15 "build": "vp pack",
16 "dev": "vp dev",
17 "test": "vp test",
18 "check": "vp check",
19 "prepublishOnly": "vp run build"
20 },
2116 "dependencies": {
22 "@clo/lib": "jsr:^3.0.0",
23 "@types/hast": "^3.0.4",
24 "dequal": "^2.0.3"
17 "@clo/lib": "npm:@jsr/clo__lib@3.0.0",
18 "@types/react": "^19",
19 "dequal": "^2",
20 "hast-util-to-jsx-runtime": "^2",
21 "react": "^19",
22 "rehype-react": "^8",
23 "remark-parse": "^11",
24 "remark-rehype": "^11",
25 "unified": "^11"
2526 },
2627 "devDependencies": {
2728 "@tailwindcss/typography": "^0.5.19",
2829 "@tailwindcss/vite": "^4.2.2",
2930 "@testing-library/react": "^16.3.2",
31 "@types/hast": "^3.0.4",
3032 "@types/node": "^25.5.0",
31 "@types/react": "^19.2.14",
32 "@types/react-dom": "^19.2.3",
33 "@types/react-dom": "~19",
3334 "@types/unist": "^3.0.3",
34 "@typescript/native-preview": "7.0.0-dev.20260318.1",
3535 "@vitejs/plugin-react": "^6.0.1",
36 "hast-util-to-jsx-runtime": "2.3.6",
37 "react": "^19.2.4",
36 "happy-dom": "^20.8.4",
37 "oxfmt": "^0.40.0",
38 "oxlint": "^1.55.0",
3839 "react-dom": "^19.2.4",
3940 "react-markdown": "^10.1.0",
4041 "react-scan": "^0.5.3",
41 "rehype-react": "^8.0.0",
4242 "remark-gfm": "^4.0.1",
43 "remark-parse": "^11.0.0",
44 "remark-rehype": "^11.1.2",
4543 "streamdown": "^2.5.0",
4644 "tailwindcss": "^4.2.2",
4745 "typescript": "^5.9.3",
48 "unified": "^11.0.5",
49 "vite-plus": "^0.1.11"
50 },
51 "peerDependencies": {
52 "react": "*",
53 "rehype-react": "^8.0.0",
54 "remark-parse": "^11.0.0",
55 "remark-rehype": "^11.0.0",
56 "unified": "^11.0.0"
46 "vite": "^8.0.0",
47 "vitest": "^4.0.0"
5748 },
58 "packageManager": "pnpm@10.26.1",
59 "pnpm": {
60 "overrides": {
61 "vite": "npm:@voidzero-dev/vite-plus-core@latest",
62 "vitest": "npm:@voidzero-dev/vite-plus-test@latest"
63 }
64 }
49 "packageManager": "pnpm@10.26.1"
6550}
pnpm-lock.yaml+381-620
......@@ -4,57 +4,71 @@ settings:
44 autoInstallPeers: true
55 excludeLinksFromLockfile: false
66
7overrides:
8 vite: npm:@voidzero-dev/vite-plus-core@latest
9 vitest: npm:@voidzero-dev/vite-plus-test@latest
10
117importers:
128
139 .:
1410 dependencies:
1511 '@clo/lib':
16 specifier: jsr:^3.0.0
12 specifier: npm:@jsr/clo__lib@3.0.0
1713 version: '@jsr/clo__lib@3.0.0'
18 '@types/hast':
19 specifier: ^3.0.4
20 version: 3.0.4
14 '@types/react':
15 specifier: ^19
16 version: 19.2.14
2117 dequal:
22 specifier: ^2.0.3
18 specifier: ^2
2319 version: 2.0.3
20 hast-util-to-jsx-runtime:
21 specifier: ^2
22 version: 2.3.6
23 react:
24 specifier: ^19
25 version: 19.2.4
26 rehype-react:
27 specifier: ^8
28 version: 8.0.0
29 remark-parse:
30 specifier: ^11
31 version: 11.0.0
32 remark-rehype:
33 specifier: ^11
34 version: 11.1.2
35 unified:
36 specifier: ^11
37 version: 11.0.5
2438 devDependencies:
2539 '@tailwindcss/typography':
2640 specifier: ^0.5.19
2741 version: 0.5.19(tailwindcss@4.2.2)
2842 '@tailwindcss/vite':
2943 specifier: ^4.2.2
30 version: 4.2.2(vite@8.0.0(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2))
44 version: 4.2.2(vite@8.0.1(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2))
3145 '@testing-library/react':
3246 specifier: ^16.3.2
3347 version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
48 '@types/hast':
49 specifier: ^3.0.4
50 version: 3.0.4
3451 '@types/node':
3552 specifier: ^25.5.0
3653 version: 25.5.0
37 '@types/react':
38 specifier: ^19.2.14
39 version: 19.2.14
4054 '@types/react-dom':
41 specifier: ^19.2.3
55 specifier: ~19
4256 version: 19.2.3(@types/react@19.2.14)
4357 '@types/unist':
4458 specifier: ^3.0.3
4559 version: 3.0.3
46 '@typescript/native-preview':
47 specifier: 7.0.0-dev.20260318.1
48 version: 7.0.0-dev.20260318.1
4960 '@vitejs/plugin-react':
5061 specifier: ^6.0.1
51 version: 6.0.1(vite@8.0.0(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2))
52 hast-util-to-jsx-runtime:
53 specifier: 2.3.6
54 version: 2.3.6
55 react:
56 specifier: ^19.2.4
57 version: 19.2.4
62 version: 6.0.1(vite@8.0.1(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2))
63 happy-dom:
64 specifier: ^20.8.4
65 version: 20.8.4
66 oxfmt:
67 specifier: ^0.40.0
68 version: 0.40.0
69 oxlint:
70 specifier: ^1.55.0
71 version: 1.56.0(oxlint-tsgolint@0.17.0)
5872 react-dom:
5973 specifier: ^19.2.4
6074 version: 19.2.4(react@19.2.4)
......@@ -64,18 +78,9 @@ importers:
6478 react-scan:
6579 specifier: ^0.5.3
6680 version: 0.5.3(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
67 rehype-react:
68 specifier: ^8.0.0
69 version: 8.0.0
7081 remark-gfm:
7182 specifier: ^4.0.1
7283 version: 4.0.1
73 remark-parse:
74 specifier: ^11.0.0
75 version: 11.0.0
76 remark-rehype:
77 specifier: ^11.1.2
78 version: 11.1.2
7984 streamdown:
8085 specifier: ^2.5.0
8186 version: 2.5.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
......@@ -85,12 +90,12 @@ importers:
8590 typescript:
8691 specifier: ^5.9.3
8792 version: 5.9.3
88 unified:
89 specifier: ^11.0.5
90 version: 11.0.5
91 vite-plus:
92 specifier: ^0.1.11
93 version: 0.1.12(@types/node@25.5.0)(happy-dom@20.8.4)(jiti@2.6.1)(typescript@5.9.3)(vite@8.0.0(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2))(yaml@2.8.2)
93 vite:
94 specifier: ^8.0.0
95 version: 8.0.1(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2)
96 vitest:
97 specifier: ^4.0.0
98 version: 4.1.0(@types/node@25.5.0)(happy-dom@20.8.4)(vite@8.0.1(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2))
9499
95100packages:
96101
......@@ -186,11 +191,11 @@ packages:
186191 '@chevrotain/utils@11.1.2':
187192 resolution: {integrity: sha512-4mudFAQ6H+MqBTfqLmU7G1ZwRzCLfJEooL/fsF6rCX5eePMbGhoy5n4g+G4vlh2muDcsCTJtL+uKbOzWxs5LHA==}
188193
189 '@emnapi/core@1.9.0':
190 resolution: {integrity: sha512-0DQ98G9ZQZOxfUcQn1waV2yS8aWdZ6kJMbYCJB3oUBecjWYO1fqJ+a1DRfPF3O5JEkwqwP1A9QEN/9mYm2Yd0w==}
194 '@emnapi/core@1.9.1':
195 resolution: {integrity: sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==}
191196
192 '@emnapi/runtime@1.9.0':
193 resolution: {integrity: sha512-QN75eB0IH2ywSpRpNddCRfQIhmJYBCJ1x5Lb3IscKAL8bMnVAKnRg8dCoXbHzVLLH7P38N2Z3mtulB7W0J0FKw==}
197 '@emnapi/runtime@1.9.1':
198 resolution: {integrity: sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==}
194199
195200 '@emnapi/wasi-threads@1.2.0':
196201 resolution: {integrity: sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==}
......@@ -382,12 +387,8 @@ packages:
382387 '@napi-rs/wasm-runtime@1.1.1':
383388 resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==}
384389
385 '@oxc-project/runtime@0.115.0':
386 resolution: {integrity: sha512-Rg8Wlt5dCbXhQnsXPrkOjL1DTSvXLgb2R/KYfnf1/K+R0k6UMLEmbQXPM+kwrWqSmWA2t0B1EtHy2/3zikQpvQ==}
387 engines: {node: ^20.19.0 || >=22.12.0}
388
389 '@oxc-project/types@0.115.0':
390 resolution: {integrity: sha512-4n91DKnebUS4yjUHl2g3/b2T+IUdCfmoZGhmwsovZCDaJSs+QkVAM+0AqqTxHSsHfeiMuueT75cZaZcT/m0pSw==}
390 '@oxc-project/types@0.120.0':
391 resolution: {integrity: sha512-k1YNu55DuvAip/MGE1FTsIuU3FUCn6v/ujG9V7Nq5Df/kX2CWb13hhwD0lmJGMGqE+bE1MXvv9SZVnMzEXlWcg==}
391392
392393 '@oxfmt/binding-android-arm-eabi@0.40.0':
393394 resolution: {integrity: sha512-S6zd5r1w/HmqR8t0CTnGjFTBLDq2QKORPwriCHxo4xFNuhmOTABGjPaNvCJJVnrKBLsohOeiDX3YqQfJPF+FXw==}
......@@ -533,123 +534,120 @@ packages:
533534 cpu: [x64]
534535 os: [win32]
535536
536 '@oxlint/binding-android-arm-eabi@1.55.0':
537 resolution: {integrity: sha512-NhvgAhncTSOhRahQSCnkK/4YIGPjTmhPurQQ2dwt2IvwCMTvZRW5vF2K10UBOxFve4GZDMw6LtXZdC2qeuYIVQ==}
537 '@oxlint/binding-android-arm-eabi@1.56.0':
538 resolution: {integrity: sha512-IyfYPthZyiSKwAv/dLjeO18SaK8MxLI9Yss2JrRDyweQAkuL3LhEy7pwIwI7uA3KQc1Vdn20kdmj3q0oUIQL6A==}
538539 engines: {node: ^20.19.0 || >=22.12.0}
539540 cpu: [arm]
540541 os: [android]
541542
542 '@oxlint/binding-android-arm64@1.55.0':
543 resolution: {integrity: sha512-P9iWRh+Ugqhg+D7rkc7boHX8o3H2h7YPcZHQIgvVBgnua5tk4LR2L+IBlreZs58/95cd2x3/004p5VsQM9z4SA==}
543 '@oxlint/binding-android-arm64@1.56.0':
544 resolution: {integrity: sha512-Ga5zYrzH6vc/VFxhn6MmyUnYEfy9vRpwTIks99mY3j6Nz30yYpIkWryI0QKPCgvGUtDSXVLEaMum5nA+WrNOSg==}
544545 engines: {node: ^20.19.0 || >=22.12.0}
545546 cpu: [arm64]
546547 os: [android]
547548
548 '@oxlint/binding-darwin-arm64@1.55.0':
549 resolution: {integrity: sha512-esakkJIt7WFAhT30P/Qzn96ehFpzdZ1mNuzpOb8SCW7lI4oB8VsyQnkSHREM671jfpuBb/o2ppzBCx5l0jpgMA==}
549 '@oxlint/binding-darwin-arm64@1.56.0':
550 resolution: {integrity: sha512-ogmbdJysnw/D4bDcpf1sPLpFThZ48lYp4aKYm10Z/6Nh1SON6NtnNhTNOlhEY296tDFItsZUz+2tgcSYqh8Eyw==}
550551 engines: {node: ^20.19.0 || >=22.12.0}
551552 cpu: [arm64]
552553 os: [darwin]
553554
554 '@oxlint/binding-darwin-x64@1.55.0':
555 resolution: {integrity: sha512-xDMFRCCAEK9fOH6As2z8ELsC+VDGSFRHwIKVSilw+xhgLwTDFu37rtmRbmUlx8rRGS6cWKQPTc47AVxAZEVVPQ==}
555 '@oxlint/binding-darwin-x64@1.56.0':
556 resolution: {integrity: sha512-x8QE1h+RAtQ2g+3KPsP6Fk/tdz6zJQUv5c7fTrJxXV3GHOo+Ry5p/PsogU4U+iUZg0rj6hS+E4xi+mnwwlDCWQ==}
556557 engines: {node: ^20.19.0 || >=22.12.0}
557558 cpu: [x64]
558559 os: [darwin]
559560
560 '@oxlint/binding-freebsd-x64@1.55.0':
561 resolution: {integrity: sha512-mYZqnwUD7ALCRxGenyLd1uuG+rHCL+OTT6S8FcAbVm/ZT2AZMGjvibp3F6k1SKOb2aeqFATmwRykrE41Q0GWVw==}
561 '@oxlint/binding-freebsd-x64@1.56.0':
562 resolution: {integrity: sha512-6G+WMZvwJpMvY7my+/SHEjb7BTk/PFbePqLpmVmUJRIsJMy/UlyYqjpuh0RCgYYkPLcnXm1rUM04kbTk8yS1Yg==}
562563 engines: {node: ^20.19.0 || >=22.12.0}
563564 cpu: [x64]
564565 os: [freebsd]
565566
566 '@oxlint/binding-linux-arm-gnueabihf@1.55.0':
567 resolution: {integrity: sha512-LcX6RYcF9vL9ESGwJW3yyIZ/d/ouzdOKXxCdey1q0XJOW1asrHsIg5MmyKdEBR4plQx+shvYeQne7AzW5f3T1w==}
567 '@oxlint/binding-linux-arm-gnueabihf@1.56.0':
568 resolution: {integrity: sha512-YYHBsk/sl7fYwQOok+6W5lBPeUEvisznV/HZD2IfZmF3Bns6cPC3Z0vCtSEOaAWTjYWN3jVsdu55jMxKlsdlhg==}
568569 engines: {node: ^20.19.0 || >=22.12.0}
569570 cpu: [arm]
570571 os: [linux]
571572
572 '@oxlint/binding-linux-arm-musleabihf@1.55.0':
573 resolution: {integrity: sha512-C+8GS1rPtK+dI7mJFkqoRBkDuqbrNihnyYQsJPS9ez+8zF9JzfvU19lawqt4l/Y23o5uQswE/DORa8aiXUih3w==}
573 '@oxlint/binding-linux-arm-musleabihf@1.56.0':
574 resolution: {integrity: sha512-+AZK8rOUr78y8WT6XkDb04IbMRqauNV+vgT6f8ZLOH8wnpQ9i7Nol0XLxAu+Cq7Sb+J9wC0j6Km5hG8rj47/yQ==}
574575 engines: {node: ^20.19.0 || >=22.12.0}
575576 cpu: [arm]
576577 os: [linux]
577578
578 '@oxlint/binding-linux-arm64-gnu@1.55.0':
579 resolution: {integrity: sha512-ErLE4XbmcCopA4/CIDiH6J1IAaDOMnf/KSx/aFObs4/OjAAM3sFKWGZ57pNOMxhhyBdcmcXwYymph9GwcpcqgQ==}
579 '@oxlint/binding-linux-arm64-gnu@1.56.0':
580 resolution: {integrity: sha512-urse2SnugwJRojUkGSSeH2LPMaje5Q50yQtvtL9HFckiyeqXzoFwOAZqD5TR29R2lq7UHidfFDM9EGcchcbb8A==}
580581 engines: {node: ^20.19.0 || >=22.12.0}
581582 cpu: [arm64]
582583 os: [linux]
583584
584 '@oxlint/binding-linux-arm64-musl@1.55.0':
585 resolution: {integrity: sha512-/kp65avi6zZfqEng56TTuhiy3P/3pgklKIdf38yvYeJ9/PgEeRA2A2AqKAKbZBNAqUzrzHhz9jF6j/PZvhJzTQ==}
585 '@oxlint/binding-linux-arm64-musl@1.56.0':
586 resolution: {integrity: sha512-rkTZkBfJ4TYLjansjSzL6mgZOdN5IvUnSq3oNJSLwBcNvy3dlgQtpHPrRxrCEbbcp7oQ6If0tkNaqfOsphYZ9g==}
586587 engines: {node: ^20.19.0 || >=22.12.0}
587588 cpu: [arm64]
588589 os: [linux]
589590
590 '@oxlint/binding-linux-ppc64-gnu@1.55.0':
591 resolution: {integrity: sha512-A6pTdXwcEEwL/nmz0eUJ6WxmxcoIS+97GbH96gikAyre3s5deC7sts38ZVVowjS2QQFuSWkpA4ZmQC0jZSNvJQ==}
591 '@oxlint/binding-linux-ppc64-gnu@1.56.0':
592 resolution: {integrity: sha512-uqL1kMH3u69/e1CH2EJhP3CP28jw2ExLsku4o8RVAZ7fySo9zOyI2fy9pVlTAp4voBLVgzndXi3SgtdyCTa2aA==}
592593 engines: {node: ^20.19.0 || >=22.12.0}
593594 cpu: [ppc64]
594595 os: [linux]
595596
596 '@oxlint/binding-linux-riscv64-gnu@1.55.0':
597 resolution: {integrity: sha512-clj0lnIN+V52G9tdtZl0LbdTSurnZ1NZj92Je5X4lC7gP5jiCSW+Y/oiDiSauBAD4wrHt2S7nN3pA0zfKYK/6Q==}
597 '@oxlint/binding-linux-riscv64-gnu@1.56.0':
598 resolution: {integrity: sha512-j0CcMBOgV6KsRaBdsebIeiy7hCjEvq2KdEsiULf2LZqAq0v1M1lWjelhCV57LxsqaIGChXFuFJ0RiFrSRHPhSg==}
598599 engines: {node: ^20.19.0 || >=22.12.0}
599600 cpu: [riscv64]
600601 os: [linux]
601602
602 '@oxlint/binding-linux-riscv64-musl@1.55.0':
603 resolution: {integrity: sha512-NNu08pllN5x/O94/sgR3DA8lbrGBnTHsINZZR0hcav1sj79ksTiKKm1mRzvZvacwQ0hUnGinFo+JO75ok2PxYg==}
603 '@oxlint/binding-linux-riscv64-musl@1.56.0':
604 resolution: {integrity: sha512-7VDOiL8cDG3DQ/CY3yKjbV1c4YPvc4vH8qW09Vv+5ukq3l/Kcyr6XGCd5NvxUmxqDb2vjMpM+eW/4JrEEsUetA==}
604605 engines: {node: ^20.19.0 || >=22.12.0}
605606 cpu: [riscv64]
606607 os: [linux]
607608
608 '@oxlint/binding-linux-s390x-gnu@1.55.0':
609 resolution: {integrity: sha512-BvfQz3PRlWZRoEZ17dZCqgQsMRdpzGZomJkVATwCIGhHVVeHJMQdmdXPSjcT1DCNUrOjXnVyj1RGDj5+/Je2+Q==}
609 '@oxlint/binding-linux-s390x-gnu@1.56.0':
610 resolution: {integrity: sha512-JGRpX0M+ikD3WpwJ7vKcHKV6Kg0dT52BW2Eu2BupXotYeqGXBrbY+QPkAyKO6MNgKozyTNaRh3r7g+VWgyAQYQ==}
610611 engines: {node: ^20.19.0 || >=22.12.0}
611612 cpu: [s390x]
612613 os: [linux]
613614
614 '@oxlint/binding-linux-x64-gnu@1.55.0':
615 resolution: {integrity: sha512-ngSOoFCSBMKVQd24H8zkbcBNc7EHhjnF1sv3mC9NNXQ/4rRjI/4Dj9+9XoDZeFEkF1SX1COSBXF1b2Pr9rqdEw==}
615 '@oxlint/binding-linux-x64-gnu@1.56.0':
616 resolution: {integrity: sha512-dNaICPvtmuxFP/VbqdofrLqdS3bM/AKJN3LMJD52si44ea7Be1cBk6NpfIahaysG9Uo+L98QKddU9CD5L8UHnQ==}
616617 engines: {node: ^20.19.0 || >=22.12.0}
617618 cpu: [x64]
618619 os: [linux]
619620
620 '@oxlint/binding-linux-x64-musl@1.55.0':
621 resolution: {integrity: sha512-BDpP7W8GlaG7BR6QjGZAleYzxoyKc/D24spZIF2mB3XsfALQJJT/OBmP8YpeTb1rveFSBHzl8T7l0aqwkWNdGA==}
621 '@oxlint/binding-linux-x64-musl@1.56.0':
622 resolution: {integrity: sha512-pF1vOtM+GuXmbklM1hV8WMsn6tCNPvkUzklj/Ej98JhlanbmA2RB1BILgOpwSuCTRTIYx2MXssmEyQQ90QF5aA==}
622623 engines: {node: ^20.19.0 || >=22.12.0}
623624 cpu: [x64]
624625 os: [linux]
625626
626 '@oxlint/binding-openharmony-arm64@1.55.0':
627 resolution: {integrity: sha512-PS6GFvmde/pc3fCA2Srt51glr8Lcxhpf6WIBFfLphndjRrD34NEcses4TSxQrEcxYo6qVywGfylM0ZhSCF2gGA==}
627 '@oxlint/binding-openharmony-arm64@1.56.0':
628 resolution: {integrity: sha512-bp8NQ4RE6fDIFLa4bdBiOA+TAvkNkg+rslR+AvvjlLTYXLy9/uKAYLQudaQouWihLD/hgkrXIKKzXi5IXOewwg==}
628629 engines: {node: ^20.19.0 || >=22.12.0}
629630 cpu: [arm64]
630631 os: [openharmony]
631632
632 '@oxlint/binding-win32-arm64-msvc@1.55.0':
633 resolution: {integrity: sha512-P6JcLJGs/q1UOvDLzN8otd9JsH4tsuuPDv+p7aHqHM3PrKmYdmUvkNj4K327PTd35AYcznOCN+l4ZOaq76QzSw==}
633 '@oxlint/binding-win32-arm64-msvc@1.56.0':
634 resolution: {integrity: sha512-PxT4OJDfMOQBzo3OlzFb9gkoSD+n8qSBxyVq2wQSZIHFQYGEqIRTo9M0ZStvZm5fdhMqaVYpOnJvH2hUMEDk/g==}
634635 engines: {node: ^20.19.0 || >=22.12.0}
635636 cpu: [arm64]
636637 os: [win32]
637638
638 '@oxlint/binding-win32-ia32-msvc@1.55.0':
639 resolution: {integrity: sha512-gzkk4zE2zsE+WmRxFOiAZHpCpUNDFytEakqNXoNHW+PnYEOTPKDdW6nrzgSeTbGKVPXNAKQnRnMgrh7+n3Xueg==}
639 '@oxlint/binding-win32-ia32-msvc@1.56.0':
640 resolution: {integrity: sha512-PTRy6sIEPqy2x8PTP1baBNReN/BNEFmde0L+mYeHmjXE1Vlcc9+I5nsqENsB2yAm5wLkzPoTNCMY/7AnabT4/A==}
640641 engines: {node: ^20.19.0 || >=22.12.0}
641642 cpu: [ia32]
642643 os: [win32]
643644
644 '@oxlint/binding-win32-x64-msvc@1.55.0':
645 resolution: {integrity: sha512-ZFALNow2/og75gvYzNP7qe+rREQ5xunktwA+lgykoozHZ6hw9bqg4fn5j2UvG4gIn1FXqrZHkOAXuPf5+GOYTQ==}
645 '@oxlint/binding-win32-x64-msvc@1.56.0':
646 resolution: {integrity: sha512-ZHa0clocjLmIDr+1LwoWtxRcoYniAvERotvwKUYKhH41NVfl0Y4LNbyQkwMZzwDvKklKGvGZ5+DAG58/Ik47tQ==}
646647 engines: {node: ^20.19.0 || >=22.12.0}
647648 cpu: [x64]
648649 os: [win32]
649650
650 '@polka/url@1.0.0-next.29':
651 resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==}
652
653651 '@preact/signals-core@1.14.0':
654652 resolution: {integrity: sha512-AowtCcCU/33lFlh1zRFf/u+12rfrhtNakj7UpaGEsmMwUKpKWMVvcktOGcwBBNiB4lWrZWc01LhiyyzVklJyaQ==}
655653
......@@ -658,101 +656,101 @@ packages:
658656 peerDependencies:
659657 preact: 10.x
660658
661 '@rolldown/binding-android-arm64@1.0.0-rc.9':
662 resolution: {integrity: sha512-lcJL0bN5hpgJfSIz/8PIf02irmyL43P+j1pTCfbD1DbLkmGRuFIA4DD3B3ZOvGqG0XiVvRznbKtN0COQVaKUTg==}
659 '@rolldown/binding-android-arm64@1.0.0-rc.10':
660 resolution: {integrity: sha512-jOHxwXhxmFKuXztiu1ORieJeTbx5vrTkcOkkkn2d35726+iwhrY1w/+nYY/AGgF12thg33qC3R1LMBF5tHTZHg==}
663661 engines: {node: ^20.19.0 || >=22.12.0}
664662 cpu: [arm64]
665663 os: [android]
666664
667 '@rolldown/binding-darwin-arm64@1.0.0-rc.9':
668 resolution: {integrity: sha512-J7Zk3kLYFsLtuH6U+F4pS2sYVzac0qkjcO5QxHS7OS7yZu2LRs+IXo+uvJ/mvpyUljDJ3LROZPoQfgBIpCMhdQ==}
665 '@rolldown/binding-darwin-arm64@1.0.0-rc.10':
666 resolution: {integrity: sha512-gED05Teg/vtTZbIJBc4VNMAxAFDUPkuO/rAIyyxZjTj1a1/s6z5TII/5yMGZ0uLRCifEtwUQn8OlYzuYc0m70w==}
669667 engines: {node: ^20.19.0 || >=22.12.0}
670668 cpu: [arm64]
671669 os: [darwin]
672670
673 '@rolldown/binding-darwin-x64@1.0.0-rc.9':
674 resolution: {integrity: sha512-iwtmmghy8nhfRGeNAIltcNXzD0QMNaaA5U/NyZc1Ia4bxrzFByNMDoppoC+hl7cDiUq5/1CnFthpT9n+UtfFyg==}
671 '@rolldown/binding-darwin-x64@1.0.0-rc.10':
672 resolution: {integrity: sha512-rI15NcM1mA48lqrIxVkHfAqcyFLcQwyXWThy+BQ5+mkKKPvSO26ir+ZDp36AgYoYVkqvMcdS8zOE6SeBsR9e8A==}
675673 engines: {node: ^20.19.0 || >=22.12.0}
676674 cpu: [x64]
677675 os: [darwin]
678676
679 '@rolldown/binding-freebsd-x64@1.0.0-rc.9':
680 resolution: {integrity: sha512-DLFYI78SCiZr5VvdEplsVC2Vx53lnA4/Ga5C65iyldMVaErr86aiqCoNBLl92PXPfDtUYjUh+xFFor40ueNs4Q==}
677 '@rolldown/binding-freebsd-x64@1.0.0-rc.10':
678 resolution: {integrity: sha512-XZRXHdTa+4ME1MuDVp021+doQ+z6Ei4CCFmNc5/sKbqb8YmkiJdj8QKlV3rCI0AJtAeSB5n0WGPuJWNL9p/L2w==}
681679 engines: {node: ^20.19.0 || >=22.12.0}
682680 cpu: [x64]
683681 os: [freebsd]
684682
685 '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.9':
686 resolution: {integrity: sha512-CsjTmTwd0Hri6iTw/DRMK7kOZ7FwAkrO4h8YWKoX/kcj833e4coqo2wzIFywtch/8Eb5enQ/lwLM7w6JX1W5RQ==}
683 '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.10':
684 resolution: {integrity: sha512-R0SQMRluISSLzFE20sPWYHVmJdDQnRyc/FzSCN72BqQmh2SOZUFG+N3/vBZpR4C6WpEUVYJLrYUXaj43sJsNLA==}
687685 engines: {node: ^20.19.0 || >=22.12.0}
688686 cpu: [arm]
689687 os: [linux]
690688
691 '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.9':
692 resolution: {integrity: sha512-2x9O2JbSPxpxMDhP9Z74mahAStibTlrBMW0520+epJH5sac7/LwZW5Bmg/E6CXuEF53JJFW509uP+lSedaUNxg==}
689 '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.10':
690 resolution: {integrity: sha512-Y1reMrV/o+cwpduYhJuOE3OMKx32RMYCidf14y+HssARRmhDuWXJ4yVguDg2R/8SyyGNo+auzz64LnPK9Hq6jg==}
693691 engines: {node: ^20.19.0 || >=22.12.0}
694692 cpu: [arm64]
695693 os: [linux]
696694
697 '@rolldown/binding-linux-arm64-musl@1.0.0-rc.9':
698 resolution: {integrity: sha512-JA1QRW31ogheAIRhIg9tjMfsYbglXXYGNPLdPEYrwFxdbkQCAzvpSCSHCDWNl4hTtrol8WeboCSEpjdZK8qrCg==}
695 '@rolldown/binding-linux-arm64-musl@1.0.0-rc.10':
696 resolution: {integrity: sha512-vELN+HNb2IzuzSBUOD4NHmP9yrGwl1DVM29wlQvx1OLSclL0NgVWnVDKl/8tEks79EFek/kebQKnNJkIAA4W2g==}
699697 engines: {node: ^20.19.0 || >=22.12.0}
700698 cpu: [arm64]
701699 os: [linux]
702700
703 '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.9':
704 resolution: {integrity: sha512-aOKU9dJheda8Kj8Y3w9gnt9QFOO+qKPAl8SWd7JPHP+Cu0EuDAE5wokQubLzIDQWg2myXq2XhTpOVS07qqvT+w==}
701 '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.10':
702 resolution: {integrity: sha512-ZqrufYTgzxbHwpqOjzSsb0UV/aV2TFIY5rP8HdsiPTv/CuAgCRjM6s9cYFwQ4CNH+hf9Y4erHW1GjZuZ7WoI7w==}
705703 engines: {node: ^20.19.0 || >=22.12.0}
706704 cpu: [ppc64]
707705 os: [linux]
708706
709 '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.9':
710 resolution: {integrity: sha512-OalO94fqj7IWRn3VdXWty75jC5dk4C197AWEuMhIpvVv2lw9fiPhud0+bW2ctCxb3YoBZor71QHbY+9/WToadA==}
707 '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.10':
708 resolution: {integrity: sha512-gSlmVS1FZJSRicA6IyjoRoKAFK7IIHBs7xJuHRSmjImqk3mPPWbR7RhbnfH2G6bcmMEllCt2vQ/7u9e6bBnByg==}
711709 engines: {node: ^20.19.0 || >=22.12.0}
712710 cpu: [s390x]
713711 os: [linux]
714712
715 '@rolldown/binding-linux-x64-gnu@1.0.0-rc.9':
716 resolution: {integrity: sha512-cVEl1vZtBsBZna3YMjGXNvnYYrOJ7RzuWvZU0ffvJUexWkukMaDuGhUXn0rjnV0ptzGVkvc+vW9Yqy6h8YX4pg==}
713 '@rolldown/binding-linux-x64-gnu@1.0.0-rc.10':
714 resolution: {integrity: sha512-eOCKUpluKgfObT2pHjztnaWEIbUabWzk3qPZ5PuacuPmr4+JtQG4k2vGTY0H15edaTnicgU428XW/IH6AimcQw==}
717715 engines: {node: ^20.19.0 || >=22.12.0}
718716 cpu: [x64]
719717 os: [linux]
720718
721 '@rolldown/binding-linux-x64-musl@1.0.0-rc.9':
722 resolution: {integrity: sha512-UzYnKCIIc4heAKgI4PZ3dfBGUZefGCJ1TPDuLHoCzgrMYPb5Rv6TLFuYtyM4rWyHM7hymNdsg5ik2C+UD9VDbA==}
719 '@rolldown/binding-linux-x64-musl@1.0.0-rc.10':
720 resolution: {integrity: sha512-Xdf2jQbfQowJnLcgYfD/m0Uu0Qj5OdxKallD78/IPPfzaiaI4KRAwZzHcKQ4ig1gtg1SuzC7jovNiM2TzQsBXA==}
723721 engines: {node: ^20.19.0 || >=22.12.0}
724722 cpu: [x64]
725723 os: [linux]
726724
727 '@rolldown/binding-openharmony-arm64@1.0.0-rc.9':
728 resolution: {integrity: sha512-+6zoiF+RRyf5cdlFQP7nm58mq7+/2PFaY2DNQeD4B87N36JzfF/l9mdBkkmTvSYcYPE8tMh/o3cRlsx1ldLfog==}
725 '@rolldown/binding-openharmony-arm64@1.0.0-rc.10':
726 resolution: {integrity: sha512-o1hYe8hLi1EY6jgPFyxQgQ1wcycX+qz8eEbVmot2hFkgUzPxy9+kF0u0NIQBeDq+Mko47AkaFFaChcvZa9UX9Q==}
729727 engines: {node: ^20.19.0 || >=22.12.0}
730728 cpu: [arm64]
731729 os: [openharmony]
732730
733 '@rolldown/binding-wasm32-wasi@1.0.0-rc.9':
734 resolution: {integrity: sha512-rgFN6sA/dyebil3YTlL2evvi/M+ivhfnyxec7AccTpRPccno/rPoNlqybEZQBkcbZu8Hy+eqNJCqfBR8P7Pg8g==}
731 '@rolldown/binding-wasm32-wasi@1.0.0-rc.10':
732 resolution: {integrity: sha512-Ugv9o7qYJudqQO5Y5y2N2SOo6S4WiqiNOpuQyoPInnhVzCY+wi/GHltcLHypG9DEUYMB0iTB/huJrpadiAcNcA==}
735733 engines: {node: '>=14.0.0'}
736734 cpu: [wasm32]
737735
738 '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.9':
739 resolution: {integrity: sha512-lHVNUG/8nlF1IQk1C0Ci574qKYyty2goMiPlRqkC5R+3LkXDkL5Dhx8ytbxq35m+pkHVIvIxviD+TWLdfeuadA==}
736 '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.10':
737 resolution: {integrity: sha512-7UODQb4fQUNT/vmgDZBl3XOBAIOutP5R3O/rkxg0aLfEGQ4opbCgU5vOw/scPe4xOqBwL9fw7/RP1vAMZ6QlAQ==}
740738 engines: {node: ^20.19.0 || >=22.12.0}
741739 cpu: [arm64]
742740 os: [win32]
743741
744 '@rolldown/binding-win32-x64-msvc@1.0.0-rc.9':
745 resolution: {integrity: sha512-G0oA4+w1iY5AGi5HcDTxWsoxF509hrFIPB2rduV5aDqS9FtDg1CAfa7V34qImbjfhIcA8C+RekocJZA96EarwQ==}
742 '@rolldown/binding-win32-x64-msvc@1.0.0-rc.10':
743 resolution: {integrity: sha512-PYxKHMVHOb5NJuDL53vBUl1VwUjymDcYI6rzpIni0C9+9mTiJedvUxSk7/RPp7OOAm3v+EjgMu9bIy3N6b408w==}
746744 engines: {node: ^20.19.0 || >=22.12.0}
747745 cpu: [x64]
748746 os: [win32]
749747
748 '@rolldown/pluginutils@1.0.0-rc.10':
749 resolution: {integrity: sha512-UkVDEFk1w3mveXeKgaTuYfKWtPbvgck1dT8TUG3bnccrH0XtLTuAyfCoks4Q/M5ZGToSVJTIQYCzy2g/atAOeg==}
750
750751 '@rolldown/pluginutils@1.0.0-rc.7':
751752 resolution: {integrity: sha512-qujRfC8sFVInYSPPMLQByRh7zhwkGFS4+tyMQ83srV1qrxL4g8E2tyxVVyxd0+8QeBM1mIk9KbWxkegRr76XzA==}
752753
753 '@rolldown/pluginutils@1.0.0-rc.9':
754 resolution: {integrity: sha512-w6oiRWgEBl04QkFZgmW+jnU1EC9b57Oihi2ot3HNWIQRqgHp5PnYDia5iZ5FF7rpa4EQdiqMDXjlqKGXBhsoXw==}
755
756754 '@rollup/pluginutils@5.3.0':
757755 resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==}
758756 engines: {node: '>=14.0.0'}
......@@ -981,8 +979,8 @@ packages:
981979 '@types/d3@7.4.3':
982980 resolution: {integrity: sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==}
983981
984 '@types/debug@4.1.12':
985 resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
982 '@types/debug@4.1.13':
983 resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==}
986984
987985 '@types/deep-eql@4.0.2':
988986 resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
......@@ -1039,45 +1037,6 @@ packages:
10391037 '@types/ws@8.18.1':
10401038 resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==}
10411039
1042 '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260318.1':
1043 resolution: {integrity: sha512-hsXZC0M5N2F/KdX/wjRywZPovdGBgWw9ARy0GWCw1dAynqdfDcuceKbUw+QwMSdvvsFbUjSomTlyFdT09p1mcA==}
1044 cpu: [arm64]
1045 os: [darwin]
1046
1047 '@typescript/native-preview-darwin-x64@7.0.0-dev.20260318.1':
1048 resolution: {integrity: sha512-lQl7DQkROqPZrx4C1MpFP0WNxdqv+9r4lErhd+57M2Kmxx1BmX3K5VMLJT9FZQFRtgntnYbwQAQ774Z17fv8rA==}
1049 cpu: [x64]
1050 os: [darwin]
1051
1052 '@typescript/native-preview-linux-arm64@7.0.0-dev.20260318.1':
1053 resolution: {integrity: sha512-1wv0qpJW4okKadShemVi4s7zGuiIRI7zTInRYDV/FfyQVyKrkTOzMtZXB6CF3Reus1HmRpGp5ADyc4MI7CCeJg==}
1054 cpu: [arm64]
1055 os: [linux]
1056
1057 '@typescript/native-preview-linux-arm@7.0.0-dev.20260318.1':
1058 resolution: {integrity: sha512-tE7uN00Po/oBg5VYaYM0C/QXroo6gdIRmFVZl543o46ihl0YKEZBMnyStRKKgPCI9oeYXyCNT6WR4MxSMz6ndA==}
1059 cpu: [arm]
1060 os: [linux]
1061
1062 '@typescript/native-preview-linux-x64@7.0.0-dev.20260318.1':
1063 resolution: {integrity: sha512-aSE7xAKYTOrxsFrIgmcaHjgXSSOnWrZ6ozNBeNxpGzd/gl2Ho3FCIwQb0NCXrDwF9AhpFRtHMWPpAPaJk24+rg==}
1064 cpu: [x64]
1065 os: [linux]
1066
1067 '@typescript/native-preview-win32-arm64@7.0.0-dev.20260318.1':
1068 resolution: {integrity: sha512-TV/Tn8cgWamb+6mvY45X2wF0vrTkQmRFCiN1pRRehEwxslDkqLVlpGAFpZndLaPlMb/wzwVpz1e/926xdAoO1w==}
1069 cpu: [arm64]
1070 os: [win32]
1071
1072 '@typescript/native-preview-win32-x64@7.0.0-dev.20260318.1':
1073 resolution: {integrity: sha512-AgOZODSYeTlQWVTioRG3AxHzIBSLbZZhyK19WPzjHW0LtxCcFi59G/Gn1uIshVL3sp1ESRg9SZ5mSiFdgvfK4g==}
1074 cpu: [x64]
1075 os: [win32]
1076
1077 '@typescript/native-preview@7.0.0-dev.20260318.1':
1078 resolution: {integrity: sha512-/7LF/2x29K++k147445omxNixPANTmwJl9p/IIzK8NbOeqVOFv1Gj1GQyOQqRdT4j/X6YDwO/p400/JKE+cBOw==}
1079 hasBin: true
1080
10811040 '@ungap/structured-clone@1.3.0':
10821041 resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
10831042
......@@ -1097,126 +1056,34 @@ packages:
10971056 babel-plugin-react-compiler:
10981057 optional: true
10991058
1100 '@voidzero-dev/vite-plus-core@0.1.12':
1101 resolution: {integrity: sha512-j8YNe7A+8JcSoddztf5whvom/yJ7OKUO3Y5a3UoLIUmOL8YEKVv5nPANrxJ7eaFfHJoMnBEwzBpq1YVZ+H3uPA==}
1102 engines: {node: ^20.19.0 || >=22.12.0}
1059 '@vitest/expect@4.1.0':
1060 resolution: {integrity: sha512-EIxG7k4wlWweuCLG9Y5InKFwpMEOyrMb6ZJ1ihYu02LVj/bzUwn2VMU+13PinsjRW75XnITeFrQBMH5+dLvCDA==}
1061
1062 '@vitest/mocker@4.1.0':
1063 resolution: {integrity: sha512-evxREh+Hork43+Y4IOhTo+h5lGmVRyjqI739Rz4RlUPqwrkFFDF6EMvOOYjTx4E8Tl6gyCLRL8Mu7Ry12a13Tw==}
11031064 peerDependencies:
1104 '@arethetypeswrong/core': ^0.18.1
1105 '@tsdown/css': 0.21.3
1106 '@tsdown/exe': 0.21.3
1107 '@types/node': ^20.19.0 || >=22.12.0
1108 '@vitejs/devtools': ^0.0.0-alpha.31
1109 esbuild: ^0.27.0
1110 jiti: '>=1.21.0'
1111 less: ^4.0.0
1112 publint: ^0.3.0
1113 sass: ^1.70.0
1114 sass-embedded: ^1.70.0
1115 stylus: '>=0.54.8'
1116 sugarss: ^5.0.0
1117 terser: ^5.16.0
1118 tsx: ^4.8.1
1119 typescript: ^5.0.0
1120 unplugin-unused: ^0.5.0
1121 yaml: ^2.4.2
1065 msw: ^2.4.9
1066 vite: ^6.0.0 || ^7.0.0 || ^8.0.0-0
11221067 peerDependenciesMeta:
1123 '@arethetypeswrong/core':
1124 optional: true
1125 '@tsdown/css':
1126 optional: true
1127 '@tsdown/exe':
1128 optional: true
1129 '@types/node':
1130 optional: true
1131 '@vitejs/devtools':
1132 optional: true
1133 esbuild:
1068 msw:
11341069 optional: true
1135 jiti:
1136 optional: true
1137 less:
1138 optional: true
1139 publint:
1140 optional: true
1141 sass:
1142 optional: true
1143 sass-embedded:
1144 optional: true
1145 stylus:
1070 vite:
11461071 optional: true
1147 sugarss:
1148 optional: true
1149 terser:
1150 optional: true
1151 tsx:
1152 optional: true
1153 typescript:
1154 optional: true
1155 unplugin-unused:
1156 optional: true
1157 yaml:
1158 optional: true
1159
1160 '@voidzero-dev/vite-plus-darwin-arm64@0.1.12':
1161 resolution: {integrity: sha512-tYQrfmcLxIqqr/de00oN7ayu+rYobEOjyR9AxoeJoNUqRyNQCdT0A5vg78kJNPaQCyL6ctgRRvpEKr0WHVmduQ==}
1162 engines: {node: ^20.19.0 || >=22.12.0}
1163 cpu: [arm64]
1164 os: [darwin]
1165
1166 '@voidzero-dev/vite-plus-darwin-x64@0.1.12':
1167 resolution: {integrity: sha512-852hO/Onx9Z5u0tOYOVEUVzYJUmWdlHeqYnNT6pj0IClgVp0+KSabxr7A2paTWEFWp6XbKWvqw5Y5cVwUV3A6Q==}
1168 engines: {node: ^20.19.0 || >=22.12.0}
1169 cpu: [x64]
1170 os: [darwin]
11711072
1172 '@voidzero-dev/vite-plus-linux-arm64-gnu@0.1.12':
1173 resolution: {integrity: sha512-/gTh4tGyJKCNBn9SZUs3sq9QVRUmyuyseZefBgS223QRxdwFaxc7tIKaw91X59WXXYOzUYZOD5zsTcaIF4hc9A==}
1174 engines: {node: ^20.19.0 || >=22.12.0}
1175 cpu: [arm64]
1176 os: [linux]
1073 '@vitest/pretty-format@4.1.0':
1074 resolution: {integrity: sha512-3RZLZlh88Ib0J7NQTRATfc/3ZPOnSUn2uDBUoGNn5T36+bALixmzphN26OUD3LRXWkJu4H0s5vvUeqBiw+kS0A==}
11771075
1178 '@voidzero-dev/vite-plus-linux-x64-gnu@0.1.12':
1179 resolution: {integrity: sha512-9oN9ITjK/Xq9Werx+6G6jnI3+F1S3g9lB36J1VAHyRlAEtuiCDV0E3YMoW2O7KzM/PlodZIZ8LStVkH7aA5ZCw==}
1180 engines: {node: ^20.19.0 || >=22.12.0}
1181 cpu: [x64]
1182 os: [linux]
1076 '@vitest/runner@4.1.0':
1077 resolution: {integrity: sha512-Duvx2OzQ7d6OjchL+trw+aSrb9idh7pnNfxrklo14p3zmNL4qPCDeIJAK+eBKYjkIwG96Bc6vYuxhqDXQOWpoQ==}
11831078
1184 '@voidzero-dev/vite-plus-test@0.1.12':
1185 resolution: {integrity: sha512-EE8Y2vQvqS4c/1qSa7qlhUY9koAG6wYev0NFAtDZsijQCHUqE7nYXGJYnyUInAE6GX4zlQDGg7tf2DAl+CISYw==}
1186 engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0}
1187 peerDependencies:
1188 '@edge-runtime/vm': '*'
1189 '@opentelemetry/api': ^1.9.0
1190 '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0
1191 '@vitest/ui': 4.1.0
1192 happy-dom: '*'
1193 jsdom: '*'
1194 vite: ^6.0.0 || ^7.0.0 || ^8.0.0-0
1195 peerDependenciesMeta:
1196 '@edge-runtime/vm':
1197 optional: true
1198 '@opentelemetry/api':
1199 optional: true
1200 '@types/node':
1201 optional: true
1202 '@vitest/ui':
1203 optional: true
1204 happy-dom:
1205 optional: true
1206 jsdom:
1207 optional: true
1079 '@vitest/snapshot@4.1.0':
1080 resolution: {integrity: sha512-0Vy9euT1kgsnj1CHttwi9i9o+4rRLEaPRSOJ5gyv579GJkNpgJK+B4HSv/rAWixx2wdAFci1X4CEPjiu2bXIMg==}
12081081
1209 '@voidzero-dev/vite-plus-win32-arm64-msvc@0.1.12':
1210 resolution: {integrity: sha512-JanAb6Y+6BmPhKNLvpZB/syeyY99bt7EPJCaLlbaCt3V0Y2Iw7c7dWBM4Sg4GZ7szGYdGw385fRz0n2M32f1rg==}
1211 engines: {node: ^20.19.0 || >=22.12.0}
1212 cpu: [arm64]
1213 os: [win32]
1082 '@vitest/spy@4.1.0':
1083 resolution: {integrity: sha512-pz77k+PgNpyMDv2FV6qmk5ZVau6c3R8HC8v342T2xlFxQKTrSeYw9waIJG8KgV9fFwAtTu4ceRzMivPTH6wSxw==}
12141084
1215 '@voidzero-dev/vite-plus-win32-x64-msvc@0.1.12':
1216 resolution: {integrity: sha512-Ei/UtTTp7UgeEGyV83jhDpSMXhwaZZzfS7Xiaj+zj80GGOwsBre0i+oHGZ7+TuVsZ7Im0sD8IZ9enCpKpV//AQ==}
1217 engines: {node: ^20.19.0 || >=22.12.0}
1218 cpu: [x64]
1219 os: [win32]
1085 '@vitest/utils@4.1.0':
1086 resolution: {integrity: sha512-XfPXT6a8TZY3dcGY8EdwsBulFCIw+BeeX0RZn2x/BtiY/75YGh8FeWGG8QISN/WhaqSrE2OrlDgtF8q5uhOTmw==}
12201087
12211088 acorn@8.16.0:
12221089 resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==}
......@@ -1241,8 +1108,8 @@ packages:
12411108 bail@2.0.2:
12421109 resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
12431110
1244 baseline-browser-mapping@2.10.8:
1245 resolution: {integrity: sha512-PCLz/LXGBsNTErbtB6i5u4eLpHeMfi93aUv5duMmj6caNu6IphS4q6UevDnL36sZQv9lrP11dbPKGMaXPwMKfQ==}
1111 baseline-browser-mapping@2.10.9:
1112 resolution: {integrity: sha512-OZd0e2mU11ClX8+IdXe3r0dbqMEznRiT4TfbhYIbcRPZkqJ7Qwer8ij3GZAmLsRKa+II9V1v5czCkvmHH3XZBg==}
12461113 engines: {node: '>=6.0.0'}
12471114 hasBin: true
12481115
......@@ -1256,16 +1123,16 @@ packages:
12561123 engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
12571124 hasBin: true
12581125
1259 cac@6.7.14:
1260 resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
1261 engines: {node: '>=8'}
1262
12631126 caniuse-lite@1.0.30001780:
12641127 resolution: {integrity: sha512-llngX0E7nQci5BPJDqoZSbuZ5Bcs9F5db7EtgfwBerX9XGtkkiO4NwfDDIRzHTTwcYC8vC7bmeUEPGrKlR/TkQ==}
12651128
12661129 ccount@2.0.1:
12671130 resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
12681131
1132 chai@6.2.2:
1133 resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==}
1134 engines: {node: '>=18'}
1135
12691136 character-entities-html4@2.1.0:
12701137 resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
12711138
......@@ -1317,10 +1184,6 @@ packages:
13171184 cose-base@2.2.0:
13181185 resolution: {integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==}
13191186
1320 cross-spawn@7.0.6:
1321 resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
1322 engines: {node: '>= 8'}
1323
13241187 cssesc@3.0.0:
13251188 resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
13261189 engines: {node: '>=4'}
......@@ -1535,8 +1398,8 @@ packages:
15351398 resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==}
15361399 engines: {node: '>=0.12'}
15371400
1538 es-module-lexer@1.7.0:
1539 resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
1401 es-module-lexer@2.0.0:
1402 resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==}
15401403
15411404 esbuild@0.25.12:
15421405 resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==}
......@@ -1560,6 +1423,10 @@ packages:
15601423 estree-walker@3.0.3:
15611424 resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
15621425
1426 expect-type@1.3.0:
1427 resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==}
1428 engines: {node: '>=12.0.0'}
1429
15631430 extend@3.0.2:
15641431 resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
15651432
......@@ -1651,9 +1518,6 @@ packages:
16511518 resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
16521519 engines: {node: '>=12'}
16531520
1654 isexe@2.0.0:
1655 resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
1656
16571521 jiti@2.6.1:
16581522 resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
16591523 hasBin: true
......@@ -1671,8 +1535,8 @@ packages:
16711535 engines: {node: '>=6'}
16721536 hasBin: true
16731537
1674 katex@0.16.38:
1675 resolution: {integrity: sha512-cjHooZUmIAUmDsHBN+1n8LaZdpmbj03LtYeYPyuYB7OuloiaeaV6N4LcfjcnHVzGWjVQmKrxxTrpDcmSzEZQwQ==}
1538 katex@0.16.39:
1539 resolution: {integrity: sha512-FR2f6y85+81ZLO0GPhyQ+EJl/E5ILNWltJhpAeOTzRny952Z13x2867lTFDmvMZix//Ux3CuMQ2VkLXRbUwOFg==}
16761540 hasBin: true
16771541
16781542 khroma@2.1.0:
......@@ -1923,12 +1787,8 @@ packages:
19231787 micromark@4.0.2:
19241788 resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==}
19251789
1926 mlly@1.8.1:
1927 resolution: {integrity: sha512-SnL6sNutTwRWWR/vcmCYHSADjiEesp5TGQQ0pXyLhW5IoeibRlF/CbSLailbB3CNqJUk9cVJ9dUDnbD7GrcHBQ==}
1928
1929 mrmime@2.0.1:
1930 resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==}
1931 engines: {node: '>=10'}
1790 mlly@1.8.2:
1791 resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==}
19321792
19331793 ms@2.1.3:
19341794 resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
......@@ -1953,8 +1813,8 @@ packages:
19531813 resolution: {integrity: sha512-TdrKhDZCgEYqONFo/j+KvGan7/k3tP5Ouz88wCqpOvJtI2QmcLfGsm1fcMvDnTik48Jj6z83IJBqlkmK9DnY1A==}
19541814 hasBin: true
19551815
1956 oxlint@1.55.0:
1957 resolution: {integrity: sha512-T+FjepiyWpaZMhekqRpH8Z3I4vNM610p6w+Vjfqgj5TZUxHXl7N8N5IPvmOU8U4XdTRxqtNNTh9Y4hLtr7yvFg==}
1816 oxlint@1.56.0:
1817 resolution: {integrity: sha512-Q+5Mj5PVaH/R6/fhMMFzw4dT+KPB+kQW4kaL8FOIq7tfhlnEVp6+3lcWqFruuTNlUo9srZUW3qH7Id4pskeR6g==}
19581818 engines: {node: ^20.19.0 || >=22.12.0}
19591819 hasBin: true
19601820 peerDependencies:
......@@ -1975,10 +1835,6 @@ packages:
19751835 path-data-parser@0.1.0:
19761836 resolution: {integrity: sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==}
19771837
1978 path-key@3.1.1:
1979 resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
1980 engines: {node: '>=8'}
1981
19821838 pathe@2.0.3:
19831839 resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
19841840
......@@ -1989,17 +1845,9 @@ packages:
19891845 resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
19901846 engines: {node: '>=12'}
19911847
1992 pixelmatch@7.1.0:
1993 resolution: {integrity: sha512-1wrVzJ2STrpmONHKBy228LM1b84msXDUoAzVEl0R8Mz4Ce6EPr+IVtxm8+yvrqLYMHswREkjYFaMxnyGnaY3Ng==}
1994 hasBin: true
1995
19961848 pkg-types@1.3.1:
19971849 resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
19981850
1999 pngjs@7.0.0:
2000 resolution: {integrity: sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==}
2001 engines: {node: '>=14.19.0'}
2002
20031851 points-on-curve@0.2.0:
20041852 resolution: {integrity: sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==}
20051853
......@@ -2083,8 +1931,8 @@ packages:
20831931 robust-predicates@3.0.2:
20841932 resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==}
20851933
2086 rolldown@1.0.0-rc.9:
2087 resolution: {integrity: sha512-9EbgWge7ZH+yqb4d2EnELAntgPTWbfL8ajiTW+SyhJEC4qhBbkCKbqFV4Ge4zmu5ziQuVbWxb/XwLZ+RIO7E8Q==}
1934 rolldown@1.0.0-rc.10:
1935 resolution: {integrity: sha512-q7j6vvarRFmKpgJUT8HCAUljkgzEp4LAhPlJUvQhA5LA1SUL36s5QCysMutErzL3EbNOZOkoziSx9iZC4FddKA==}
20881936 engines: {node: ^20.19.0 || >=22.12.0}
20891937 hasBin: true
20901938
......@@ -2104,17 +1952,8 @@ packages:
21041952 resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
21051953 hasBin: true
21061954
2107 shebang-command@2.0.0:
2108 resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
2109 engines: {node: '>=8'}
2110
2111 shebang-regex@3.0.0:
2112 resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
2113 engines: {node: '>=8'}
2114
2115 sirv@3.0.2:
2116 resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==}
2117 engines: {node: '>=18'}
1955 siginfo@2.0.0:
1956 resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
21181957
21191958 sisteransi@1.0.5:
21201959 resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
......@@ -2126,6 +1965,9 @@ packages:
21261965 space-separated-tokens@2.0.2:
21271966 resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
21281967
1968 stackback@0.0.2:
1969 resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
1970
21291971 std-env@4.0.0:
21301972 resolution: {integrity: sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==}
21311973
......@@ -2172,9 +2014,9 @@ packages:
21722014 resolution: {integrity: sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==}
21732015 engines: {node: ^20.0.0 || >=22.0.0}
21742016
2175 totalist@3.0.1:
2176 resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
2177 engines: {node: '>=6'}
2017 tinyrainbow@3.1.0:
2018 resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==}
2019 engines: {node: '>=14.0.0'}
21782020
21792021 trim-lines@3.0.1:
21802022 resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
......@@ -2247,18 +2089,13 @@ packages:
22472089 vfile@6.0.3:
22482090 resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
22492091
2250 vite-plus@0.1.12:
2251 resolution: {integrity: sha512-8s1RzomZkgrJRiwiYWGq3R0txFPYfBBJGp73XNHQnme0KTTVH5dNm/E2GNyBSMFJbeeF7eh1OSgqWVc2FpR6eA==}
2252 engines: {node: ^20.19.0 || >=22.12.0}
2253 hasBin: true
2254
2255 vite@8.0.0:
2256 resolution: {integrity: sha512-fPGaRNj9Zytaf8LEiBhY7Z6ijnFKdzU/+mL8EFBaKr7Vw1/FWcTBAMW0wLPJAGMPX38ZPVCVgLceWiEqeoqL2Q==}
2092 vite@8.0.1:
2093 resolution: {integrity: sha512-wt+Z2qIhfFt85uiyRt5LPU4oVEJBXj8hZNWKeqFG4gRG/0RaRGJ7njQCwzFVjO+v4+Ipmf5CY7VdmZRAYYBPHw==}
22572094 engines: {node: ^20.19.0 || >=22.12.0}
22582095 hasBin: true
22592096 peerDependencies:
22602097 '@types/node': ^20.19.0 || >=22.12.0
2261 '@vitejs/devtools': ^0.0.0-alpha.31
2098 '@vitejs/devtools': ^0.1.0
22622099 esbuild: ^0.27.0
22632100 jiti: '>=1.21.0'
22642101 less: ^4.0.0
......@@ -2295,6 +2132,41 @@ packages:
22952132 yaml:
22962133 optional: true
22972134
2135 vitest@4.1.0:
2136 resolution: {integrity: sha512-YbDrMF9jM2Lqc++2530UourxZHmkKLxrs4+mYhEwqWS97WJ7wOYEkcr+QfRgJ3PW9wz3odRijLZjHEaRLTNbqw==}
2137 engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0}
2138 hasBin: true
2139 peerDependencies:
2140 '@edge-runtime/vm': '*'
2141 '@opentelemetry/api': ^1.9.0
2142 '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0
2143 '@vitest/browser-playwright': 4.1.0
2144 '@vitest/browser-preview': 4.1.0
2145 '@vitest/browser-webdriverio': 4.1.0
2146 '@vitest/ui': 4.1.0
2147 happy-dom: '*'
2148 jsdom: '*'
2149 vite: ^6.0.0 || ^7.0.0 || ^8.0.0-0
2150 peerDependenciesMeta:
2151 '@edge-runtime/vm':
2152 optional: true
2153 '@opentelemetry/api':
2154 optional: true
2155 '@types/node':
2156 optional: true
2157 '@vitest/browser-playwright':
2158 optional: true
2159 '@vitest/browser-preview':
2160 optional: true
2161 '@vitest/browser-webdriverio':
2162 optional: true
2163 '@vitest/ui':
2164 optional: true
2165 happy-dom:
2166 optional: true
2167 jsdom:
2168 optional: true
2169
22982170 vscode-jsonrpc@8.2.0:
22992171 resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==}
23002172 engines: {node: '>=14.0.0'}
......@@ -2325,9 +2197,9 @@ packages:
23252197 resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==}
23262198 engines: {node: '>=12'}
23272199
2328 which@2.0.2:
2329 resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
2330 engines: {node: '>= 8'}
2200 why-is-node-running@2.3.0:
2201 resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
2202 engines: {node: '>=8'}
23312203 hasBin: true
23322204
23332205 ws@8.19.0:
......@@ -2481,13 +2353,13 @@ snapshots:
24812353
24822354 '@chevrotain/utils@11.1.2': {}
24832355
2484 '@emnapi/core@1.9.0':
2356 '@emnapi/core@1.9.1':
24852357 dependencies:
24862358 '@emnapi/wasi-threads': 1.2.0
24872359 tslib: 2.8.1
24882360 optional: true
24892361
2490 '@emnapi/runtime@1.9.0':
2362 '@emnapi/runtime@1.9.1':
24912363 dependencies:
24922364 tslib: 2.8.1
24932365 optional: true
......@@ -2581,7 +2453,7 @@ snapshots:
25812453 dependencies:
25822454 '@antfu/install-pkg': 1.1.0
25832455 '@iconify/types': 2.0.0
2584 mlly: 1.8.1
2456 mlly: 1.8.2
25852457
25862458 '@jridgewell/gen-mapping@0.3.13':
25872459 dependencies:
......@@ -2610,14 +2482,12 @@ snapshots:
26102482
26112483 '@napi-rs/wasm-runtime@1.1.1':
26122484 dependencies:
2613 '@emnapi/core': 1.9.0
2614 '@emnapi/runtime': 1.9.0
2485 '@emnapi/core': 1.9.1
2486 '@emnapi/runtime': 1.9.1
26152487 '@tybys/wasm-util': 0.10.1
26162488 optional: true
26172489
2618 '@oxc-project/runtime@0.115.0': {}
2619
2620 '@oxc-project/types@0.115.0': {}
2490 '@oxc-project/types@0.120.0': {}
26212491
26222492 '@oxfmt/binding-android-arm-eabi@0.40.0':
26232493 optional: true
......@@ -2694,65 +2564,63 @@ snapshots:
26942564 '@oxlint-tsgolint/win32-x64@0.17.0':
26952565 optional: true
26962566
2697 '@oxlint/binding-android-arm-eabi@1.55.0':
2567 '@oxlint/binding-android-arm-eabi@1.56.0':
26982568 optional: true
26992569
2700 '@oxlint/binding-android-arm64@1.55.0':
2570 '@oxlint/binding-android-arm64@1.56.0':
27012571 optional: true
27022572
2703 '@oxlint/binding-darwin-arm64@1.55.0':
2573 '@oxlint/binding-darwin-arm64@1.56.0':
27042574 optional: true
27052575
2706 '@oxlint/binding-darwin-x64@1.55.0':
2576 '@oxlint/binding-darwin-x64@1.56.0':
27072577 optional: true
27082578
2709 '@oxlint/binding-freebsd-x64@1.55.0':
2579 '@oxlint/binding-freebsd-x64@1.56.0':
27102580 optional: true
27112581
2712 '@oxlint/binding-linux-arm-gnueabihf@1.55.0':
2582 '@oxlint/binding-linux-arm-gnueabihf@1.56.0':
27132583 optional: true
27142584
2715 '@oxlint/binding-linux-arm-musleabihf@1.55.0':
2585 '@oxlint/binding-linux-arm-musleabihf@1.56.0':
27162586 optional: true
27172587
2718 '@oxlint/binding-linux-arm64-gnu@1.55.0':
2588 '@oxlint/binding-linux-arm64-gnu@1.56.0':
27192589 optional: true
27202590
2721 '@oxlint/binding-linux-arm64-musl@1.55.0':
2591 '@oxlint/binding-linux-arm64-musl@1.56.0':
27222592 optional: true
27232593
2724 '@oxlint/binding-linux-ppc64-gnu@1.55.0':
2594 '@oxlint/binding-linux-ppc64-gnu@1.56.0':
27252595 optional: true
27262596
2727 '@oxlint/binding-linux-riscv64-gnu@1.55.0':
2597 '@oxlint/binding-linux-riscv64-gnu@1.56.0':
27282598 optional: true
27292599
2730 '@oxlint/binding-linux-riscv64-musl@1.55.0':
2600 '@oxlint/binding-linux-riscv64-musl@1.56.0':
27312601 optional: true
27322602
2733 '@oxlint/binding-linux-s390x-gnu@1.55.0':
2603 '@oxlint/binding-linux-s390x-gnu@1.56.0':
27342604 optional: true
27352605
2736 '@oxlint/binding-linux-x64-gnu@1.55.0':
2606 '@oxlint/binding-linux-x64-gnu@1.56.0':
27372607 optional: true
27382608
2739 '@oxlint/binding-linux-x64-musl@1.55.0':
2609 '@oxlint/binding-linux-x64-musl@1.56.0':
27402610 optional: true
27412611
2742 '@oxlint/binding-openharmony-arm64@1.55.0':
2612 '@oxlint/binding-openharmony-arm64@1.56.0':
27432613 optional: true
27442614
2745 '@oxlint/binding-win32-arm64-msvc@1.55.0':
2615 '@oxlint/binding-win32-arm64-msvc@1.56.0':
27462616 optional: true
27472617
2748 '@oxlint/binding-win32-ia32-msvc@1.55.0':
2618 '@oxlint/binding-win32-ia32-msvc@1.56.0':
27492619 optional: true
27502620
2751 '@oxlint/binding-win32-x64-msvc@1.55.0':
2621 '@oxlint/binding-win32-x64-msvc@1.56.0':
27522622 optional: true
27532623
2754 '@polka/url@1.0.0-next.29': {}
2755
27562624 '@preact/signals-core@1.14.0': {}
27572625
27582626 '@preact/signals@1.3.4(preact@10.29.0)':
......@@ -2760,56 +2628,56 @@ snapshots:
27602628 '@preact/signals-core': 1.14.0
27612629 preact: 10.29.0
27622630
2763 '@rolldown/binding-android-arm64@1.0.0-rc.9':
2631 '@rolldown/binding-android-arm64@1.0.0-rc.10':
27642632 optional: true
27652633
2766 '@rolldown/binding-darwin-arm64@1.0.0-rc.9':
2634 '@rolldown/binding-darwin-arm64@1.0.0-rc.10':
27672635 optional: true
27682636
2769 '@rolldown/binding-darwin-x64@1.0.0-rc.9':
2637 '@rolldown/binding-darwin-x64@1.0.0-rc.10':
27702638 optional: true
27712639
2772 '@rolldown/binding-freebsd-x64@1.0.0-rc.9':
2640 '@rolldown/binding-freebsd-x64@1.0.0-rc.10':
27732641 optional: true
27742642
2775 '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.9':
2643 '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.10':
27762644 optional: true
27772645
2778 '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.9':
2646 '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.10':
27792647 optional: true
27802648
2781 '@rolldown/binding-linux-arm64-musl@1.0.0-rc.9':
2649 '@rolldown/binding-linux-arm64-musl@1.0.0-rc.10':
27822650 optional: true
27832651
2784 '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.9':
2652 '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.10':
27852653 optional: true
27862654
2787 '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.9':
2655 '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.10':
27882656 optional: true
27892657
2790 '@rolldown/binding-linux-x64-gnu@1.0.0-rc.9':
2658 '@rolldown/binding-linux-x64-gnu@1.0.0-rc.10':
27912659 optional: true
27922660
2793 '@rolldown/binding-linux-x64-musl@1.0.0-rc.9':
2661 '@rolldown/binding-linux-x64-musl@1.0.0-rc.10':
27942662 optional: true
27952663
2796 '@rolldown/binding-openharmony-arm64@1.0.0-rc.9':
2664 '@rolldown/binding-openharmony-arm64@1.0.0-rc.10':
27972665 optional: true
27982666
2799 '@rolldown/binding-wasm32-wasi@1.0.0-rc.9':
2667 '@rolldown/binding-wasm32-wasi@1.0.0-rc.10':
28002668 dependencies:
28012669 '@napi-rs/wasm-runtime': 1.1.1
28022670 optional: true
28032671
2804 '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.9':
2672 '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.10':
28052673 optional: true
28062674
2807 '@rolldown/binding-win32-x64-msvc@1.0.0-rc.9':
2675 '@rolldown/binding-win32-x64-msvc@1.0.0-rc.10':
28082676 optional: true
28092677
2810 '@rolldown/pluginutils@1.0.0-rc.7': {}
2678 '@rolldown/pluginutils@1.0.0-rc.10': {}
28112679
2812 '@rolldown/pluginutils@1.0.0-rc.9': {}
2680 '@rolldown/pluginutils@1.0.0-rc.7': {}
28132681
28142682 '@rollup/pluginutils@5.3.0':
28152683 dependencies:
......@@ -2885,12 +2753,12 @@ snapshots:
28852753 postcss-selector-parser: 6.0.10
28862754 tailwindcss: 4.2.2
28872755
2888 '@tailwindcss/vite@4.2.2(vite@8.0.0(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2))':
2756 '@tailwindcss/vite@4.2.2(vite@8.0.1(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2))':
28892757 dependencies:
28902758 '@tailwindcss/node': 4.2.2
28912759 '@tailwindcss/oxide': 4.2.2
28922760 tailwindcss: 4.2.2
2893 vite: 8.0.0(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2)
2761 vite: 8.0.1(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2)
28942762
28952763 '@testing-library/dom@10.4.1':
28962764 dependencies:
......@@ -3042,7 +2910,7 @@ snapshots:
30422910 '@types/d3-transition': 3.0.9
30432911 '@types/d3-zoom': 3.0.8
30442912
3045 '@types/debug@4.1.12':
2913 '@types/debug@4.1.13':
30462914 dependencies:
30472915 '@types/ms': 2.1.0
30482916
......@@ -3093,44 +2961,11 @@ snapshots:
30932961
30942962 '@types/unist@3.0.3': {}
30952963
3096 '@types/whatwg-mimetype@3.0.2':
3097 optional: true
2964 '@types/whatwg-mimetype@3.0.2': {}
30982965
30992966 '@types/ws@8.18.1':
31002967 dependencies:
31012968 '@types/node': 25.5.0
3102 optional: true
3103
3104 '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260318.1':
3105 optional: true
3106
3107 '@typescript/native-preview-darwin-x64@7.0.0-dev.20260318.1':
3108 optional: true
3109
3110 '@typescript/native-preview-linux-arm64@7.0.0-dev.20260318.1':
3111 optional: true
3112
3113 '@typescript/native-preview-linux-arm@7.0.0-dev.20260318.1':
3114 optional: true
3115
3116 '@typescript/native-preview-linux-x64@7.0.0-dev.20260318.1':
3117 optional: true
3118
3119 '@typescript/native-preview-win32-arm64@7.0.0-dev.20260318.1':
3120 optional: true
3121
3122 '@typescript/native-preview-win32-x64@7.0.0-dev.20260318.1':
3123 optional: true
3124
3125 '@typescript/native-preview@7.0.0-dev.20260318.1':
3126 optionalDependencies:
3127 '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20260318.1
3128 '@typescript/native-preview-darwin-x64': 7.0.0-dev.20260318.1
3129 '@typescript/native-preview-linux-arm': 7.0.0-dev.20260318.1
3130 '@typescript/native-preview-linux-arm64': 7.0.0-dev.20260318.1
3131 '@typescript/native-preview-linux-x64': 7.0.0-dev.20260318.1
3132 '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260318.1
3133 '@typescript/native-preview-win32-x64': 7.0.0-dev.20260318.1
31342969
31352970 '@ungap/structured-clone@1.3.0': {}
31362971
......@@ -3139,81 +2974,51 @@ snapshots:
31392974 d3-selection: 3.0.0
31402975 d3-transition: 3.0.1(d3-selection@3.0.0)
31412976
3142 '@vitejs/plugin-react@6.0.1(vite@8.0.0(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2))':
2977 '@vitejs/plugin-react@6.0.1(vite@8.0.1(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2))':
31432978 dependencies:
31442979 '@rolldown/pluginutils': 1.0.0-rc.7
3145 vite: 8.0.0(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2)
2980 vite: 8.0.1(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2)
31462981
3147 '@voidzero-dev/vite-plus-core@0.1.12(@types/node@25.5.0)(jiti@2.6.1)(typescript@5.9.3)(yaml@2.8.2)':
2982 '@vitest/expect@4.1.0':
31482983 dependencies:
3149 '@oxc-project/runtime': 0.115.0
3150 '@oxc-project/types': 0.115.0
3151 lightningcss: 1.32.0
3152 postcss: 8.5.8
3153 optionalDependencies:
3154 '@types/node': 25.5.0
3155 fsevents: 2.3.3
3156 jiti: 2.6.1
3157 typescript: 5.9.3
3158 yaml: 2.8.2
3159
3160 '@voidzero-dev/vite-plus-darwin-arm64@0.1.12':
3161 optional: true
2984 '@standard-schema/spec': 1.1.0
2985 '@types/chai': 5.2.3
2986 '@vitest/spy': 4.1.0
2987 '@vitest/utils': 4.1.0
2988 chai: 6.2.2
2989 tinyrainbow: 3.1.0
31622990
3163 '@voidzero-dev/vite-plus-darwin-x64@0.1.12':
3164 optional: true
2991 '@vitest/mocker@4.1.0(vite@8.0.1(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2))':
2992 dependencies:
2993 '@vitest/spy': 4.1.0
2994 estree-walker: 3.0.3
2995 magic-string: 0.30.21
2996 optionalDependencies:
2997 vite: 8.0.1(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2)
31652998
3166 '@voidzero-dev/vite-plus-linux-arm64-gnu@0.1.12':
3167 optional: true
2999 '@vitest/pretty-format@4.1.0':
3000 dependencies:
3001 tinyrainbow: 3.1.0
31683002
3169 '@voidzero-dev/vite-plus-linux-x64-gnu@0.1.12':
3170 optional: true
3003 '@vitest/runner@4.1.0':
3004 dependencies:
3005 '@vitest/utils': 4.1.0
3006 pathe: 2.0.3
31713007
3172 '@voidzero-dev/vite-plus-test@0.1.12(@types/node@25.5.0)(happy-dom@20.8.4)(jiti@2.6.1)(typescript@5.9.3)(vite@8.0.0(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2))(yaml@2.8.2)':
3008 '@vitest/snapshot@4.1.0':
31733009 dependencies:
3174 '@standard-schema/spec': 1.1.0
3175 '@types/chai': 5.2.3
3176 '@voidzero-dev/vite-plus-core': 0.1.12(@types/node@25.5.0)(jiti@2.6.1)(typescript@5.9.3)(yaml@2.8.2)
3177 es-module-lexer: 1.7.0
3178 obug: 2.1.1
3179 pixelmatch: 7.1.0
3180 pngjs: 7.0.0
3181 sirv: 3.0.2
3182 std-env: 4.0.0
3183 tinybench: 2.9.0
3184 tinyexec: 1.0.4
3185 tinyglobby: 0.2.15
3186 vite: 8.0.0(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2)
3187 ws: 8.19.0
3188 optionalDependencies:
3189 '@types/node': 25.5.0
3190 happy-dom: 20.8.4
3191 transitivePeerDependencies:
3192 - '@arethetypeswrong/core'
3193 - '@tsdown/css'
3194 - '@tsdown/exe'
3195 - '@vitejs/devtools'
3196 - bufferutil
3197 - esbuild
3198 - jiti
3199 - less
3200 - publint
3201 - sass
3202 - sass-embedded
3203 - stylus
3204 - sugarss
3205 - terser
3206 - tsx
3207 - typescript
3208 - unplugin-unused
3209 - utf-8-validate
3210 - yaml
3010 '@vitest/pretty-format': 4.1.0
3011 '@vitest/utils': 4.1.0
3012 magic-string: 0.30.21
3013 pathe: 2.0.3
32113014
3212 '@voidzero-dev/vite-plus-win32-arm64-msvc@0.1.12':
3213 optional: true
3015 '@vitest/spy@4.1.0': {}
32143016
3215 '@voidzero-dev/vite-plus-win32-x64-msvc@0.1.12':
3216 optional: true
3017 '@vitest/utils@4.1.0':
3018 dependencies:
3019 '@vitest/pretty-format': 4.1.0
3020 convert-source-map: 2.0.0
3021 tinyrainbow: 3.1.0
32173022
32183023 acorn@8.16.0: {}
32193024
......@@ -3229,7 +3034,7 @@ snapshots:
32293034
32303035 bail@2.0.2: {}
32313036
3232 baseline-browser-mapping@2.10.8: {}
3037 baseline-browser-mapping@2.10.9: {}
32333038
32343039 bippy@0.5.32(@types/react@19.2.14)(react@19.2.4):
32353040 dependencies:
......@@ -3240,18 +3045,18 @@ snapshots:
32403045
32413046 browserslist@4.28.1:
32423047 dependencies:
3243 baseline-browser-mapping: 2.10.8
3048 baseline-browser-mapping: 2.10.9
32443049 caniuse-lite: 1.0.30001780
32453050 electron-to-chromium: 1.5.321
32463051 node-releases: 2.0.36
32473052 update-browserslist-db: 1.2.3(browserslist@4.28.1)
32483053
3249 cac@6.7.14: {}
3250
32513054 caniuse-lite@1.0.30001780: {}
32523055
32533056 ccount@2.0.1: {}
32543057
3058 chai@6.2.2: {}
3059
32553060 character-entities-html4@2.1.0: {}
32563061
32573062 character-entities-legacy@3.0.0: {}
......@@ -3296,12 +3101,6 @@ snapshots:
32963101 dependencies:
32973102 layout-base: 2.0.1
32983103
3299 cross-spawn@7.0.6:
3300 dependencies:
3301 path-key: 3.1.1
3302 shebang-command: 2.0.0
3303 which: 2.0.2
3304
33053104 cssesc@3.0.0: {}
33063105
33073106 csstype@3.2.3: {}
......@@ -3527,10 +3326,9 @@ snapshots:
35273326
35283327 entities@6.0.1: {}
35293328
3530 entities@7.0.1:
3531 optional: true
3329 entities@7.0.1: {}
35323330
3533 es-module-lexer@1.7.0: {}
3331 es-module-lexer@2.0.0: {}
35343332
35353333 esbuild@0.25.12:
35363334 optionalDependencies:
......@@ -3573,6 +3371,8 @@ snapshots:
35733371 dependencies:
35743372 '@types/estree': 1.0.8
35753373
3374 expect-type@1.3.0: {}
3375
35763376 extend@3.0.2: {}
35773377
35783378 fdir@6.5.0(picomatch@4.0.3):
......@@ -3599,7 +3399,6 @@ snapshots:
35993399 transitivePeerDependencies:
36003400 - bufferutil
36013401 - utf-8-validate
3602 optional: true
36033402
36043403 hast-util-from-parse5@8.0.3:
36053404 dependencies:
......@@ -3707,8 +3506,6 @@ snapshots:
37073506
37083507 is-plain-obj@4.1.0: {}
37093508
3710 isexe@2.0.0: {}
3711
37123509 jiti@2.6.1: {}
37133510
37143511 js-tokens@4.0.0: {}
......@@ -3717,7 +3514,7 @@ snapshots:
37173514
37183515 json5@2.2.3: {}
37193516
3720 katex@0.16.38:
3517 katex@0.16.39:
37213518 dependencies:
37223519 commander: 8.3.0
37233520
......@@ -3974,7 +3771,7 @@ snapshots:
39743771 dagre-d3-es: 7.0.14
39753772 dayjs: 1.11.20
39763773 dompurify: 3.3.3
3977 katex: 0.16.38
3774 katex: 0.16.39
39783775 khroma: 2.1.0
39793776 lodash-es: 4.17.23
39803777 marked: 16.4.2
......@@ -4154,7 +3951,7 @@ snapshots:
41543951
41553952 micromark@4.0.2:
41563953 dependencies:
4157 '@types/debug': 4.1.12
3954 '@types/debug': 4.1.13
41583955 debug: 4.4.3
41593956 decode-named-character-reference: 1.3.0
41603957 devlop: 1.1.0
......@@ -4174,15 +3971,13 @@ snapshots:
41743971 transitivePeerDependencies:
41753972 - supports-color
41763973
4177 mlly@1.8.1:
3974 mlly@1.8.2:
41783975 dependencies:
41793976 acorn: 8.16.0
41803977 pathe: 2.0.3
41813978 pkg-types: 1.3.1
41823979 ufo: 1.6.3
41833980
4184 mrmime@2.0.1: {}
4185
41863981 ms@2.1.3: {}
41873982
41883983 nanoid@3.3.11: {}
......@@ -4223,28 +4018,29 @@ snapshots:
42234018 '@oxlint-tsgolint/linux-x64': 0.17.0
42244019 '@oxlint-tsgolint/win32-arm64': 0.17.0
42254020 '@oxlint-tsgolint/win32-x64': 0.17.0
4021 optional: true
42264022
4227 oxlint@1.55.0(oxlint-tsgolint@0.17.0):
4023 oxlint@1.56.0(oxlint-tsgolint@0.17.0):
42284024 optionalDependencies:
4229 '@oxlint/binding-android-arm-eabi': 1.55.0
4230 '@oxlint/binding-android-arm64': 1.55.0
4231 '@oxlint/binding-darwin-arm64': 1.55.0
4232 '@oxlint/binding-darwin-x64': 1.55.0
4233 '@oxlint/binding-freebsd-x64': 1.55.0
4234 '@oxlint/binding-linux-arm-gnueabihf': 1.55.0
4235 '@oxlint/binding-linux-arm-musleabihf': 1.55.0
4236 '@oxlint/binding-linux-arm64-gnu': 1.55.0
4237 '@oxlint/binding-linux-arm64-musl': 1.55.0
4238 '@oxlint/binding-linux-ppc64-gnu': 1.55.0
4239 '@oxlint/binding-linux-riscv64-gnu': 1.55.0
4240 '@oxlint/binding-linux-riscv64-musl': 1.55.0
4241 '@oxlint/binding-linux-s390x-gnu': 1.55.0
4242 '@oxlint/binding-linux-x64-gnu': 1.55.0
4243 '@oxlint/binding-linux-x64-musl': 1.55.0
4244 '@oxlint/binding-openharmony-arm64': 1.55.0
4245 '@oxlint/binding-win32-arm64-msvc': 1.55.0
4246 '@oxlint/binding-win32-ia32-msvc': 1.55.0
4247 '@oxlint/binding-win32-x64-msvc': 1.55.0
4025 '@oxlint/binding-android-arm-eabi': 1.56.0
4026 '@oxlint/binding-android-arm64': 1.56.0
4027 '@oxlint/binding-darwin-arm64': 1.56.0
4028 '@oxlint/binding-darwin-x64': 1.56.0
4029 '@oxlint/binding-freebsd-x64': 1.56.0
4030 '@oxlint/binding-linux-arm-gnueabihf': 1.56.0
4031 '@oxlint/binding-linux-arm-musleabihf': 1.56.0
4032 '@oxlint/binding-linux-arm64-gnu': 1.56.0
4033 '@oxlint/binding-linux-arm64-musl': 1.56.0
4034 '@oxlint/binding-linux-ppc64-gnu': 1.56.0
4035 '@oxlint/binding-linux-riscv64-gnu': 1.56.0
4036 '@oxlint/binding-linux-riscv64-musl': 1.56.0
4037 '@oxlint/binding-linux-s390x-gnu': 1.56.0
4038 '@oxlint/binding-linux-x64-gnu': 1.56.0
4039 '@oxlint/binding-linux-x64-musl': 1.56.0
4040 '@oxlint/binding-openharmony-arm64': 1.56.0
4041 '@oxlint/binding-win32-arm64-msvc': 1.56.0
4042 '@oxlint/binding-win32-ia32-msvc': 1.56.0
4043 '@oxlint/binding-win32-x64-msvc': 1.56.0
42484044 oxlint-tsgolint: 0.17.0
42494045
42504046 package-manager-detector@1.6.0: {}
......@@ -4265,26 +4061,18 @@ snapshots:
42654061
42664062 path-data-parser@0.1.0: {}
42674063
4268 path-key@3.1.1: {}
4269
42704064 pathe@2.0.3: {}
42714065
42724066 picocolors@1.1.1: {}
42734067
42744068 picomatch@4.0.3: {}
42754069
4276 pixelmatch@7.1.0:
4277 dependencies:
4278 pngjs: 7.0.0
4279
42804070 pkg-types@1.3.1:
42814071 dependencies:
42824072 confbox: 0.1.8
4283 mlly: 1.8.1
4073 mlly: 1.8.2
42844074 pathe: 2.0.3
42854075
4286 pngjs@7.0.0: {}
4287
42884076 points-on-curve@0.2.0: {}
42894077
42904078 points-on-path@0.2.1:
......@@ -4430,26 +4218,26 @@ snapshots:
44304218
44314219 robust-predicates@3.0.2: {}
44324220
4433 rolldown@1.0.0-rc.9:
4221 rolldown@1.0.0-rc.10:
44344222 dependencies:
4435 '@oxc-project/types': 0.115.0
4436 '@rolldown/pluginutils': 1.0.0-rc.9
4223 '@oxc-project/types': 0.120.0
4224 '@rolldown/pluginutils': 1.0.0-rc.10
44374225 optionalDependencies:
4438 '@rolldown/binding-android-arm64': 1.0.0-rc.9
4439 '@rolldown/binding-darwin-arm64': 1.0.0-rc.9
4440 '@rolldown/binding-darwin-x64': 1.0.0-rc.9
4441 '@rolldown/binding-freebsd-x64': 1.0.0-rc.9
4442 '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.9
4443 '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.9
4444 '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.9
4445 '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.9
4446 '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.9
4447 '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.9
4448 '@rolldown/binding-linux-x64-musl': 1.0.0-rc.9
4449 '@rolldown/binding-openharmony-arm64': 1.0.0-rc.9
4450 '@rolldown/binding-wasm32-wasi': 1.0.0-rc.9
4451 '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.9
4452 '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.9
4226 '@rolldown/binding-android-arm64': 1.0.0-rc.10
4227 '@rolldown/binding-darwin-arm64': 1.0.0-rc.10
4228 '@rolldown/binding-darwin-x64': 1.0.0-rc.10
4229 '@rolldown/binding-freebsd-x64': 1.0.0-rc.10
4230 '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.10
4231 '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.10
4232 '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.10
4233 '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.10
4234 '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.10
4235 '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.10
4236 '@rolldown/binding-linux-x64-musl': 1.0.0-rc.10
4237 '@rolldown/binding-openharmony-arm64': 1.0.0-rc.10
4238 '@rolldown/binding-wasm32-wasi': 1.0.0-rc.10
4239 '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.10
4240 '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.10
44534241
44544242 roughjs@4.6.6:
44554243 dependencies:
......@@ -4466,17 +4254,7 @@ snapshots:
44664254
44674255 semver@6.3.1: {}
44684256
4469 shebang-command@2.0.0:
4470 dependencies:
4471 shebang-regex: 3.0.0
4472
4473 shebang-regex@3.0.0: {}
4474
4475 sirv@3.0.2:
4476 dependencies:
4477 '@polka/url': 1.0.0-next.29
4478 mrmime: 2.0.1
4479 totalist: 3.0.1
4257 siginfo@2.0.0: {}
44804258
44814259 sisteransi@1.0.5: {}
44824260
......@@ -4484,6 +4262,8 @@ snapshots:
44844262
44854263 space-separated-tokens@2.0.2: {}
44864264
4265 stackback@0.0.2: {}
4266
44874267 std-env@4.0.0: {}
44884268
44894269 streamdown@2.5.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4):
......@@ -4541,7 +4321,7 @@ snapshots:
45414321
45424322 tinypool@2.1.0: {}
45434323
4544 totalist@3.0.1: {}
4324 tinyrainbow@3.1.0: {}
45454325
45464326 trim-lines@3.0.1: {}
45474327
......@@ -4624,59 +4404,12 @@ snapshots:
46244404 '@types/unist': 3.0.3
46254405 vfile-message: 4.0.3
46264406
4627 vite-plus@0.1.12(@types/node@25.5.0)(happy-dom@20.8.4)(jiti@2.6.1)(typescript@5.9.3)(vite@8.0.0(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2))(yaml@2.8.2):
4407 vite@8.0.1(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2):
46284408 dependencies:
4629 '@oxc-project/types': 0.115.0
4630 '@voidzero-dev/vite-plus-core': 0.1.12(@types/node@25.5.0)(jiti@2.6.1)(typescript@5.9.3)(yaml@2.8.2)
4631 '@voidzero-dev/vite-plus-test': 0.1.12(@types/node@25.5.0)(happy-dom@20.8.4)(jiti@2.6.1)(typescript@5.9.3)(vite@8.0.0(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2))(yaml@2.8.2)
4632 cac: 6.7.14
4633 cross-spawn: 7.0.6
4634 oxfmt: 0.40.0
4635 oxlint: 1.55.0(oxlint-tsgolint@0.17.0)
4636 oxlint-tsgolint: 0.17.0
4637 picocolors: 1.1.1
4638 optionalDependencies:
4639 '@voidzero-dev/vite-plus-darwin-arm64': 0.1.12
4640 '@voidzero-dev/vite-plus-darwin-x64': 0.1.12
4641 '@voidzero-dev/vite-plus-linux-arm64-gnu': 0.1.12
4642 '@voidzero-dev/vite-plus-linux-x64-gnu': 0.1.12
4643 '@voidzero-dev/vite-plus-win32-arm64-msvc': 0.1.12
4644 '@voidzero-dev/vite-plus-win32-x64-msvc': 0.1.12
4645 transitivePeerDependencies:
4646 - '@arethetypeswrong/core'
4647 - '@edge-runtime/vm'
4648 - '@opentelemetry/api'
4649 - '@tsdown/css'
4650 - '@tsdown/exe'
4651 - '@types/node'
4652 - '@vitejs/devtools'
4653 - '@vitest/ui'
4654 - bufferutil
4655 - esbuild
4656 - happy-dom
4657 - jiti
4658 - jsdom
4659 - less
4660 - publint
4661 - sass
4662 - sass-embedded
4663 - stylus
4664 - sugarss
4665 - terser
4666 - tsx
4667 - typescript
4668 - unplugin-unused
4669 - utf-8-validate
4670 - vite
4671 - yaml
4672
4673 vite@8.0.0(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2):
4674 dependencies:
4675 '@oxc-project/runtime': 0.115.0
46764409 lightningcss: 1.32.0
46774410 picomatch: 4.0.3
46784411 postcss: 8.5.8
4679 rolldown: 1.0.0-rc.9
4412 rolldown: 1.0.0-rc.10
46804413 tinyglobby: 0.2.15
46814414 optionalDependencies:
46824415 '@types/node': 25.5.0
......@@ -4684,6 +4417,34 @@ snapshots:
46844417 jiti: 2.6.1
46854418 yaml: 2.8.2
46864419
4420 vitest@4.1.0(@types/node@25.5.0)(happy-dom@20.8.4)(vite@8.0.1(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2)):
4421 dependencies:
4422 '@vitest/expect': 4.1.0
4423 '@vitest/mocker': 4.1.0(vite@8.0.1(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2))
4424 '@vitest/pretty-format': 4.1.0
4425 '@vitest/runner': 4.1.0
4426 '@vitest/snapshot': 4.1.0
4427 '@vitest/spy': 4.1.0
4428 '@vitest/utils': 4.1.0
4429 es-module-lexer: 2.0.0
4430 expect-type: 1.3.0
4431 magic-string: 0.30.21
4432 obug: 2.1.1
4433 pathe: 2.0.3
4434 picomatch: 4.0.3
4435 std-env: 4.0.0
4436 tinybench: 2.9.0
4437 tinyexec: 1.0.4
4438 tinyglobby: 0.2.15
4439 tinyrainbow: 3.1.0
4440 vite: 8.0.1(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2)
4441 why-is-node-running: 2.3.0
4442 optionalDependencies:
4443 '@types/node': 25.5.0
4444 happy-dom: 20.8.4
4445 transitivePeerDependencies:
4446 - msw
4447
46874448 vscode-jsonrpc@8.2.0: {}
46884449
46894450 vscode-languageserver-protocol@3.17.5:
......@@ -4706,12 +4467,12 @@ snapshots:
47064467 webpack-virtual-modules@0.6.2:
47074468 optional: true
47084469
4709 whatwg-mimetype@3.0.0:
4710 optional: true
4470 whatwg-mimetype@3.0.0: {}
47114471
4712 which@2.0.2:
4472 why-is-node-running@2.3.0:
47134473 dependencies:
4714 isexe: 2.0.0
4474 siginfo: 2.0.0
4475 stackback: 0.0.2
47154476
47164477 ws@8.19.0: {}
47174478
pnpm-workspace.yaml created+2
......@@ -0,0 +1,2 @@
1ignoredBuiltDependencies:
2 - esbuild
src/Markdown.ts+41-28
......@@ -1,6 +1,12 @@
1import { createContext, memo, type PropsWithChildren, useContext, useMemo, useRef } from "react";
2import { componentsAreEqual, defaultProcessor, Memoizer } from "./Memoizer";
3import { type Processor } from "unified";
1import {
2 createContext,
3 type ExoticComponent,
4 memo,
5 type PropsWithChildren,
6 useContext,
7 useRef,
8} from "react";
9import { componentsAreEqual, defaultProcessor, Memoizer, type BaseProcessor } from "./Memoizer";
410import { type Components } from "rehype-react";
511import { jsx } from "react/jsx-runtime";
612
......@@ -9,7 +15,7 @@ export interface MarkdownOptions {
915 /** Markdown source content. */
1016 content: string;
1117 /** Add any other markdown processors. */
12 processor?: Processor<import("unist").Node> | null | undefined;
18 processor?: BaseProcessor | null | undefined;
1319 /** Customize component rendering. */
1420 components?: Partial<Components> | null | undefined;
1521 /** Automatically predict closing tags, useful for LLM streaming. */
......@@ -22,48 +28,55 @@ export interface MarkdownOptions {
2228 * processor pipeline through the `processor` prop or a
2329 * {@linkcode MarkdownOptionsProvider}.
2430 */
25export const Markdown = memo(function Markdown({
31export const Markdown: ExoticComponent<MarkdownOptions> = memo(function Markdown({
2632 content,
2733 processor,
2834 components,
2935 predict,
3036}: MarkdownOptions) {
31 const context = useContext(Context);
37 const context = useContext(OptionsContext);
3238 const ref = useRef<Memoizer | null>(null);
3339 const memoizer = (ref.current ??= new Memoizer());
3440 memoizer.reconfigure(
3541 processor ?? context.processor ?? defaultProcessor,
3642 predict ?? context.predict ?? false,
37 {
38 ...components,
39 ...context.components,
40 },
43 { ...context.components, ...components },
4144 );
4245 return memoizer.update(content);
43}, propsAreEqual);
44
45// @ts-expect-error vite integration
46!import.meta.env.PROD && (Markdown.displayName = "Markdown");
46}, markdownPropsAreEqual);
4747
4848type Context = Omit<MarkdownOptions, "content">;
49const Context = createContext<Context>({});
49const OptionsContext = createContext<Context>({});
5050
5151/** Configure default options for {@linkcode Markdown} */
52export const MarkdownOptionsProvider = memo(function MarkdownOptionsProvider({
53 processor,
54 components,
55 children,
56 predict,
57}: PropsWithChildren<Context>) {
58 const value = useMemo(
59 () => ({ processor, components, predict }),
60 [processor, components, predict],
61 );
62 return jsx(Context.Provider, { value, children });
63}, propsAreEqual);
52export const MarkdownOptionsProvider: ExoticComponent<PropsWithChildren<Context>> = memo(
53 function MarkdownOptionsProvider({
54 processor,
55 components,
56 children,
57 predict,
58 }: PropsWithChildren<Context>) {
59 const valueRef = useRef<Context | null>(null);
60 const nextValue: Context = { processor, components, predict };
61 if (!valueRef.current || !contextIsEqual(valueRef.current, nextValue)) {
62 valueRef.current = nextValue;
63 }
64 return jsx(OptionsContext.Provider, { value: valueRef.current, children });
65 },
66 providerPropsAreEqual,
67);
6468
65function propsAreEqual<T extends Context & { content?: string }>(prev: T, next: T) {
69function markdownPropsAreEqual(prev: MarkdownOptions, next: MarkdownOptions) {
6670 if (prev.content !== next.content) return false;
71 return contextIsEqual(prev, next);
72}
73
74function providerPropsAreEqual(prev: PropsWithChildren<Context>, next: PropsWithChildren<Context>) {
75 if (prev.children !== next.children) return false;
76 return contextIsEqual(prev, next);
77}
78
79function contextIsEqual(prev: Context, next: Context) {
6780 if (prev.processor !== next.processor) return false;
6881 if (prev.predict !== next.predict) return false;
6982 if (prev.components === next.components) return true;
src/Memoizer.ts+2-2
......@@ -8,7 +8,7 @@ import type { Root as HastRoot } from "hast";
88import type { Literal, Node, Parent } from "unist";
99import { memoizedHastToReact, type RenderState } from "./hast.ts";
1010import remarkParse from "remark-parse";
11import { Predict } from "./Prediction.ts";
11import { Predict } from "./Predict.ts";
1212
1313export const defaultProcessor = unified().use(remarkParse);
1414
......@@ -29,7 +29,7 @@ type AstProcessor = Processor<Parent, Parent, Parent, Parent, Parent>;
2929 */
3030export class Memoizer {
3131 // options incrementally updated via `reconfigure`
32 #baseProcessor: BaseProcessor = defaultProcessor;
32 #baseProcessor: BaseProcessor = defaultProcessor as BaseProcessor;
3333 #astProcessor: AstProcessor | null = null;
3434 #components: Partial<Components> = {};
3535 #previousComponents: Partial<Components> = {};
src/Predict.ts created+379
......@@ -0,0 +1,379 @@
1/**
2 * Incremental parser for predicting closing tags in Markdown text. Works best
3 * when continuously appending text to the end of the string; this behavior
4 * specifically triggers a fast parsing path.
5 */
6export class Predict {
7 #stable = "";
8
9 /** Incrementally reparses the tail. */
10 update(text: string): string {
11 if (!text.startsWith(this.#stable)) this.#stable = "";
12 let tail = text.slice(this.#stable.length);
13 let state = parseTail(tail);
14 if (state.commitIndex > 0) {
15 this.#stable += tail.slice(0, state.commitIndex);
16 tail = tail.slice(state.commitIndex);
17 state = parseTail(tail);
18 }
19 return this.#stable + renderTail(tail, state);
20 }
21}
22
23type DelimToken = "***" | "**" | "__" | "~~" | "*" | "_";
24type DelimState = { start: number; token: DelimToken };
25type LinkState =
26 | { phase: "text"; start: number }
27 | { phase: "url_wait"; start: number; textEnd: number }
28 | { phase: "url"; start: number; textEnd: number; parenDepth: number };
29type ExclusiveState =
30 | { kind: "code"; start: number; token: string }
31 | { kind: "fence"; start: number; token: string }
32 | { kind: "math"; start: number; token: "$" | "$$" };
33interface TailState {
34 commitIndex: number;
35 delims: DelimState[];
36 exclusive: ExclusiveState | null;
37 links: LinkState[];
38}
39
40const NESTABLE_DELIMS = new Set<DelimToken>(["*", "**", "_", "__"]);
41
42function parseTail(tail: string): TailState {
43 const state: TailState = {
44 commitIndex: 0,
45 delims: [],
46 exclusive: null,
47 links: [],
48 };
49
50 for (let i = 0; i < tail.length; i++) {
51 const char = tail[i]!;
52
53 if (char === "\n" && tail[i - 1] === "\n") {
54 resetParagraphState(state);
55 if (!state.exclusive) state.commitIndex = i + 1;
56 continue;
57 }
58
59 const exclusiveEnd = consumeExclusive(state, tail, i);
60 if (exclusiveEnd > i) {
61 i = exclusiveEnd - 1;
62 continue;
63 }
64
65 if (state.exclusive) continue;
66
67 if (inLinkUrlMode(state)) {
68 updateLink(state, i, char);
69 continue;
70 }
71
72 const delimEnd = consumeDelim(state, tail, i);
73 if (delimEnd > i) {
74 i = delimEnd - 1;
75 continue;
76 }
77
78 if (isEscapedAt(tail, i)) continue;
79
80 updateLink(state, i, char);
81 }
82
83 return state;
84}
85
86function consumeExclusive(state: TailState, tail: string, start: number) {
87 const char = tail[start];
88 if (char === "`") return consumeBackticks(state, tail, start);
89 if (char === "$") return consumeMath(state, tail, start);
90 if (char === "~") return consumeTildes(state, tail, start);
91 return start;
92}
93
94function consumeBackticks(state: TailState, tail: string, start: number) {
95 const length = runLengthAt(tail, start);
96 const token = "`".repeat(length);
97 const exclusive = state.exclusive;
98
99 if (exclusive?.kind === "fence") {
100 if (
101 exclusive.token[0] === "`" &&
102 isLineStart(tail, start) &&
103 !isEscapedAt(tail, start) &&
104 length >= exclusive.token.length
105 ) {
106 state.exclusive = null;
107 }
108 return start + length;
109 }
110
111 if (exclusive?.kind === "code") {
112 if (!isEscapedAt(tail, start) && length >= exclusive.token.length) {
113 state.exclusive = null;
114 }
115 return start + length;
116 }
117
118 if (exclusive) return start + length;
119 if (isEscapedAt(tail, start)) return start + length;
120
121 if (length >= 3 && isLineStart(tail, start)) {
122 state.exclusive = { kind: "fence", start, token };
123 return start + length;
124 }
125
126 state.exclusive = { kind: "code", start, token };
127 return start + length;
128}
129
130function consumeMath(state: TailState, tail: string, start: number) {
131 const length = runLengthAt(tail, start);
132 const exclusive = state.exclusive;
133
134 if (exclusive?.kind === "math") {
135 if (!isEscapedAt(tail, start) && length >= exclusive.token.length) {
136 state.exclusive = null;
137 }
138 return start + length;
139 }
140
141 if (exclusive) return start + length;
142 if (isEscapedAt(tail, start)) return start + length;
143
144 state.exclusive = {
145 kind: "math",
146 start,
147 token: length >= 2 ? "$$" : "$",
148 };
149 return start + length;
150}
151
152function consumeTildes(state: TailState, tail: string, start: number) {
153 const length = runLengthAt(tail, start);
154 const exclusive = state.exclusive;
155
156 if (exclusive?.kind === "fence" && exclusive.token[0] === "~") {
157 if (isLineStart(tail, start) && !isEscapedAt(tail, start) && length >= exclusive.token.length) {
158 state.exclusive = null;
159 }
160 return start + length;
161 }
162
163 if (exclusive) return start;
164 if (length < 3 || !isLineStart(tail, start) || isEscapedAt(tail, start)) return start;
165
166 state.exclusive = { kind: "fence", start, token: "~".repeat(length) };
167 return start + length;
168}
169
170function consumeDelim(state: TailState, tail: string, start: number) {
171 const token = matchDelim(tail, start);
172 if (!token) return start;
173
174 if (isEscapedAt(tail, start)) return start + token.length;
175
176 const existingIndex = state.delims.findLastIndex((delim) => delim.token === token);
177 if (existingIndex !== -1) {
178 state.delims.splice(existingIndex, 1);
179 return start + token.length;
180 }
181
182 if (!canOpenDelim(tail, start, token)) return start + token.length;
183
184 state.delims.push({ start, token });
185 return start + token.length;
186}
187
188function matchDelim(tail: string, start: number): DelimToken | undefined {
189 const char = tail[start];
190
191 if (char === "*") {
192 if (tail.startsWith("***", start)) return "***";
193 if (tail.startsWith("**", start)) return "**";
194 return "*";
195 }
196
197 if (char === "_") {
198 if (tail.startsWith("__", start)) return "__";
199 return "_";
200 }
201
202 if (char === "~" && tail.startsWith("~~", start)) {
203 return "~~";
204 }
205}
206
207function canOpenDelim(tail: string, start: number, token: DelimToken) {
208 const next = tail[start + token.length];
209 if (!next || /\s/.test(next)) return false;
210
211 const prev = tail[start - 1];
212 return !isWordChar(prev) || !isWordChar(next);
213}
214
215function updateLink(state: TailState, index: number, char: string) {
216 const top = state.links.at(-1);
217
218 if (char === "[") {
219 state.links.push({ phase: "text", start: index });
220 return;
221 }
222
223 if (char === "]" && top?.phase === "text") {
224 state.links[state.links.length - 1] = {
225 phase: "url_wait",
226 start: top.start,
227 textEnd: index,
228 };
229 return;
230 }
231
232 if (char === "(" && top?.phase === "url_wait") {
233 state.links[state.links.length - 1] = {
234 phase: "url",
235 start: top.start,
236 textEnd: top.textEnd,
237 parenDepth: 0,
238 };
239 return;
240 }
241
242 if (char === "(" && top?.phase === "url") {
243 top.parenDepth += 1;
244 return;
245 }
246
247 if (char === ")" && top?.phase === "url") {
248 if (top.parenDepth > 0) {
249 top.parenDepth -= 1;
250 return;
251 }
252
253 state.links.pop();
254 }
255}
256
257function resetParagraphState(state: TailState) {
258 state.delims.length = 0;
259 state.links.length = 0;
260
261 if (state.exclusive?.kind === "fence") return;
262 if (state.exclusive?.kind === "math" && state.exclusive.token === "$$") return;
263
264 state.exclusive = null;
265}
266
267function inLinkUrlMode(state: TailState) {
268 const phase = state.links.at(-1)?.phase;
269 return phase === "url_wait" || phase === "url";
270}
271
272function renderTail(tail: string, state: TailState) {
273 const link = state.links.at(-1);
274 if (link) return renderOpenLink(tail, link);
275
276 const nestedClosers = renderNestedClosers(state);
277 if (nestedClosers) return appendCloser(tail, nestedClosers);
278
279 const open = findLastOpen(state);
280 if (!open) return tail;
281
282 if (open.kind === "delim") {
283 if (!hasContentAfter(tail, open.start, open.token.length)) return tail;
284 return appendCloserBeforeTrailingInlineWhitespace(tail, open.token);
285 }
286
287 if (!hasContentAfter(tail, open.start, open.token.length)) return tail;
288 if (open.kind === "fence") return tail;
289 if (open.kind === "code") return appendCloser(tail, open.token);
290 if (open.token === "$$") return appendCloser(tail, (tail.endsWith("\n") ? "" : "\n") + "$$");
291 if (/\s/.test(tail[tail.length - 1] ?? "")) return tail;
292 return appendCloser(tail, "$");
293}
294
295function renderOpenLink(tail: string, state: LinkState) {
296 const before = tail.slice(0, state.start);
297
298 if (state.phase === "text") {
299 if (!hasContentAfter(tail, state.start, 1)) return tail;
300 return before + tail.slice(state.start + 1);
301 }
302
303 const text = tail.slice(state.start + 1, state.textEnd);
304 if (state.phase === "url_wait") return before + text + tail.slice(state.textEnd + 1);
305 return before + text;
306}
307
308function renderNestedClosers(state: TailState) {
309 const closers: string[] = [];
310
311 if (state.exclusive) {
312 if (state.exclusive.kind !== "code") return undefined;
313 closers.push(state.exclusive.token);
314 }
315
316 for (let i = state.delims.length - 1; i >= 0; i--) {
317 const token = state.delims[i]!.token;
318 if (!NESTABLE_DELIMS.has(token)) return undefined;
319 closers.push(token);
320 }
321
322 if (closers.length < 2) return undefined;
323 return closers.join("");
324}
325
326function appendCloser(tail: string, closer: string) {
327 return tail + closer.slice(overlapLength(tail, closer));
328}
329
330function appendCloserBeforeTrailingInlineWhitespace(tail: string, closer: string) {
331 const trailingWhitespace = tail.match(/[^\S\n]+$/)?.[0];
332 if (!trailingWhitespace) return appendCloser(tail, closer);
333
334 const body = tail.slice(0, -trailingWhitespace.length);
335 return appendCloser(body, closer) + trailingWhitespace;
336}
337
338function overlapLength(tail: string, closer: string) {
339 for (let length = Math.min(tail.length, closer.length); length > 0; length -= 1) {
340 if (tail.endsWith(closer.slice(0, length))) return length;
341 }
342 return 0;
343}
344
345function findLastOpen(state: TailState) {
346 const delim = state.delims.at(-1);
347 if (state.exclusive && (!delim || state.exclusive.start > delim.start)) return state.exclusive;
348 if (delim) return { kind: "delim" as const, start: delim.start, token: delim.token };
349 return state.exclusive;
350}
351
352function runLengthAt(text: string, start: number) {
353 let end = start + 1;
354 while (end < text.length && text[end] === text[start]) end += 1;
355 return end - start;
356}
357
358function hasContentAfter(text: string, start: number, tokenLength: number) {
359 return text.length > start + tokenLength;
360}
361
362function isLineStart(text: string, index: number) {
363 return index === 0 || text[index - 1] === "\n";
364}
365
366function isEscapedAt(text: string, index: number) {
367 let count = 0;
368
369 for (let i = index - 1; i >= 0; i--) {
370 if (text[i] !== "\\") break;
371 count += 1;
372 }
373
374 return count % 2 === 1;
375}
376
377function isWordChar(char?: string) {
378 return !!char && /[A-Za-z0-9]/.test(char);
379}
src/Prediction.ts deleted-376
......@@ -1,376 +0,0 @@
1/**
2 * Incremental parser for predicting closing tags in Markdown text. Works best
3 * when continuously appending text to the end of the string; this behavior
4 * specifically triggers a fast parsing path.
5 */
6export class Predict {
7 #stable = "";
8
9 /** Incrementally reparses the tail. */
10 update(text: string) {
11 if (!text.startsWith(this.#stable)) this.#stable = "";
12 let tail = text.slice(this.#stable.length);
13 let state = parseTail(tail);
14 if (state.commitIndex > 0) {
15 this.#stable += tail.slice(0, state.commitIndex);
16 tail = tail.slice(state.commitIndex);
17 state = parseTail(tail);
18 }
19 return this.#stable + renderTail(tail, state);
20 }
21}
22
23type DelimToken = "***" | "**" | "__" | "~~" | "*" | "_";
24type DelimState = { start: number; token: DelimToken };
25type LinkState =
26 | { phase: "text"; start: number }
27 | { phase: "url_wait"; start: number; textEnd: number }
28 | { phase: "url"; start: number; textEnd: number; parenDepth: number };
29type ExclusiveState =
30 | { kind: "code"; start: number; token: string }
31 | { kind: "fence"; start: number; token: string }
32 | { kind: "math"; start: number; token: "$" | "$$" };
33interface TailState {
34 commitIndex: number;
35 delims: DelimState[];
36 exclusive: ExclusiveState | null;
37 links: LinkState[];
38};
39
40const NESTABLE_DELIMS = new Set<DelimToken>(["*", "**", "_", "__"]);
41
42function parseTail(tail: string): TailState {
43 const state: TailState = {
44 commitIndex: 0,
45 delims: [],
46 exclusive: null,
47 links: [],
48 };
49
50 for (let i = 0; i < tail.length; i++) {
51 const char = tail[i]!;
52
53 if (char === "\n" && tail[i - 1] === "\n") {
54 resetParagraphState(state);
55 if (!state.exclusive) state.commitIndex = i + 1;
56 continue;
57 }
58
59 const exclusiveEnd = consumeExclusive(state, tail, i);
60 if (exclusiveEnd > i) {
61 i = exclusiveEnd - 1;
62 continue;
63 }
64
65 if (state.exclusive) continue;
66
67 if (inLinkUrlMode(state)) {
68 updateLink(state, i, char);
69 continue;
70 }
71
72 const delimEnd = consumeDelim(state, tail, i);
73 if (delimEnd > i) {
74 i = delimEnd - 1;
75 continue;
76 }
77
78 if (isEscapedAt(tail, i)) continue;
79
80 updateLink(state, i, char);
81 }
82
83 return state;
84}
85
86function consumeExclusive(state: TailState, tail: string, start: number) {
87 const char = tail[start];
88 if (char === "`") return consumeBackticks(state, tail, start);
89 if (char === "$") return consumeMath(state, tail, start);
90 if (char === "~") return consumeTildes(state, tail, start);
91 return start;
92}
93
94function consumeBackticks(state: TailState, tail: string, start: number) {
95 const length = runLengthAt(tail, start);
96 const token = "`".repeat(length);
97 const exclusive = state.exclusive;
98
99 if (exclusive?.kind === "fence") {
100 if (
101 exclusive.token[0] === "`" &&
102 isLineStart(tail, start) &&
103 !isEscapedAt(tail, start) &&
104 length >= exclusive.token.length
105 ) {
106 state.exclusive = null;
107 }
108 return start + length;
109 }
110
111 if (exclusive?.kind === "code") {
112 if (!isEscapedAt(tail, start) && length >= exclusive.token.length) {
113 state.exclusive = null;
114 }
115 return start + length;
116 }
117
118 if (exclusive) return start + length;
119 if (isEscapedAt(tail, start)) return start + length;
120
121 if (length >= 3 && isLineStart(tail, start)) {
122 state.exclusive = { kind: "fence", start, token };
123 return start + length;
124 }
125
126 state.exclusive = { kind: "code", start, token };
127 return start + length;
128}
129
130function consumeMath(state: TailState, tail: string, start: number) {
131 const length = runLengthAt(tail, start);
132 const exclusive = state.exclusive;
133
134 if (exclusive?.kind === "math") {
135 if (!isEscapedAt(tail, start) && length >= exclusive.token.length) {
136 state.exclusive = null;
137 }
138 return start + length;
139 }
140
141 if (exclusive) return start + length;
142 if (isEscapedAt(tail, start)) return start + length;
143
144 state.exclusive = {
145 kind: "math",
146 start,
147 token: length >= 2 ? "$$" : "$",
148 };
149 return start + length;
150}
151
152function consumeTildes(state: TailState, tail: string, start: number) {
153 const length = runLengthAt(tail, start);
154 const exclusive = state.exclusive;
155
156 if (exclusive?.kind === "fence" && exclusive.token[0] === "~") {
157 if (
158 isLineStart(tail, start) &&
159 !isEscapedAt(tail, start) &&
160 length >= exclusive.token.length
161 ) {
162 state.exclusive = null;
163 }
164 return start + length;
165 }
166
167 if (exclusive) return start;
168 if (length < 3 || !isLineStart(tail, start) || isEscapedAt(tail, start)) return start;
169
170 state.exclusive = { kind: "fence", start, token: "~".repeat(length) };
171 return start + length;
172}
173
174function consumeDelim(state: TailState, tail: string, start: number) {
175 const token = matchDelim(tail, start);
176 if (!token) return start;
177
178 if (isEscapedAt(tail, start)) return start + token.length;
179
180 const existingIndex = state.delims.findLastIndex((delim) => delim.token === token);
181 if (existingIndex !== -1) {
182 state.delims.splice(existingIndex, 1);
183 return start + token.length;
184 }
185
186 if (!canOpenDelim(tail, start, token)) return start + token.length;
187
188 state.delims.push({ start, token });
189 return start + token.length;
190}
191
192function matchDelim(tail: string, start: number): DelimToken | undefined {
193 const char = tail[start];
194
195 if (char === "*") {
196 if (tail.startsWith("***", start)) return "***";
197 if (tail.startsWith("**", start)) return "**";
198 return "*";
199 }
200
201 if (char === "_") {
202 if (tail.startsWith("__", start)) return "__";
203 return "_";
204 }
205
206 if (char === "~" && tail.startsWith("~~", start)) {
207 return "~~";
208 }
209}
210
211function canOpenDelim(tail: string, start: number, token: DelimToken) {
212 const next = tail[start + token.length];
213 if (!next || /\s/.test(next)) return false;
214
215 const prev = tail[start - 1];
216 return !isWordChar(prev) || !isWordChar(next);
217}
218
219function updateLink(state: TailState, index: number, char: string) {
220 const top = state.links.at(-1);
221
222 if (char === "[") {
223 state.links.push({ phase: "text", start: index });
224 return;
225 }
226
227 if (char === "]" && top?.phase === "text") {
228 state.links[state.links.length - 1] = {
229 phase: "url_wait",
230 start: top.start,
231 textEnd: index,
232 };
233 return;
234 }
235
236 if (char === "(" && top?.phase === "url_wait") {
237 state.links[state.links.length - 1] = {
238 phase: "url",
239 start: top.start,
240 textEnd: top.textEnd,
241 parenDepth: 0,
242 };
243 return;
244 }
245
246 if (char === "(" && top?.phase === "url") {
247 top.parenDepth += 1;
248 return;
249 }
250
251 if (char === ")" && top?.phase === "url") {
252 if (top.parenDepth > 0) {
253 top.parenDepth -= 1;
254 return;
255 }
256
257 state.links.pop();
258 }
259}
260
261function resetParagraphState(state: TailState) {
262 state.delims.length = 0;
263 state.links.length = 0;
264
265 if (state.exclusive?.kind === "fence") return;
266 if (state.exclusive?.kind === "math" && state.exclusive.token === "$$") return;
267
268 state.exclusive = null;
269}
270
271function inLinkUrlMode(state: TailState) {
272 const phase = state.links.at(-1)?.phase;
273 return phase === "url_wait" || phase === "url";
274}
275
276function renderTail(tail: string, state: TailState) {
277 const link = state.links.at(-1);
278 if (link) return renderOpenLink(tail, link);
279
280 const nestedClosers = renderNestedClosers(state);
281 if (nestedClosers) return appendCloser(tail, nestedClosers);
282
283 const open = findLastOpen(state);
284 if (!open) return tail;
285
286 if (open.kind === "delim") {
287 if (!hasContentAfter(tail, open.start, open.token.length)) return tail;
288 if (/\s/.test(tail[tail.length - 1] ?? "")) return tail;
289 return appendCloser(tail, open.token);
290 }
291
292 if (!hasContentAfter(tail, open.start, open.token.length)) return tail;
293 if (open.kind === "fence") return tail;
294 if (open.kind === "code") return appendCloser(tail, open.token);
295 if (open.token === "$$") return appendCloser(tail, (tail.endsWith("\n") ? "" : "\n") + "$$");
296 if (/\s/.test(tail[tail.length - 1] ?? "")) return tail;
297 return appendCloser(tail, "$");
298}
299
300function renderOpenLink(tail: string, state: LinkState) {
301 const before = tail.slice(0, state.start);
302
303 if (state.phase === "text") {
304 if (!hasContentAfter(tail, state.start, 1)) return tail;
305 return before + tail.slice(state.start + 1);
306 }
307
308 const text = tail.slice(state.start + 1, state.textEnd);
309 if (state.phase === "url_wait") return before + text + tail.slice(state.textEnd + 1);
310 return before + text;
311}
312
313function renderNestedClosers(state: TailState) {
314 const closers: string[] = [];
315
316 if (state.exclusive) {
317 if (state.exclusive.kind !== "code") return undefined;
318 closers.push(state.exclusive.token);
319 }
320
321 for (let i = state.delims.length - 1; i >= 0; i--) {
322 const token = state.delims[i]!.token;
323 if (!NESTABLE_DELIMS.has(token)) return undefined;
324 closers.push(token);
325 }
326
327 if (closers.length < 2) return undefined;
328 return closers.join("");
329}
330
331function appendCloser(tail: string, closer: string) {
332 return tail + closer.slice(overlapLength(tail, closer));
333}
334
335function overlapLength(tail: string, closer: string) {
336 for (let length = Math.min(tail.length, closer.length); length > 0; length -= 1) {
337 if (tail.endsWith(closer.slice(0, length))) return length;
338 }
339 return 0;
340}
341
342function findLastOpen(state: TailState) {
343 const delim = state.delims.at(-1);
344 if (state.exclusive && (!delim || state.exclusive.start > delim.start)) return state.exclusive;
345 if (delim) return { kind: "delim" as const, start: delim.start, token: delim.token };
346 return state.exclusive;
347}
348
349function runLengthAt(text: string, start: number) {
350 let end = start + 1;
351 while (end < text.length && text[end] === text[start]) end += 1;
352 return end - start;
353}
354
355function hasContentAfter(text: string, start: number, tokenLength: number) {
356 return text.length > start + tokenLength;
357}
358
359function isLineStart(text: string, index: number) {
360 return index === 0 || text[index - 1] === "\n";
361}
362
363function isEscapedAt(text: string, index: number) {
364 let count = 0;
365
366 for (let i = index - 1; i >= 0; i--) {
367 if (text[i] !== "\\") break;
368 count += 1;
369 }
370
371 return count % 2 === 1;
372}
373
374function isWordChar(char?: string) {
375 return !!char && /[A-Za-z0-9]/.test(char);
376}
tests/Markdown.memoization.test.tsx+1-1
......@@ -1,7 +1,7 @@
11import { cleanup, render, screen } from "@testing-library/react";
22import type { Components } from "rehype-react";
33import type { ComponentPropsWithoutRef, JSX } from "react";
4import { afterEach, expect, it, vi } from "vite-plus/test";
4import { afterEach, expect, it, vi } from "vitest";
55import { Markdown, MarkdownOptionsProvider } from "../src/Markdown.ts";
66import { Memoizer } from "../src/Memoizer.ts";
77
tests/memoizedHastToReact.test.tsx+11-4
......@@ -5,10 +5,16 @@ import remarkParse from "remark-parse";
55import remarkRehype from "remark-rehype";
66import { unified } from "unified";
77import type { Position } from "unist";
8import { describe, expect, it } from "vite-plus/test";
8import { expect, it } from "vitest";
99import { memoizedHastToReact, type RenderState } from "../src/hast.ts";
1010
1111const markdownProcessor = unified().use(remarkParse).use(remarkRehype);
12type TestElementProps = Record<string, unknown> & {
13 children?: ReactNode;
14 className?: string;
15 href?: string;
16 style?: Record<string, unknown>;
17};
1218
1319it("bails out before rereading children when given the same parent node object", () => {
1420 const children = [element("p", [text("hello")])];
......@@ -340,7 +346,8 @@ function parseMarkdown(markdown: string) {
340346 return markdownProcessor.runSync(markdownProcessor.parse(markdown)) as Root;
341347}
342348
343function getElement(node: RootContent | ElementContent) {
349function getElement(node: RootContent | ElementContent | undefined) {
350 if (!node) throw new TypeError("Expected element, got `undefined`");
344351 if (node.type !== "element") throw new TypeError(`Expected element, got \`${node.type}\``);
345352 return node;
346353}
......@@ -357,9 +364,9 @@ function childrenOf(node: ReactNode) {
357364 return Array.isArray(children) ? children : [children];
358365}
359366
360function asElement(node: ReactNode): ReactElement {
367function asElement(node: ReactNode): ReactElement<TestElementProps> {
361368 if (!node || typeof node !== "object" || !("props" in node)) {
362369 throw new TypeError("Expected a React element");
363370 }
364 return node as ReactElement;
371 return node as ReactElement<TestElementProps>;
365372}
tests/prediction.test.ts+11-7
......@@ -1,5 +1,6 @@
1import { test, describe, expect } from "vite-plus/test";
2import { Predict } from "../src/Prediction.ts";
1/* oxlint-disable jest/expect-expect, jest/no-conditional-expect */
2import { describe, expect, test } from "vitest";
3import { Predict } from "../src/Predict.ts";
34
45describe.each(["stateless", "stateful"] as const)("%s processing", (mode) => {
56 function stateless(text: string) {
......@@ -145,7 +146,6 @@ describe.each(["stateless", "stateful"] as const)("%s processing", (mode) => {
145146 ["strike", "a ~~hello world", "a ~~hello world~~"],
146147 ["katex", "something\n\n$$\nE =", "something\n\n$$\nE =\n$$"],
147148
148
149149 ["bold partial close", "a **hello world*", "a **hello world**"],
150150 ["bold italic partial close 1", "a ***hello world*", "a ***hello world***"],
151151 ["bold italic partial close 2", "a ***hello world**", "a ***hello world***"],
......@@ -202,10 +202,14 @@ describe.each(["stateless", "stateful"] as const)("%s processing", (mode) => {
202202 (input) => check(input, input),
203203 );
204204
205 // TODO: these are dubious
206 test.each(["hello *world ", "hello **world ", "hello _world ", "hello __world "])(
207 "does not add a closer after trailing whitespace for %j",
208 (input) => check(input, input),
205 test.each([
206 ["hello *world ", "hello *world* "],
207 ["hello **world ", "hello **world** "],
208 ["hello _world ", "hello _world_ "],
209 ["hello __world ", "hello __world__ "],
210 ])(
211 "closes before trailing whitespace for %j",
212 (input, expected) => check(input, expected),
209213 );
210214 });
211215
tsconfig.json+1-2
......@@ -12,7 +12,6 @@
1212 "allowImportingTsExtensions": true,
1313 "noUncheckedIndexedAccess": true,
1414 "noUnusedLocals": true,
15 "declaration": true,
1615 "noEmit": true,
1716 "esModuleInterop": true,
1817 "isolatedModules": true,
......@@ -20,5 +19,5 @@
2019 "skipLibCheck": true,
2120 "jsx": "react-jsx"
2221 },
23 "include": ["src"]
22 "include": ["src", "tests", "example", "vite.config.ts"]
2423}
vite.config.ts+1-14
......@@ -1,23 +1,10 @@
11import react from "@vitejs/plugin-react";
22import tailwindcss from "@tailwindcss/vite";
3import { defineConfig } from "vite-plus";
3import { defineConfig } from "vitest/config";
44
55export default defineConfig({
66 plugins: [react(), tailwindcss()],
7 pack: {
8 dts: {
9 tsgo: true,
10 },
11 exports: true,
12 },
13 lint: {
14 options: {
15 typeAware: true,
16 typeCheck: true,
17 },
18 },
197 test: {
208 environment: "happy-dom",
219 },
22 fmt: {},
2310});