diff --git a/.prettierignore b/.prettierignore
new file mode 100644
index 00000000..96dab5c0
--- /dev/null
+++ b/.prettierignore
@@ -0,0 +1 @@
+test/output
\ No newline at end of file
diff --git a/README.md b/README.md
index 9930288d..3a9e1ea5 100644
--- a/README.md
+++ b/README.md
@@ -2,24 +2,40 @@
-> [!NOTE]
-> The current next branch is implementing the new proposal API for production use. Please refer to the [main branch](https://github.com/charming-art/charming/tree/main) for the current release.
+Charming is a JavaScript library for data-driven generative art that allows artists, designers, educators, and engineers to create expressive, accessible SVG graphics.
-The JavaScript library for generative art based on SVG.
+Charming’s API is inspired by data visualization grammar — systems like [AntV G2](https://g2.antv.antgroup.com/), [Observable Plot](https://observablehq.com/plot/) and [Vega-Lite](https://vega.github.io/vega-lite/) — where visuals are built from meaningful, composable units. By combining declarative structure with the power of SVG, Charming encourages a more thoughtful, expressive, inspectable and accessible approach to generative art.
+
+
```js
import * as cm from "charmingjs";
-const svg = cm.svg("svg", {
- width: 100,
- height: 100,
- children: [
- cm.svg("rect", {x: 0, y: 0, width: 100, height: 100, fill: "black"}),
- cm.svg("circle", {cx: 50, cy: 50, r: 40, fill: "white"}),
+function circles(x, y, r, data = []) {
+ if (r < 16) return;
+ data.push({x, y, r, depth});
+ circles(x - r / 2, y, r * 0.5, data);
+ circles(x + r / 2, y, r * 0.5, data);
+ circles(x, y - r / 2, r * 0.5, data);
+ circles(x, y + r / 2, r * 0.5, data);
+ return data;
+}
+
+const svg = cm.render({
+ width: 480,
+ height: 480,
+ marks: [
+ cm.svg("circle", circles(240, 240, 200), {
+ cx: (d) => d.x,
+ cy: (d) => d.y,
+ r: (d) => d.r,
+ stroke: "black",
+ fill: "transparent",
+ }),
],
});
-document.body.appendChild(svg.render());
+document.body.appendChild(svg);
```
## Resources 📚
diff --git a/docs/.vitepress/config.mjs b/docs/.vitepress/config.mjs
index 994db324..46b8228f 100644
--- a/docs/.vitepress/config.mjs
+++ b/docs/.vitepress/config.mjs
@@ -28,13 +28,13 @@ export default defineConfig({
{text: "API Index", link: "/docs/api-index"},
],
},
- {
- text: "Reference",
- items: [
- {text: "Charming Mark", link: "/docs/charming-mark"},
- {text: "Charming Vector", link: "/docs/charming-vector"},
- ],
- },
+ // {
+ // text: "Reference",
+ // items: [
+ // {text: "Charming Mark", link: "/docs/charming-mark"},
+ // {text: "Charming Vector", link: "/docs/charming-vector"},
+ // ],
+ // },
],
},
socialLinks: [{icon: "github", link: "https://github.com/charming-art/charming"}],
diff --git a/docs/.vitepress/theme/index.js b/docs/.vitepress/theme/index.js
index 6b466dbf..8118ffcf 100644
--- a/docs/.vitepress/theme/index.js
+++ b/docs/.vitepress/theme/index.js
@@ -6,57 +6,17 @@ import "d3-transition";
import * as cm from "../../../src/index.js";
import "./custom.css";
-const extended = {
- random(min, max) {
- return Math.random() * (max - min) + min;
- },
- constrain(x, min, max) {
- return Math.min(Math.max(x, min), max);
- },
- transition(node, props) {
- const {keyframes} = props;
- const selection = selectAll([node]);
- let transition = selection;
-
- for (const {duration, ease, delay, ...attr} of keyframes) {
- transition = transition.transition();
- transition
- .duration(duration)
- .call((t) => ease && t.ease(ease))
- .call((t) => delay && t.delay(delay));
- for (const key in attr) {
- if (key.startsWith("style")) {
- const style = key.slice(5).toLowerCase();
- transition.style(style, attr[key]);
- } else transition.attr(key, attr[key]);
- }
- }
-
- return node;
- },
-};
-
// More props: https://genji-md.dev/reference/props
const props = {
Theme: DefaultTheme,
- library: {cm: {...cm, ...extended}},
+ library: {cm},
transform: {
module(code) {
- let newCode = code
- .replace("import {", "const {")
- .replace(`from "charmingjs"`, "= cm")
- .replace(`.render("#root")`, `.render(_root)`);
- return `(() => {
- const _root = document.createElement("div");
+ const newCode = code.replace(`cm.render`, `return cm.render`);
+ const result = `(() => {
${newCode}
- return _root;
- })()`;
- },
- replayable(code) {
- return `(() => {
- play;
- return ${code};
})()`;
+ return result;
},
},
};
diff --git a/docs/docs/api-index.md b/docs/docs/api-index.md
index 82424dc2..ab287bb4 100644
--- a/docs/docs/api-index.md
+++ b/docs/docs/api-index.md
@@ -1,12 +1,115 @@
-# API Index
+# API Reference
-## [Charming Mark](/docs/charming-mark)
+- [_cm_.**render**](/docs/api-index#cm-render) - render a SVG element.
+- [_cm_.**renderMark**](/docs/api-index#cm-renderMark) - render a mark.
+- [_cm_.**svg**](/docs/api-index#cm-svg) - create a SVG mark.
+- [_cm_.**html**](/docs/api-index#cm-html) - create a HTML mark.
+- [_cm_.**tag**](/docs/api-index#cm-tag) - create a new mark factory.
+- [_mark_.**with**](/docs/api-index#mark-with) - append children to mark.
-Creating SVG and HTML with pure function calls.
+## _cm_.render(_options_) {#cm-render}
-- [_cm_.**render**](/docs/charming-mark#render) - render a node.
-- [_cm_.**svg**](/docs/charming-mark#svg) - create SVG elements with the specified attributes and child nodes.
+```js eval t=module
+cm.render({
+ width: 200,
+ height: 100,
+ style_background: "black",
+ marks: [
+ cm.svg("circle", {
+ cx: 100,
+ cy: 50,
+ r: 40,
+ fill: "white",
+ }),
+ ],
+});
+```
-## [Charming Vector](/docs/charming-vector)
+## _cm_.renderMark(_mark_) {#cm-renderMark}
-> WIP
+```js eval t=module
+cm.renderMark(
+ cm.html("span", {
+ textContent: "Hello Charming.js",
+ style_color: "red",
+ }),
+);
+```
+
+## _cm_.svg(_tag[, data[, options]]_) {#cm-svg}
+
+```js eval t=module
+cm.render({
+ width: 100,
+ height: 50,
+ marks: [
+ cm.svg("circle", [1, 2, 3], {
+ cx: (d) => d * 30,
+ cy: 25,
+ r: 10,
+ }),
+ ],
+});
+```
+
+## _cm_.html(_tag[, data[, options]]_) {#cm-html}
+
+```js eval t=module
+const table = [
+ [11975, 5871, 8916, 2868],
+ [1951, 10048, 2060, 6171],
+ [8010, 16145, 8090, 8045],
+ [1013, 990, 940, 6907],
+];
+
+cm.renderMark(
+ cm.html("table").with([
+ cm.html("tr", table).with([
+ cm.html("td", (row) => row, {
+ textContent: (d) => d,
+ }),
+ ]),
+ ]),
+);
+```
+
+## _cm_.tag(_namespace_) {#cm-tag}
+
+```js eval t=module
+const math = cm.tag("http://www.w3.org/1998/Math/MathML");
+
+cm.renderMark(
+ math("math").with([
+ math("mrow").with([
+ math("mrow").with([
+ math("mi", {textContent: "x"}),
+ math("mo", {textContent: "∗"}),
+ math("mn", {textContent: "2"}),
+ ]),
+ math("mo", {textContent: "+"}),
+ math("mi", {textContent: "y"}),
+ ]),
+ ]),
+);
+```
+
+## _mark_.with(_children_) {#mark-with}
+
+```js eval t=module
+const svg = cm.svg;
+
+cm.render({
+ width: 100,
+ height: 50,
+ marks: [
+ svg("g", [1, 2, 3], {
+ transform: (d) => `translate(${d * 30},${25})`,
+ fill: "steelblue",
+ }).with([
+ svg("circle", [1, 2, 3], {
+ r: 10,
+ }),
+ ]),
+ ],
+});
+```
diff --git a/docs/docs/getting-started.md b/docs/docs/getting-started.md
index 51af584f..578b714b 100644
--- a/docs/docs/getting-started.md
+++ b/docs/docs/getting-started.md
@@ -6,9 +6,9 @@ npm install charmingjs
There are several way to using Charming.
-## Try Online
+
## Installing from Package Manager
@@ -48,11 +48,11 @@ In vanilla HTML, Charming can be imported as an ES module, say from jsDelivr:
```
@@ -67,6 +67,6 @@ Charming is also available as a UMD bundle for legacy browsers.
// ...
});
- document.body.append(app.node());
+ document.body.append(svg);
```
diff --git a/docs/docs/what-is-charming.md b/docs/docs/what-is-charming.md
index 05098900..66be1f3d 100644
--- a/docs/docs/what-is-charming.md
+++ b/docs/docs/what-is-charming.md
@@ -1,136 +1,43 @@
# What is Charming?
-**Charming** (or **Charming.js**) is a free, open-source JavaScript library that creates animated and interactive SVG. Charming lets you create dynamic and expressive generative art and visualizations effortlessly. Here's a quick example that give you a sense of Charming:
-
-```js eval t=module
-const svg = cm.svg("svg", {
- width: 200,
- height: 50,
- loop: true,
- children: () => [
- cm.svg("circle", {
- cx: Math.abs(Math.sin(Date.now() / 1000) * 200),
- cy: 25,
- r: 20,
- stroke: "red",
- strokeWidth: 4,
- }),
- ],
-});
-
-svg.render("#root");
-```
-
-## Based on SVG
-
-Charming provides a _svg_ function for creating SVG elements. For example, to create a white circle on a black background:
-
-```js eval t=module
-const svg = cm.svg("svg", {
- width: 100,
- height: 100,
- children: [
- cm.svg("rect", {x: 0, y: 0, width: 100, height: 100, fill: "black"}),
- cm.svg("circle", {cx: 50, cy: 50, r: 40, fill: "white"}),
- ],
-});
-
-svg.render("#root");
+**Charming** is a JavaScript library for data-driven generative art that allows artists, designers, educators, and engineers to create expressive, accessible SVG graphics.
+
+Charming’s API is inspired by data visualization grammar — systems like [AntV G2](https://g2.antv.antgroup.com/), [Observable Plot](https://observablehq.com/plot/) and [Vega-Lite](https://vega.github.io/vega-lite/) — where visuals are built from meaningful, composable units. By combining declarative structure with the power of SVG, Charming encourages a more thoughtful, expressive, inspectable and accessible approach to generative art.
+
+For example, let's first define a function to generate circles recursively:
+
+```js eval inspector=false
+function circles(x, y, r, data = []) {
+ if (r < 16) return;
+ data.push({x, y, r});
+ circles(x - r / 2, y, r * 0.5, data);
+ circles(x + r / 2, y, r * 0.5, data);
+ circles(x, y - r / 2, r * 0.5, data);
+ circles(x, y + r / 2, r * 0.5, data);
+ return data;
+}
```
-Please refer to [Charming Mark](/docs/charming-mark) for more information.
-
-## Fluid Transition
-
-Charming makes it easier than ever to create fluid transitions. The exported _transition_ decorators lets you apply transitions declaratively to child nodes, whether SVG or HTML. For example, you can create a circle that smoothly change colors and radius over time.
+Then call the function to generate circles:
-```js eval code=false
-play = Inputs.button("Replay");
+```js eval
+const data = circles(240, 240, 200);
```
-```js eval t=module,replayable
-const svg = cm.svg("svg", {
- width: 100,
- height: 100,
- use: {transition: cm.transition},
- children: [
- cm.svg("rect", {x: 0, y: 0, width: 100, height: 100, fill: "black"}),
- cm.svg("circle", {
- cx: 50,
- cy: 50,
- r: 40,
- fill: "#4B68C9",
- transition: {
- keyframes: [
- {fill: "#E5B442", r: 0, duration: 1000},
- {fill: "#EE7A64", r: 40, duration: 2000},
- ],
- },
+Finally draw or visualize the data with Charming's declarative API:
+
+```js eval
+cm.render({
+ width: 480,
+ height: 480,
+ marks: [
+ cm.svg("circle", data, {
+ cx: (d) => d.x,
+ cy: (d) => d.y,
+ r: (d) => d.r,
+ stroke: "black",
+ fill: "transparent",
}),
],
});
-
-svg.render("#root");
```
-
-## Incremental Updates
-
-Work in progress.
-
-```js eval t=module
-const width = 600;
-const height = 150;
-let x = width / 2;
-let y = height / 2;
-
-const svg = cm.svg("svg", {
- width: 600,
- height: 150,
- loop: true,
- children: () => {
- x += cm.random(-1, 1);
- y += cm.random(-1, 1);
- x = cm.constrain(x, 0, width);
- y = cm.constrain(y, 0, height);
- return [cm.svg("circle", {cx: x, cy: y, fill: "black", r: 20})];
- },
-});
-
-svg.render("#root");
-```
-
-## Reactivity for Interaction
-
-```js eval t=module
-const state = cm.state({clicked: false});
-
-const svg = cm.svg("svg", {
- width: 100,
- height: 100,
- styleBackground: "black",
- children: () => [
- cm.svg("circle", {
- cx: 50,
- cy: 50,
- r: 40,
- fill: state.clicked ? "red" : "white",
- styleCursor: "pointer",
- onClick: () => (state.clicked = !state.clicked),
- }),
- ],
-});
-
-svg.render("#root");
-```
-
-## A Collection of Tools
-
-Charming provides a set of modular tools that you can use together or independently. For example,
-
-- [Charming Mark](/docs/charming-mark) - Creating SVG and HTML with pure function calls.
-- [Charming Vector](/docs/charming-vector) - Manipulating Euclidean vector.
-- ...
-
-## Built on and learn with D3
-
-Charming is built with D3 and integrates seamlessly with it. It simplifies D3's complexity, making it more accessible and easier to learn.
diff --git a/docs/index.md b/docs/index.md
index 0cae7294..18ff9cb6 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -3,8 +3,8 @@ layout: home
hero:
name: Charming
- text: A JavaScript library for generative art based on SVG
- tagline: Craft expressive generative art with minimal effort or explore the most fun way to learn SVG
+ text: A JavaScript library for data-driven generative art
+ tagline: Create expressive, accessible SVG graphics with declarative code and creative flexibility
image:
src: /logo.svg
alt: Charming
@@ -17,10 +17,10 @@ hero:
link: /docs/what-is-charming
features:
- - title: Based on SVG
- details: TODO
- - title: Fluid Transition
- details: TODO
- - title: Incremental Updates
- details: TODO
+ - title: Declarative API
+ details: Inspired by visualization grammar, such as AntV G2, Vega and Observable Plot, where visuals are built from meaningful, composable units.
+ - title: Native SVG Power
+ details: "Leverage the full potential of SVG: crisp rendering, accessible structure, and smooth integration with design tools."
+ - title: Lightweight and Modular
+ details: Charming is a collection of lightweight tools focused on modularity, which can be used independently or work with D3 and p5.js.
---
diff --git a/img/circles.png b/img/circles.png
new file mode 100644
index 00000000..251e3b0f
Binary files /dev/null and b/img/circles.png differ
diff --git a/package.json b/package.json
index d83680a6..b325d865 100644
--- a/package.json
+++ b/package.json
@@ -22,6 +22,7 @@
],
"scripts": {
"dev": "vite",
+ "test:update": "vitest --update",
"test": "npm run test:js && npm run test:lint && npm run test:format",
"test:js": "vitest",
"test:lint": "eslint src test",
@@ -31,10 +32,6 @@
"docs:preview": "vitepress preview docs",
"prepublishOnly": "rm -rf dist && rollup -c"
},
- "dependencies": {
- "charmingjs-vector": "^0.0.3",
- "d3-timer": "^3.0.1"
- },
"devDependencies": {
"@rollup/plugin-node-resolve": "^15.3.1",
"@rollup/plugin-terser": "^0.4.4",
@@ -46,10 +43,10 @@
"js-beautify": "^1.15.4",
"jsdom": "^26.1.0",
"prettier": "^3.5.3",
- "rollup": "^4.40.0",
- "vite": "^6.3.3",
+ "rollup": "^4.43.0",
+ "vite": "^6.3.5",
"vitepress": "^1.6.3",
- "vitest": "^3.1.2"
+ "vitest": "^3.2.3"
},
"publishConfig": {
"access": "public"
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index fceeb9a7..63610364 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -7,20 +7,13 @@ settings:
importers:
.:
- dependencies:
- charmingjs-vector:
- specifier: ^0.0.3
- version: 0.0.3
- d3-timer:
- specifier: ^3.0.1
- version: 3.0.1
devDependencies:
'@rollup/plugin-node-resolve':
specifier: ^15.3.1
- version: 15.3.1(rollup@4.40.0)
+ version: 15.3.1(rollup@4.43.0)
'@rollup/plugin-terser':
specifier: ^0.4.4
- version: 0.4.4(rollup@4.40.0)
+ version: 0.4.4(rollup@4.43.0)
d3-selection:
specifier: ^3.0.0
version: 3.0.0
@@ -35,7 +28,7 @@ importers:
version: 9.1.0(eslint@8.57.1)
genji-theme-vitepress:
specifier: ^0.2.8
- version: 0.2.8(vitepress@1.6.3(@algolia/client-search@5.23.4)(postcss@8.5.3)(search-insights@2.17.2)(terser@5.39.0))(vue@3.5.13)
+ version: 0.2.8(vitepress@1.6.3(@algolia/client-search@5.27.0)(postcss@8.5.5)(search-insights@2.17.2)(terser@5.42.0)(typescript@5.8.3))(vue@3.5.16(typescript@5.8.3))
js-beautify:
specifier: ^1.15.4
version: 1.15.4
@@ -46,17 +39,17 @@ importers:
specifier: ^3.5.3
version: 3.5.3
rollup:
- specifier: ^4.40.0
- version: 4.40.0
+ specifier: ^4.43.0
+ version: 4.43.0
vite:
- specifier: ^6.3.3
- version: 6.3.3(terser@5.39.0)
+ specifier: ^6.3.5
+ version: 6.3.5(terser@5.42.0)(yaml@2.8.0)
vitepress:
specifier: ^1.6.3
- version: 1.6.3(@algolia/client-search@5.23.4)(postcss@8.5.3)(search-insights@2.17.2)(terser@5.39.0)
+ version: 1.6.3(@algolia/client-search@5.27.0)(postcss@8.5.5)(search-insights@2.17.2)(terser@5.42.0)(typescript@5.8.3)
vitest:
- specifier: ^3.1.2
- version: 3.1.2(jsdom@26.1.0)(terser@5.39.0)
+ specifier: ^3.2.3
+ version: 3.2.3(@types/debug@4.1.12)(jsdom@26.1.0)(terser@5.42.0)(yaml@2.8.0)
packages:
@@ -80,104 +73,104 @@ packages:
'@algolia/client-search': '>= 4.9.1 < 6'
algoliasearch: '>= 4.9.1 < 6'
- '@algolia/client-abtesting@5.23.4':
- resolution: {integrity: sha512-WIMT2Kxy+FFWXWQxIU8QgbTioL+SGE24zhpj0kipG4uQbzXwONaWt7ffaYLjfge3gcGSgJVv+1VlahVckafluQ==}
+ '@algolia/client-abtesting@5.27.0':
+ resolution: {integrity: sha512-SITU5umoknxETtw67TxJu9njyMkWiH8pM+Bvw4dzfuIrIAT6Y1rmwV4y0A0didWoT+6xVuammIykbtBMolBcmg==}
engines: {node: '>= 14.0.0'}
- '@algolia/client-analytics@5.23.4':
- resolution: {integrity: sha512-4B9gChENsQA9kFmFlb+x3YhBz2Gx3vSsm81FHI1yJ3fn2zlxREHmfrjyqYoMunsU7BybT/o5Nb7ccCbm/vfseA==}
+ '@algolia/client-analytics@5.27.0':
+ resolution: {integrity: sha512-go1b9qIZK5vYEQ7jD2bsfhhhVsoh9cFxQ5xF8TzTsg2WOCZR3O92oXCkq15SOK0ngJfqDU6a/k0oZ4KuEnih1Q==}
engines: {node: '>= 14.0.0'}
- '@algolia/client-common@5.23.4':
- resolution: {integrity: sha512-bsj0lwU2ytiWLtl7sPunr+oLe+0YJql9FozJln5BnIiqfKOaseSDdV42060vUy+D4373f2XBI009K/rm2IXYMA==}
+ '@algolia/client-common@5.27.0':
+ resolution: {integrity: sha512-tnFOzdNuMzsz93kOClj3fKfuYoF3oYaEB5bggULSj075GJ7HUNedBEm7a6ScrjtnOaOtipbnT7veUpHA4o4wEQ==}
engines: {node: '>= 14.0.0'}
- '@algolia/client-insights@5.23.4':
- resolution: {integrity: sha512-XSCtAYvJ/hnfDHfRVMbBH0dayR+2ofVZy3jf5qyifjguC6rwxDsSdQvXpT0QFVyG+h8UPGtDhMPoUIng4wIcZA==}
+ '@algolia/client-insights@5.27.0':
+ resolution: {integrity: sha512-y1qgw39qZijjQBXrqZTiwK1cWgWGRiLpJNWBv9w36nVMKfl9kInrfsYmdBAfmlhVgF/+Woe0y1jQ7pa4HyShAw==}
engines: {node: '>= 14.0.0'}
- '@algolia/client-personalization@5.23.4':
- resolution: {integrity: sha512-l/0QvqgRFFOf7BnKSJ3myd1WbDr86ftVaa3PQwlsNh7IpIHmvVcT83Bi5zlORozVGMwaKfyPZo6O48PZELsOeA==}
+ '@algolia/client-personalization@5.27.0':
+ resolution: {integrity: sha512-XluG9qPZKEbiLoIfXTKbABsWDNOMPx0t6T2ImJTTeuX+U/zBdmfcqqgcgkqXp+vbXof/XX/4of9Eqo1JaqEmKw==}
engines: {node: '>= 14.0.0'}
- '@algolia/client-query-suggestions@5.23.4':
- resolution: {integrity: sha512-TB0htrDgVacVGtPDyENoM6VIeYqR+pMsDovW94dfi2JoaRxfqu/tYmLpvgWcOknP6wLbr8bA+G7t/NiGksNAwQ==}
+ '@algolia/client-query-suggestions@5.27.0':
+ resolution: {integrity: sha512-V8/To+SsAl2sdw2AAjeLJuCW1L+xpz+LAGerJK7HKqHzE5yQhWmIWZTzqYQcojkii4iBMYn0y3+uReWqT8XVSQ==}
engines: {node: '>= 14.0.0'}
- '@algolia/client-search@5.23.4':
- resolution: {integrity: sha512-uBGo6KwUP6z+u6HZWRui8UJClS7fgUIAiYd1prUqCbkzDiCngTOzxaJbEvrdkK0hGCQtnPDiuNhC5MhtVNN4Eg==}
+ '@algolia/client-search@5.27.0':
+ resolution: {integrity: sha512-EJJ7WmvmUXZdchueKFCK8UZFyLqy4Hz64snNp0cTc7c0MKaSeDGYEDxVsIJKp15r7ORaoGxSyS4y6BGZMXYuCg==}
engines: {node: '>= 14.0.0'}
- '@algolia/ingestion@1.23.4':
- resolution: {integrity: sha512-Si6rFuGnSeEUPU9QchYvbknvEIyCRK7nkeaPVQdZpABU7m4V/tsiWdHmjVodtx3h20VZivJdHeQO9XbHxBOcCw==}
+ '@algolia/ingestion@1.27.0':
+ resolution: {integrity: sha512-xNCyWeqpmEo4EdmpG57Fs1fJIQcPwt5NnJ6MBdXnUdMVXF4f5PHgza+HQWQQcYpCsune96jfmR0v7us6gRIlCw==}
engines: {node: '>= 14.0.0'}
- '@algolia/monitoring@1.23.4':
- resolution: {integrity: sha512-EXGoVVTshraqPJgr5cMd1fq7Jm71Ew6MpGCEaxI5PErBpJAmKdtjRIzs6JOGKHRaWLi+jdbJPYc2y8RN4qcx5Q==}
+ '@algolia/monitoring@1.27.0':
+ resolution: {integrity: sha512-P0NDiEFyt9UYQLBI0IQocIT7xHpjMpoFN3UDeerbztlkH9HdqT0GGh1SHYmNWpbMWIGWhSJTtz6kSIWvFu4+pw==}
engines: {node: '>= 14.0.0'}
- '@algolia/recommend@5.23.4':
- resolution: {integrity: sha512-1t6glwKVCkjvBNlng2itTf8fwaLSqkL4JaMENgR3WTGR8mmW2akocUy/ZYSQcG4TcR7qu4zW2UMGAwLoWoflgQ==}
+ '@algolia/recommend@5.27.0':
+ resolution: {integrity: sha512-cqfTMF1d1cc7hg0vITNAFxJZas7MJ4Obc36WwkKpY23NOtGb+4tH9X7UKlQa2PmTgbXIANoJ/DAQTeiVlD2I4Q==}
engines: {node: '>= 14.0.0'}
- '@algolia/requester-browser-xhr@5.23.4':
- resolution: {integrity: sha512-UUuizcgc5+VSY8hqzDFVdJ3Wcto03lpbFRGPgW12pHTlUQHUTADtIpIhkLLOZRCjXmCVhtr97Z+eR6LcRYXa3Q==}
+ '@algolia/requester-browser-xhr@5.27.0':
+ resolution: {integrity: sha512-ErenYTcXl16wYXtf0pxLl9KLVxIztuehqXHfW9nNsD8mz9OX42HbXuPzT7y6JcPiWJpc/UU/LY5wBTB65vsEUg==}
engines: {node: '>= 14.0.0'}
- '@algolia/requester-fetch@5.23.4':
- resolution: {integrity: sha512-UhDg6elsek6NnV5z4VG1qMwR6vbp+rTMBEnl/v4hUyXQazU+CNdYkl++cpdmLwGI/7nXc28xtZiL90Es3I7viQ==}
+ '@algolia/requester-fetch@5.27.0':
+ resolution: {integrity: sha512-CNOvmXsVi+IvT7z1d+6X7FveVkgEQwTNgipjQCHTIbF9KSMfZR7tUsJC+NpELrm10ALdOMauah84ybs9rw1cKQ==}
engines: {node: '>= 14.0.0'}
- '@algolia/requester-node-http@5.23.4':
- resolution: {integrity: sha512-jXGzGBRUS0oywQwnaCA6mMDJO7LoC3dYSLsyNfIqxDR4SNGLhtg3je0Y31lc24OA4nYyKAYgVLtjfrpcpsWShg==}
+ '@algolia/requester-node-http@5.27.0':
+ resolution: {integrity: sha512-Nx9EdLYZDsaYFTthqmc0XcVvsx6jqeEX8fNiYOB5i2HboQwl8pJPj1jFhGqoGd0KG7KFR+sdPO5/e0EDDAru2Q==}
engines: {node: '>= 14.0.0'}
- '@asamuzakjp/css-color@3.1.4':
- resolution: {integrity: sha512-SeuBV4rnjpFNjI8HSgKUwteuFdkHwkboq31HWzznuqgySQir+jSTczoWVVL4jvOjKjuH80fMDG0Fvg1Sb+OJsA==}
+ '@asamuzakjp/css-color@3.2.0':
+ resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==}
- '@babel/helper-string-parser@7.25.9':
- resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==}
+ '@babel/helper-string-parser@7.27.1':
+ resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
engines: {node: '>=6.9.0'}
- '@babel/helper-validator-identifier@7.25.9':
- resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
+ '@babel/helper-validator-identifier@7.27.1':
+ resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
engines: {node: '>=6.9.0'}
- '@babel/parser@7.27.0':
- resolution: {integrity: sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==}
+ '@babel/parser@7.27.5':
+ resolution: {integrity: sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==}
engines: {node: '>=6.0.0'}
hasBin: true
- '@babel/types@7.27.0':
- resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==}
+ '@babel/types@7.27.6':
+ resolution: {integrity: sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==}
engines: {node: '>=6.9.0'}
'@csstools/color-helpers@5.0.2':
resolution: {integrity: sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==}
engines: {node: '>=18'}
- '@csstools/css-calc@2.1.3':
- resolution: {integrity: sha512-XBG3talrhid44BY1x3MHzUx/aTG8+x/Zi57M4aTKK9RFB4aLlF3TTSzfzn8nWVHWL3FgAXAxmupmDd6VWww+pw==}
+ '@csstools/css-calc@2.1.4':
+ resolution: {integrity: sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==}
engines: {node: '>=18'}
peerDependencies:
- '@csstools/css-parser-algorithms': ^3.0.4
- '@csstools/css-tokenizer': ^3.0.3
+ '@csstools/css-parser-algorithms': ^3.0.5
+ '@csstools/css-tokenizer': ^3.0.4
- '@csstools/css-color-parser@3.0.9':
- resolution: {integrity: sha512-wILs5Zk7BU86UArYBJTPy/FMPPKVKHMj1ycCEyf3VUptol0JNRLFU/BZsJ4aiIHJEbSLiizzRrw8Pc1uAEDrXw==}
+ '@csstools/css-color-parser@3.0.10':
+ resolution: {integrity: sha512-TiJ5Ajr6WRd1r8HSiwJvZBiJOqtH86aHpUjq5aEKWHiII2Qfjqd/HCWKPOW8EP4vcspXbHnXrwIDlu5savQipg==}
engines: {node: '>=18'}
peerDependencies:
- '@csstools/css-parser-algorithms': ^3.0.4
- '@csstools/css-tokenizer': ^3.0.3
+ '@csstools/css-parser-algorithms': ^3.0.5
+ '@csstools/css-tokenizer': ^3.0.4
- '@csstools/css-parser-algorithms@3.0.4':
- resolution: {integrity: sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==}
+ '@csstools/css-parser-algorithms@3.0.5':
+ resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==}
engines: {node: '>=18'}
peerDependencies:
- '@csstools/css-tokenizer': ^3.0.3
+ '@csstools/css-tokenizer': ^3.0.4
- '@csstools/css-tokenizer@3.0.3':
- resolution: {integrity: sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==}
+ '@csstools/css-tokenizer@3.0.4':
+ resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==}
engines: {node: '>=18'}
'@docsearch/css@3.8.2':
@@ -209,8 +202,8 @@ packages:
cpu: [ppc64]
os: [aix]
- '@esbuild/aix-ppc64@0.25.3':
- resolution: {integrity: sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ==}
+ '@esbuild/aix-ppc64@0.25.5':
+ resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [aix]
@@ -221,8 +214,8 @@ packages:
cpu: [arm64]
os: [android]
- '@esbuild/android-arm64@0.25.3':
- resolution: {integrity: sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ==}
+ '@esbuild/android-arm64@0.25.5':
+ resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [android]
@@ -233,8 +226,8 @@ packages:
cpu: [arm]
os: [android]
- '@esbuild/android-arm@0.25.3':
- resolution: {integrity: sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A==}
+ '@esbuild/android-arm@0.25.5':
+ resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==}
engines: {node: '>=18'}
cpu: [arm]
os: [android]
@@ -245,8 +238,8 @@ packages:
cpu: [x64]
os: [android]
- '@esbuild/android-x64@0.25.3':
- resolution: {integrity: sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ==}
+ '@esbuild/android-x64@0.25.5':
+ resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==}
engines: {node: '>=18'}
cpu: [x64]
os: [android]
@@ -257,8 +250,8 @@ packages:
cpu: [arm64]
os: [darwin]
- '@esbuild/darwin-arm64@0.25.3':
- resolution: {integrity: sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w==}
+ '@esbuild/darwin-arm64@0.25.5':
+ resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==}
engines: {node: '>=18'}
cpu: [arm64]
os: [darwin]
@@ -269,8 +262,8 @@ packages:
cpu: [x64]
os: [darwin]
- '@esbuild/darwin-x64@0.25.3':
- resolution: {integrity: sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A==}
+ '@esbuild/darwin-x64@0.25.5':
+ resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [darwin]
@@ -281,8 +274,8 @@ packages:
cpu: [arm64]
os: [freebsd]
- '@esbuild/freebsd-arm64@0.25.3':
- resolution: {integrity: sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw==}
+ '@esbuild/freebsd-arm64@0.25.5':
+ resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [freebsd]
@@ -293,8 +286,8 @@ packages:
cpu: [x64]
os: [freebsd]
- '@esbuild/freebsd-x64@0.25.3':
- resolution: {integrity: sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q==}
+ '@esbuild/freebsd-x64@0.25.5':
+ resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==}
engines: {node: '>=18'}
cpu: [x64]
os: [freebsd]
@@ -305,8 +298,8 @@ packages:
cpu: [arm64]
os: [linux]
- '@esbuild/linux-arm64@0.25.3':
- resolution: {integrity: sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A==}
+ '@esbuild/linux-arm64@0.25.5':
+ resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [linux]
@@ -317,8 +310,8 @@ packages:
cpu: [arm]
os: [linux]
- '@esbuild/linux-arm@0.25.3':
- resolution: {integrity: sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ==}
+ '@esbuild/linux-arm@0.25.5':
+ resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==}
engines: {node: '>=18'}
cpu: [arm]
os: [linux]
@@ -329,8 +322,8 @@ packages:
cpu: [ia32]
os: [linux]
- '@esbuild/linux-ia32@0.25.3':
- resolution: {integrity: sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw==}
+ '@esbuild/linux-ia32@0.25.5':
+ resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==}
engines: {node: '>=18'}
cpu: [ia32]
os: [linux]
@@ -341,8 +334,8 @@ packages:
cpu: [loong64]
os: [linux]
- '@esbuild/linux-loong64@0.25.3':
- resolution: {integrity: sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g==}
+ '@esbuild/linux-loong64@0.25.5':
+ resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==}
engines: {node: '>=18'}
cpu: [loong64]
os: [linux]
@@ -353,8 +346,8 @@ packages:
cpu: [mips64el]
os: [linux]
- '@esbuild/linux-mips64el@0.25.3':
- resolution: {integrity: sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag==}
+ '@esbuild/linux-mips64el@0.25.5':
+ resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==}
engines: {node: '>=18'}
cpu: [mips64el]
os: [linux]
@@ -365,8 +358,8 @@ packages:
cpu: [ppc64]
os: [linux]
- '@esbuild/linux-ppc64@0.25.3':
- resolution: {integrity: sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg==}
+ '@esbuild/linux-ppc64@0.25.5':
+ resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [linux]
@@ -377,8 +370,8 @@ packages:
cpu: [riscv64]
os: [linux]
- '@esbuild/linux-riscv64@0.25.3':
- resolution: {integrity: sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA==}
+ '@esbuild/linux-riscv64@0.25.5':
+ resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==}
engines: {node: '>=18'}
cpu: [riscv64]
os: [linux]
@@ -389,8 +382,8 @@ packages:
cpu: [s390x]
os: [linux]
- '@esbuild/linux-s390x@0.25.3':
- resolution: {integrity: sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ==}
+ '@esbuild/linux-s390x@0.25.5':
+ resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==}
engines: {node: '>=18'}
cpu: [s390x]
os: [linux]
@@ -401,14 +394,14 @@ packages:
cpu: [x64]
os: [linux]
- '@esbuild/linux-x64@0.25.3':
- resolution: {integrity: sha512-nQHDz4pXjSDC6UfOE1Fw9Q8d6GCAd9KdvMZpfVGWSJztYCarRgSDfOVBY5xwhQXseiyxapkiSJi/5/ja8mRFFA==}
+ '@esbuild/linux-x64@0.25.5':
+ resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==}
engines: {node: '>=18'}
cpu: [x64]
os: [linux]
- '@esbuild/netbsd-arm64@0.25.3':
- resolution: {integrity: sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA==}
+ '@esbuild/netbsd-arm64@0.25.5':
+ resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [netbsd]
@@ -419,14 +412,14 @@ packages:
cpu: [x64]
os: [netbsd]
- '@esbuild/netbsd-x64@0.25.3':
- resolution: {integrity: sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g==}
+ '@esbuild/netbsd-x64@0.25.5':
+ resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [netbsd]
- '@esbuild/openbsd-arm64@0.25.3':
- resolution: {integrity: sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ==}
+ '@esbuild/openbsd-arm64@0.25.5':
+ resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openbsd]
@@ -437,8 +430,8 @@ packages:
cpu: [x64]
os: [openbsd]
- '@esbuild/openbsd-x64@0.25.3':
- resolution: {integrity: sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w==}
+ '@esbuild/openbsd-x64@0.25.5':
+ resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==}
engines: {node: '>=18'}
cpu: [x64]
os: [openbsd]
@@ -449,8 +442,8 @@ packages:
cpu: [x64]
os: [sunos]
- '@esbuild/sunos-x64@0.25.3':
- resolution: {integrity: sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA==}
+ '@esbuild/sunos-x64@0.25.5':
+ resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==}
engines: {node: '>=18'}
cpu: [x64]
os: [sunos]
@@ -461,8 +454,8 @@ packages:
cpu: [arm64]
os: [win32]
- '@esbuild/win32-arm64@0.25.3':
- resolution: {integrity: sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ==}
+ '@esbuild/win32-arm64@0.25.5':
+ resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [win32]
@@ -473,8 +466,8 @@ packages:
cpu: [ia32]
os: [win32]
- '@esbuild/win32-ia32@0.25.3':
- resolution: {integrity: sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew==}
+ '@esbuild/win32-ia32@0.25.5':
+ resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==}
engines: {node: '>=18'}
cpu: [ia32]
os: [win32]
@@ -485,14 +478,14 @@ packages:
cpu: [x64]
os: [win32]
- '@esbuild/win32-x64@0.25.3':
- resolution: {integrity: sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg==}
+ '@esbuild/win32-x64@0.25.5':
+ resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==}
engines: {node: '>=18'}
cpu: [x64]
os: [win32]
- '@eslint-community/eslint-utils@4.6.1':
- resolution: {integrity: sha512-KTsJMmobmbrFLe3LDh0PC2FXpcSYJt/MLjlkh/9LEnmKYLSYmT/0EW9JWANjeoemiuZrmogti0tW5Ch+qNUYDw==}
+ '@eslint-community/eslint-utils@4.7.0':
+ resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
@@ -522,8 +515,8 @@ packages:
resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==}
deprecated: Use @eslint/object-schema instead
- '@iconify-json/simple-icons@1.2.33':
- resolution: {integrity: sha512-nL5/UmI9x5PQ/AHv6bOaL2pH6twEdEz4pI89efB/K7HFn5etQnxMtGx9DFlOg/sRA2/yFpX8KXvc95CSDv5bJA==}
+ '@iconify-json/simple-icons@1.2.38':
+ resolution: {integrity: sha512-mvMeFQgVjoHanQE9Q7ihmriEXAorjLZW+crUgQspDjFpzWuQp2RZMTppl1MN6TQztMVTsNFgF6LDKsp+v1RYRg==}
'@iconify/types@2.0.0':
resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
@@ -606,103 +599,103 @@ packages:
rollup:
optional: true
- '@rollup/rollup-android-arm-eabi@4.40.0':
- resolution: {integrity: sha512-+Fbls/diZ0RDerhE8kyC6hjADCXA1K4yVNlH0EYfd2XjyH0UGgzaQ8MlT0pCXAThfxv3QUAczHaL+qSv1E4/Cg==}
+ '@rollup/rollup-android-arm-eabi@4.43.0':
+ resolution: {integrity: sha512-Krjy9awJl6rKbruhQDgivNbD1WuLb8xAclM4IR4cN5pHGAs2oIMMQJEiC3IC/9TZJ+QZkmZhlMO/6MBGxPidpw==}
cpu: [arm]
os: [android]
- '@rollup/rollup-android-arm64@4.40.0':
- resolution: {integrity: sha512-PPA6aEEsTPRz+/4xxAmaoWDqh67N7wFbgFUJGMnanCFs0TV99M0M8QhhaSCks+n6EbQoFvLQgYOGXxlMGQe/6w==}
+ '@rollup/rollup-android-arm64@4.43.0':
+ resolution: {integrity: sha512-ss4YJwRt5I63454Rpj+mXCXicakdFmKnUNxr1dLK+5rv5FJgAxnN7s31a5VchRYxCFWdmnDWKd0wbAdTr0J5EA==}
cpu: [arm64]
os: [android]
- '@rollup/rollup-darwin-arm64@4.40.0':
- resolution: {integrity: sha512-GwYOcOakYHdfnjjKwqpTGgn5a6cUX7+Ra2HeNj/GdXvO2VJOOXCiYYlRFU4CubFM67EhbmzLOmACKEfvp3J1kQ==}
+ '@rollup/rollup-darwin-arm64@4.43.0':
+ resolution: {integrity: sha512-eKoL8ykZ7zz8MjgBenEF2OoTNFAPFz1/lyJ5UmmFSz5jW+7XbH1+MAgCVHy72aG59rbuQLcJeiMrP8qP5d/N0A==}
cpu: [arm64]
os: [darwin]
- '@rollup/rollup-darwin-x64@4.40.0':
- resolution: {integrity: sha512-CoLEGJ+2eheqD9KBSxmma6ld01czS52Iw0e2qMZNpPDlf7Z9mj8xmMemxEucinev4LgHalDPczMyxzbq+Q+EtA==}
+ '@rollup/rollup-darwin-x64@4.43.0':
+ resolution: {integrity: sha512-SYwXJgaBYW33Wi/q4ubN+ldWC4DzQY62S4Ll2dgfr/dbPoF50dlQwEaEHSKrQdSjC6oIe1WgzosoaNoHCdNuMg==}
cpu: [x64]
os: [darwin]
- '@rollup/rollup-freebsd-arm64@4.40.0':
- resolution: {integrity: sha512-r7yGiS4HN/kibvESzmrOB/PxKMhPTlz+FcGvoUIKYoTyGd5toHp48g1uZy1o1xQvybwwpqpe010JrcGG2s5nkg==}
+ '@rollup/rollup-freebsd-arm64@4.43.0':
+ resolution: {integrity: sha512-SV+U5sSo0yujrjzBF7/YidieK2iF6E7MdF6EbYxNz94lA+R0wKl3SiixGyG/9Klab6uNBIqsN7j4Y/Fya7wAjQ==}
cpu: [arm64]
os: [freebsd]
- '@rollup/rollup-freebsd-x64@4.40.0':
- resolution: {integrity: sha512-mVDxzlf0oLzV3oZOr0SMJ0lSDd3xC4CmnWJ8Val8isp9jRGl5Dq//LLDSPFrasS7pSm6m5xAcKaw3sHXhBjoRw==}
+ '@rollup/rollup-freebsd-x64@4.43.0':
+ resolution: {integrity: sha512-J7uCsiV13L/VOeHJBo5SjasKiGxJ0g+nQTrBkAsmQBIdil3KhPnSE9GnRon4ejX1XDdsmK/l30IYLiAaQEO0Cg==}
cpu: [x64]
os: [freebsd]
- '@rollup/rollup-linux-arm-gnueabihf@4.40.0':
- resolution: {integrity: sha512-y/qUMOpJxBMy8xCXD++jeu8t7kzjlOCkoxxajL58G62PJGBZVl/Gwpm7JK9+YvlB701rcQTzjUZ1JgUoPTnoQA==}
+ '@rollup/rollup-linux-arm-gnueabihf@4.43.0':
+ resolution: {integrity: sha512-gTJ/JnnjCMc15uwB10TTATBEhK9meBIY+gXP4s0sHD1zHOaIh4Dmy1X9wup18IiY9tTNk5gJc4yx9ctj/fjrIw==}
cpu: [arm]
os: [linux]
- '@rollup/rollup-linux-arm-musleabihf@4.40.0':
- resolution: {integrity: sha512-GoCsPibtVdJFPv/BOIvBKO/XmwZLwaNWdyD8TKlXuqp0veo2sHE+A/vpMQ5iSArRUz/uaoj4h5S6Pn0+PdhRjg==}
+ '@rollup/rollup-linux-arm-musleabihf@4.43.0':
+ resolution: {integrity: sha512-ZJ3gZynL1LDSIvRfz0qXtTNs56n5DI2Mq+WACWZ7yGHFUEirHBRt7fyIk0NsCKhmRhn7WAcjgSkSVVxKlPNFFw==}
cpu: [arm]
os: [linux]
- '@rollup/rollup-linux-arm64-gnu@4.40.0':
- resolution: {integrity: sha512-L5ZLphTjjAD9leJzSLI7rr8fNqJMlGDKlazW2tX4IUF9P7R5TMQPElpH82Q7eNIDQnQlAyiNVfRPfP2vM5Avvg==}
+ '@rollup/rollup-linux-arm64-gnu@4.43.0':
+ resolution: {integrity: sha512-8FnkipasmOOSSlfucGYEu58U8cxEdhziKjPD2FIa0ONVMxvl/hmONtX/7y4vGjdUhjcTHlKlDhw3H9t98fPvyA==}
cpu: [arm64]
os: [linux]
- '@rollup/rollup-linux-arm64-musl@4.40.0':
- resolution: {integrity: sha512-ATZvCRGCDtv1Y4gpDIXsS+wfFeFuLwVxyUBSLawjgXK2tRE6fnsQEkE4csQQYWlBlsFztRzCnBvWVfcae/1qxQ==}
+ '@rollup/rollup-linux-arm64-musl@4.43.0':
+ resolution: {integrity: sha512-KPPyAdlcIZ6S9C3S2cndXDkV0Bb1OSMsX0Eelr2Bay4EsF9yi9u9uzc9RniK3mcUGCLhWY9oLr6er80P5DE6XA==}
cpu: [arm64]
os: [linux]
- '@rollup/rollup-linux-loongarch64-gnu@4.40.0':
- resolution: {integrity: sha512-wG9e2XtIhd++QugU5MD9i7OnpaVb08ji3P1y/hNbxrQ3sYEelKJOq1UJ5dXczeo6Hj2rfDEL5GdtkMSVLa/AOg==}
+ '@rollup/rollup-linux-loongarch64-gnu@4.43.0':
+ resolution: {integrity: sha512-HPGDIH0/ZzAZjvtlXj6g+KDQ9ZMHfSP553za7o2Odegb/BEfwJcR0Sw0RLNpQ9nC6Gy8s+3mSS9xjZ0n3rhcYg==}
cpu: [loong64]
os: [linux]
- '@rollup/rollup-linux-powerpc64le-gnu@4.40.0':
- resolution: {integrity: sha512-vgXfWmj0f3jAUvC7TZSU/m/cOE558ILWDzS7jBhiCAFpY2WEBn5jqgbqvmzlMjtp8KlLcBlXVD2mkTSEQE6Ixw==}
+ '@rollup/rollup-linux-powerpc64le-gnu@4.43.0':
+ resolution: {integrity: sha512-gEmwbOws4U4GLAJDhhtSPWPXUzDfMRedT3hFMyRAvM9Mrnj+dJIFIeL7otsv2WF3D7GrV0GIewW0y28dOYWkmw==}
cpu: [ppc64]
os: [linux]
- '@rollup/rollup-linux-riscv64-gnu@4.40.0':
- resolution: {integrity: sha512-uJkYTugqtPZBS3Z136arevt/FsKTF/J9dEMTX/cwR7lsAW4bShzI2R0pJVw+hcBTWF4dxVckYh72Hk3/hWNKvA==}
+ '@rollup/rollup-linux-riscv64-gnu@4.43.0':
+ resolution: {integrity: sha512-XXKvo2e+wFtXZF/9xoWohHg+MuRnvO29TI5Hqe9xwN5uN8NKUYy7tXUG3EZAlfchufNCTHNGjEx7uN78KsBo0g==}
cpu: [riscv64]
os: [linux]
- '@rollup/rollup-linux-riscv64-musl@4.40.0':
- resolution: {integrity: sha512-rKmSj6EXQRnhSkE22+WvrqOqRtk733x3p5sWpZilhmjnkHkpeCgWsFFo0dGnUGeA+OZjRl3+VYq+HyCOEuwcxQ==}
+ '@rollup/rollup-linux-riscv64-musl@4.43.0':
+ resolution: {integrity: sha512-ruf3hPWhjw6uDFsOAzmbNIvlXFXlBQ4nk57Sec8E8rUxs/AI4HD6xmiiasOOx/3QxS2f5eQMKTAwk7KHwpzr/Q==}
cpu: [riscv64]
os: [linux]
- '@rollup/rollup-linux-s390x-gnu@4.40.0':
- resolution: {integrity: sha512-SpnYlAfKPOoVsQqmTFJ0usx0z84bzGOS9anAC0AZ3rdSo3snecihbhFTlJZ8XMwzqAcodjFU4+/SM311dqE5Sw==}
+ '@rollup/rollup-linux-s390x-gnu@4.43.0':
+ resolution: {integrity: sha512-QmNIAqDiEMEvFV15rsSnjoSmO0+eJLoKRD9EAa9rrYNwO/XRCtOGM3A5A0X+wmG+XRrw9Fxdsw+LnyYiZWWcVw==}
cpu: [s390x]
os: [linux]
- '@rollup/rollup-linux-x64-gnu@4.40.0':
- resolution: {integrity: sha512-RcDGMtqF9EFN8i2RYN2W+64CdHruJ5rPqrlYw+cgM3uOVPSsnAQps7cpjXe9be/yDp8UC7VLoCoKC8J3Kn2FkQ==}
+ '@rollup/rollup-linux-x64-gnu@4.43.0':
+ resolution: {integrity: sha512-jAHr/S0iiBtFyzjhOkAics/2SrXE092qyqEg96e90L3t9Op8OTzS6+IX0Fy5wCt2+KqeHAkti+eitV0wvblEoQ==}
cpu: [x64]
os: [linux]
- '@rollup/rollup-linux-x64-musl@4.40.0':
- resolution: {integrity: sha512-HZvjpiUmSNx5zFgwtQAV1GaGazT2RWvqeDi0hV+AtC8unqqDSsaFjPxfsO6qPtKRRg25SisACWnJ37Yio8ttaw==}
+ '@rollup/rollup-linux-x64-musl@4.43.0':
+ resolution: {integrity: sha512-3yATWgdeXyuHtBhrLt98w+5fKurdqvs8B53LaoKD7P7H7FKOONLsBVMNl9ghPQZQuYcceV5CDyPfyfGpMWD9mQ==}
cpu: [x64]
os: [linux]
- '@rollup/rollup-win32-arm64-msvc@4.40.0':
- resolution: {integrity: sha512-UtZQQI5k/b8d7d3i9AZmA/t+Q4tk3hOC0tMOMSq2GlMYOfxbesxG4mJSeDp0EHs30N9bsfwUvs3zF4v/RzOeTQ==}
+ '@rollup/rollup-win32-arm64-msvc@4.43.0':
+ resolution: {integrity: sha512-wVzXp2qDSCOpcBCT5WRWLmpJRIzv23valvcTwMHEobkjippNf+C3ys/+wf07poPkeNix0paTNemB2XrHr2TnGw==}
cpu: [arm64]
os: [win32]
- '@rollup/rollup-win32-ia32-msvc@4.40.0':
- resolution: {integrity: sha512-+m03kvI2f5syIqHXCZLPVYplP8pQch9JHyXKZ3AGMKlg8dCyr2PKHjwRLiW53LTrN/Nc3EqHOKxUxzoSPdKddA==}
+ '@rollup/rollup-win32-ia32-msvc@4.43.0':
+ resolution: {integrity: sha512-fYCTEyzf8d+7diCw8b+asvWDCLMjsCEA8alvtAutqJOJp/wL5hs1rWSqJ1vkjgW0L2NB4bsYJrpKkiIPRR9dvw==}
cpu: [ia32]
os: [win32]
- '@rollup/rollup-win32-x64-msvc@4.40.0':
- resolution: {integrity: sha512-lpPE1cLfP5oPzVjKMx10pgBmKELQnFJXHgvtHCtuJWOv8MxqdEIMNtgHgBFf7Ea2/7EuVwa9fodWUfXAlXZLZQ==}
+ '@rollup/rollup-win32-x64-msvc@4.43.0':
+ resolution: {integrity: sha512-SnGhLiE5rlK0ofq8kzuDkM0g7FN1s5VYY+YSMTibP7CqShxCQvqtNxTARS4xX4PFJfHjG0ZQYX9iGzI3FQh5Aw==}
cpu: [x64]
os: [win32]
@@ -730,9 +723,21 @@ packages:
'@shikijs/vscode-textmate@10.0.2':
resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==}
+ '@types/chai@5.2.2':
+ resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==}
+
+ '@types/debug@4.1.12':
+ resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
+
+ '@types/deep-eql@4.0.2':
+ resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
+
'@types/estree@1.0.7':
resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==}
+ '@types/estree@1.0.8':
+ resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+
'@types/hast@3.0.4':
resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
@@ -748,6 +753,9 @@ packages:
'@types/mdurl@2.0.0':
resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==}
+ '@types/ms@2.1.0':
+ resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
+
'@types/resolve@1.20.2':
resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
@@ -760,79 +768,79 @@ packages:
'@ungap/structured-clone@1.3.0':
resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
- '@vitejs/plugin-vue@5.2.3':
- resolution: {integrity: sha512-IYSLEQj4LgZZuoVpdSUCw3dIynTWQgPlaRP6iAvMle4My0HdYwr5g5wQAfwOeHQBmYwEkqF70nRpSilr6PoUDg==}
+ '@vitejs/plugin-vue@5.2.4':
+ resolution: {integrity: sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==}
engines: {node: ^18.0.0 || >=20.0.0}
peerDependencies:
vite: ^5.0.0 || ^6.0.0
vue: ^3.2.25
- '@vitest/expect@3.1.2':
- resolution: {integrity: sha512-O8hJgr+zREopCAqWl3uCVaOdqJwZ9qaDwUP7vy3Xigad0phZe9APxKhPcDNqYYi0rX5oMvwJMSCAXY2afqeTSA==}
+ '@vitest/expect@3.2.3':
+ resolution: {integrity: sha512-W2RH2TPWVHA1o7UmaFKISPvdicFJH+mjykctJFoAkUw+SPTJTGjUNdKscFBrqM7IPnCVu6zihtKYa7TkZS1dkQ==}
- '@vitest/mocker@3.1.2':
- resolution: {integrity: sha512-kOtd6K2lc7SQ0mBqYv/wdGedlqPdM/B38paPY+OwJ1XiNi44w3Fpog82UfOibmHaV9Wod18A09I9SCKLyDMqgw==}
+ '@vitest/mocker@3.2.3':
+ resolution: {integrity: sha512-cP6fIun+Zx8he4rbWvi+Oya6goKQDZK+Yq4hhlggwQBbrlOQ4qtZ+G4nxB6ZnzI9lyIb+JnvyiJnPC2AGbKSPA==}
peerDependencies:
msw: ^2.4.9
- vite: ^5.0.0 || ^6.0.0
+ vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0
peerDependenciesMeta:
msw:
optional: true
vite:
optional: true
- '@vitest/pretty-format@3.1.2':
- resolution: {integrity: sha512-R0xAiHuWeDjTSB3kQ3OQpT8Rx3yhdOAIm/JM4axXxnG7Q/fS8XUwggv/A4xzbQA+drYRjzkMnpYnOGAc4oeq8w==}
+ '@vitest/pretty-format@3.2.3':
+ resolution: {integrity: sha512-yFglXGkr9hW/yEXngO+IKMhP0jxyFw2/qys/CK4fFUZnSltD+MU7dVYGrH8rvPcK/O6feXQA+EU33gjaBBbAng==}
- '@vitest/runner@3.1.2':
- resolution: {integrity: sha512-bhLib9l4xb4sUMPXnThbnhX2Yi8OutBMA8Yahxa7yavQsFDtwY/jrUZwpKp2XH9DhRFJIeytlyGpXCqZ65nR+g==}
+ '@vitest/runner@3.2.3':
+ resolution: {integrity: sha512-83HWYisT3IpMaU9LN+VN+/nLHVBCSIUKJzGxC5RWUOsK1h3USg7ojL+UXQR3b4o4UBIWCYdD2fxuzM7PQQ1u8w==}
- '@vitest/snapshot@3.1.2':
- resolution: {integrity: sha512-Q1qkpazSF/p4ApZg1vfZSQ5Yw6OCQxVMVrLjslbLFA1hMDrT2uxtqMaw8Tc/jy5DLka1sNs1Y7rBcftMiaSH/Q==}
+ '@vitest/snapshot@3.2.3':
+ resolution: {integrity: sha512-9gIVWx2+tysDqUmmM1L0hwadyumqssOL1r8KJipwLx5JVYyxvVRfxvMq7DaWbZZsCqZnu/dZedaZQh4iYTtneA==}
- '@vitest/spy@3.1.2':
- resolution: {integrity: sha512-OEc5fSXMws6sHVe4kOFyDSj/+4MSwst0ib4un0DlcYgQvRuYQ0+M2HyqGaauUMnjq87tmUaMNDxKQx7wNfVqPA==}
+ '@vitest/spy@3.2.3':
+ resolution: {integrity: sha512-JHu9Wl+7bf6FEejTCREy+DmgWe+rQKbK+y32C/k5f4TBIAlijhJbRBIRIOCEpVevgRsCQR2iHRUH2/qKVM/plw==}
- '@vitest/utils@3.1.2':
- resolution: {integrity: sha512-5GGd0ytZ7BH3H6JTj9Kw7Prn1Nbg0wZVrIvou+UWxm54d+WoXXgAgjFJ8wn3LdagWLFSEfpPeyYrByZaGEZHLg==}
+ '@vitest/utils@3.2.3':
+ resolution: {integrity: sha512-4zFBCU5Pf+4Z6v+rwnZ1HU1yzOKKvDkMXZrymE2PBlbjKJRlrOxbvpfPSvJTGRIwGoahaOGvp+kbCoxifhzJ1Q==}
- '@vue/compiler-core@3.5.13':
- resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==}
+ '@vue/compiler-core@3.5.16':
+ resolution: {integrity: sha512-AOQS2eaQOaaZQoL1u+2rCJIKDruNXVBZSiUD3chnUrsoX5ZTQMaCvXlWNIfxBJuU15r1o7+mpo5223KVtIhAgQ==}
- '@vue/compiler-dom@3.5.13':
- resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==}
+ '@vue/compiler-dom@3.5.16':
+ resolution: {integrity: sha512-SSJIhBr/teipXiXjmWOVWLnxjNGo65Oj/8wTEQz0nqwQeP75jWZ0n4sF24Zxoht1cuJoWopwj0J0exYwCJ0dCQ==}
- '@vue/compiler-sfc@3.5.13':
- resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==}
+ '@vue/compiler-sfc@3.5.16':
+ resolution: {integrity: sha512-rQR6VSFNpiinDy/DVUE0vHoIDUF++6p910cgcZoaAUm3POxgNOOdS/xgoll3rNdKYTYPnnbARDCZOyZ+QSe6Pw==}
- '@vue/compiler-ssr@3.5.13':
- resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==}
+ '@vue/compiler-ssr@3.5.16':
+ resolution: {integrity: sha512-d2V7kfxbdsjrDSGlJE7my1ZzCXViEcqN6w14DOsDrUCHEA6vbnVCpRFfrc4ryCP/lCKzX2eS1YtnLE/BuC9f/A==}
- '@vue/devtools-api@7.7.5':
- resolution: {integrity: sha512-HYV3tJGARROq5nlVMJh5KKHk7GU8Au3IrrmNNqr978m0edxgpHgYPDoNUGrvEgIbObz09SQezFR3A1EVmB5WZg==}
+ '@vue/devtools-api@7.7.6':
+ resolution: {integrity: sha512-b2Xx0KvXZObePpXPYHvBRRJLDQn5nhKjXh7vUhMEtWxz1AYNFOVIsh5+HLP8xDGL7sy+Q7hXeUxPHB/KgbtsPw==}
- '@vue/devtools-kit@7.7.5':
- resolution: {integrity: sha512-S9VAVJYVAe4RPx2JZb9ZTEi0lqTySz2CBeF0wHT5D3dkTLnT9yMMGegKNl4b2EIELwLSkcI9bl2qp0/jW+upqA==}
+ '@vue/devtools-kit@7.7.6':
+ resolution: {integrity: sha512-geu7ds7tem2Y7Wz+WgbnbZ6T5eadOvozHZ23Atk/8tksHMFOFylKi1xgGlQlVn0wlkEf4hu+vd5ctj1G4kFtwA==}
- '@vue/devtools-shared@7.7.5':
- resolution: {integrity: sha512-QBjG72RfpM0DKtpns2RZOxBltO226kOAls9e4Lri6YxS2gWTgL0H+wj1R2K76lxxIeOrqo4+2Ty6RQnzv+WSTQ==}
+ '@vue/devtools-shared@7.7.6':
+ resolution: {integrity: sha512-yFEgJZ/WblEsojQQceuyK6FzpFDx4kqrz2ohInxNj5/DnhoX023upTv4OD6lNPLAA5LLkbwPVb10o/7b+Y4FVA==}
- '@vue/reactivity@3.5.13':
- resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==}
+ '@vue/reactivity@3.5.16':
+ resolution: {integrity: sha512-FG5Q5ee/kxhIm1p2bykPpPwqiUBV3kFySsHEQha5BJvjXdZTUfmya7wP7zC39dFuZAcf/PD5S4Lni55vGLMhvA==}
- '@vue/runtime-core@3.5.13':
- resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==}
+ '@vue/runtime-core@3.5.16':
+ resolution: {integrity: sha512-bw5Ykq6+JFHYxrQa7Tjr+VSzw7Dj4ldR/udyBZbq73fCdJmyy5MPIFR9IX/M5Qs+TtTjuyUTCnmK3lWWwpAcFQ==}
- '@vue/runtime-dom@3.5.13':
- resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==}
+ '@vue/runtime-dom@3.5.16':
+ resolution: {integrity: sha512-T1qqYJsG2xMGhImRUV9y/RseB9d0eCYZQ4CWca9ztCuiPj/XWNNN+lkNBuzVbia5z4/cgxdL28NoQCvC0Xcfww==}
- '@vue/server-renderer@3.5.13':
- resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==}
+ '@vue/server-renderer@3.5.16':
+ resolution: {integrity: sha512-BrX0qLiv/WugguGsnQUJiYOE0Fe5mZTwi6b7X/ybGB0vfrPH9z0gD/Y6WOR1sGCgX4gc25L1RYS5eYQKDMoNIg==}
peerDependencies:
- vue: 3.5.13
+ vue: 3.5.16
- '@vue/shared@3.5.13':
- resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==}
+ '@vue/shared@3.5.16':
+ resolution: {integrity: sha512-c/0fWy3Jw6Z8L9FmTyYfkpM5zklnqqa9+a6dz3DvONRKW2NEbh46BP0FHuLFSWi2TnQEtp91Z6zOWNrU6QiyPg==}
'@vueuse/core@12.8.2':
resolution: {integrity: sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==}
@@ -893,8 +901,8 @@ packages:
peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
- acorn@8.14.1:
- resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==}
+ acorn@8.15.0:
+ resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
engines: {node: '>=0.4.0'}
hasBin: true
@@ -905,8 +913,8 @@ packages:
ajv@6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
- algoliasearch@5.23.4:
- resolution: {integrity: sha512-QzAKFHl3fm53s44VHrTdEo0TkpL3XVUYQpnZy1r6/EHvMAyIg+O4hwprzlsNmcCHTNyVcF2S13DAUn7XhkC6qg==}
+ algoliasearch@5.27.0:
+ resolution: {integrity: sha512-2PvAgvxxJzA3+dB+ERfS2JPdvUsxNf89Cc2GF5iCcFupTULOwmbfinvqrC4Qj9nHJJDNf494NqEN/1f9177ZTQ==}
engines: {node: '>= 14.0.0'}
ansi-regex@5.0.1:
@@ -938,11 +946,11 @@ packages:
birpc@2.3.0:
resolution: {integrity: sha512-ijbtkn/F3Pvzb6jHypHRyve2QApOCZDR25D/VnkY2G/lBNcXCTsnsCxgY4k4PkVB7zfwzYbY3O9Lcqe3xufS5g==}
- brace-expansion@1.1.11:
- resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+ brace-expansion@1.1.12:
+ resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
- brace-expansion@2.0.1:
- resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+ brace-expansion@2.0.2:
+ resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
buffer-from@1.1.2:
resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
@@ -972,9 +980,6 @@ packages:
character-entities-legacy@3.0.0:
resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==}
- charmingjs-vector@0.0.3:
- resolution: {integrity: sha512-7nvY6XOgjErbj5M0hJzNCdjkFCF5JfWNp6wFyqVYPAGrK2hd78hr5GL8bHAUsZomH+eE9Co2AgBw24cwwQu+bg==}
-
check-error@2.1.1:
resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==}
engines: {node: '>= 16'}
@@ -1010,8 +1015,8 @@ packages:
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
engines: {node: '>= 8'}
- cssstyle@4.3.1:
- resolution: {integrity: sha512-ZgW+Jgdd7i52AaLYCriF8Mxqft0gD/R9i9wi6RWBhs1pqdPEzPjym7rvRKi397WmQFf3SlyUsszhw+VVCbx79Q==}
+ cssstyle@4.4.0:
+ resolution: {integrity: sha512-W0Y2HOXlPkb2yaKrCVRjinYKciu/qSLEmK0K9mcfDei3zwlnHFEHAs/Du3cIRwPqY+J4JsiBzUjoHyc8RsJ03A==}
engines: {node: '>=18'}
csstype@3.1.3:
@@ -1051,8 +1056,8 @@ packages:
resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==}
engines: {node: '>=18'}
- debug@4.4.0:
- resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
+ debug@4.4.1:
+ resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
engines: {node: '>=6.0'}
peerDependencies:
supports-color: '*'
@@ -1106,8 +1111,8 @@ packages:
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
engines: {node: '>=0.12'}
- entities@6.0.0:
- resolution: {integrity: sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==}
+ entities@6.0.1:
+ resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
engines: {node: '>=0.12'}
es-module-lexer@1.7.0:
@@ -1118,8 +1123,8 @@ packages:
engines: {node: '>=12'}
hasBin: true
- esbuild@0.25.3:
- resolution: {integrity: sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q==}
+ esbuild@0.25.5:
+ resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==}
engines: {node: '>=18'}
hasBin: true
@@ -1194,8 +1199,8 @@ packages:
fastq@1.19.1:
resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
- fdir@6.4.4:
- resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==}
+ fdir@6.4.6:
+ resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==}
peerDependencies:
picomatch: ^3 || ^4
peerDependenciesMeta:
@@ -1217,8 +1222,8 @@ packages:
flatted@3.3.3:
resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
- focus-trap@7.6.4:
- resolution: {integrity: sha512-xx560wGBk7seZ6y933idtjJQc1l+ck+pI3sKvhKozdBV1dRZoKhkW5xoCaFv9tQiX5RH1xfSxjuNu6g+lmN/gw==}
+ focus-trap@7.6.5:
+ resolution: {integrity: sha512-7Ke1jyybbbPZyZXFxEftUtxFGLMpE2n6A+z//m4CRDlj0hW+o3iYSmh8nFlYMurOiJVDmJRilUQtJr08KfIxlg==}
foreground-child@3.3.1:
resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
@@ -1373,6 +1378,9 @@ packages:
resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==}
engines: {node: '>=14'}
+ js-tokens@9.0.1:
+ resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==}
+
js-yaml@4.1.0:
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
hasBin: true
@@ -1543,12 +1551,12 @@ packages:
resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
engines: {node: '>=12'}
- postcss@8.5.3:
- resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==}
+ postcss@8.5.5:
+ resolution: {integrity: sha512-d/jtm+rdNT8tpXuHY5MMtcbJFBkhXE6593XVR9UoGCH8jSFGci7jGvMGH5RYd5PBJW+00NZQt6gf7CbagJCrhg==}
engines: {node: ^10 || ^12 || >=14}
- preact@10.26.5:
- resolution: {integrity: sha512-fmpDkgfGU6JYux9teDWLhj9mKN55tyepwYbxHgQuIxbWQzgFg5vk7Mrrtfx7xRxq798ynkY4DDDxZr235Kk+4w==}
+ preact@10.26.9:
+ resolution: {integrity: sha512-SSjF9vcnF27mJK1XyFMNJzFd5u3pQiATFqoaDy03XuN00u4ziveVVEGt5RKJrDR8MHE/wJo9Nnad56RLzS2RMA==}
prelude-ls@1.2.1:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
@@ -1559,8 +1567,8 @@ packages:
engines: {node: '>=14'}
hasBin: true
- property-information@7.0.0:
- resolution: {integrity: sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==}
+ property-information@7.1.0:
+ resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==}
proto-list@1.2.4:
resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==}
@@ -1605,8 +1613,8 @@ packages:
deprecated: Rimraf versions prior to v4 are no longer supported
hasBin: true
- rollup@4.40.0:
- resolution: {integrity: sha512-Noe455xmA96nnqH5piFtLobsGbCij7Tu+tb3c1vYjNbTkfzGqXqQXG3wJaYXkRZuQ0vEYN4bhwg7QnIrqB5B+w==}
+ rollup@4.43.0:
+ resolution: {integrity: sha512-wdN2Kd3Twh8MAEOEJZsuxuLKCsBEo4PVNLK6tQWAn10VhsVewQLzcucMgLolRlhFybGxfclbPeEYBaP6RvUFGg==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
@@ -1629,8 +1637,8 @@ packages:
search-insights@2.17.2:
resolution: {integrity: sha512-zFNpOpUO+tY2D85KrxJ+aqwnIfdEGi06UH2+xEb+Bp9Mwznmauqc9djbnBibJO5mpfUPPa8st6Sx65+vbeO45g==}
- semver@7.7.1:
- resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==}
+ semver@7.7.2:
+ resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==}
engines: {node: '>=10'}
hasBin: true
@@ -1705,6 +1713,9 @@ packages:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
+ strip-literal@3.0.0:
+ resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==}
+
superjson@2.2.2:
resolution: {integrity: sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==}
engines: {node: '>=16'}
@@ -1723,8 +1734,8 @@ packages:
tabbable@6.2.0:
resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==}
- terser@5.39.0:
- resolution: {integrity: sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==}
+ terser@5.42.0:
+ resolution: {integrity: sha512-UYCvU9YQW2f/Vwl+P0GfhxJxbUGLwd+5QrrGgLajzWAtC/23AX0vcise32kkP7Eu0Wu9VlzzHAXkLObgjQfFlQ==}
engines: {node: '>=10'}
hasBin: true
@@ -1737,20 +1748,20 @@ packages:
tinyexec@0.3.2:
resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
- tinyglobby@0.2.13:
- resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==}
+ tinyglobby@0.2.14:
+ resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==}
engines: {node: '>=12.0.0'}
- tinypool@1.0.2:
- resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==}
+ tinypool@1.1.0:
+ resolution: {integrity: sha512-7CotroY9a8DKsKprEy/a14aCCm8jYVmR7aFy4fpkZM8sdpNJbKkixuNjgM50yCmip2ezc8z4N7k3oe2+rfRJCQ==}
engines: {node: ^18.0.0 || >=20.0.0}
tinyrainbow@2.0.0:
resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==}
engines: {node: '>=14.0.0'}
- tinyspy@3.0.2:
- resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==}
+ tinyspy@4.0.3:
+ resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==}
engines: {node: '>=14.0.0'}
tldts-core@6.1.86:
@@ -1779,6 +1790,11 @@ packages:
resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
engines: {node: '>=10'}
+ typescript@5.8.3:
+ resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
unist-util-is@6.0.0:
resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==}
@@ -1803,13 +1819,13 @@ packages:
vfile@6.0.3:
resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
- vite-node@3.1.2:
- resolution: {integrity: sha512-/8iMryv46J3aK13iUXsei5G/A3CUlW4665THCPS+K8xAaqrVWiGB4RfXMQXCLjpK9P2eK//BczrVkn5JLAk6DA==}
+ vite-node@3.2.3:
+ resolution: {integrity: sha512-gc8aAifGuDIpZHrPjuHyP4dpQmYXqWw7D1GmDnWeNWP654UEXzVfQ5IHPSK5HaHkwB/+p1atpYpSdw/2kOv8iQ==}
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
hasBin: true
- vite@5.4.18:
- resolution: {integrity: sha512-1oDcnEp3lVyHCuQ2YFelM4Alm2o91xNoMncRm1U7S+JdYfYOvbiGZ3/CxGttrOu2M/KcGz7cRC2DoNUA6urmMA==}
+ vite@5.4.19:
+ resolution: {integrity: sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
peerDependencies:
@@ -1839,8 +1855,8 @@ packages:
terser:
optional: true
- vite@6.3.3:
- resolution: {integrity: sha512-5nXH+QsELbFKhsEfWLkHrvgRpTdGJzqOZ+utSdmPTvwHmvU6ITTm3xx+mRusihkcI8GeC7lCDyn3kDtiki9scw==}
+ vite@6.3.5:
+ resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==}
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
hasBin: true
peerDependencies:
@@ -1891,16 +1907,16 @@ packages:
postcss:
optional: true
- vitest@3.1.2:
- resolution: {integrity: sha512-WaxpJe092ID1C0mr+LH9MmNrhfzi8I65EX/NRU/Ld016KqQNRgxSOlGNP1hHN+a/F8L15Mh8klwaF77zR3GeDQ==}
+ vitest@3.2.3:
+ resolution: {integrity: sha512-E6U2ZFXe3N/t4f5BwUaVCKRLHqUpk1CBWeMh78UT4VaTPH/2dyvH6ALl29JTovEPu9dVKr/K/J4PkXgrMbw4Ww==}
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
hasBin: true
peerDependencies:
'@edge-runtime/vm': '*'
'@types/debug': ^4.1.12
'@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
- '@vitest/browser': 3.1.2
- '@vitest/ui': 3.1.2
+ '@vitest/browser': 3.2.3
+ '@vitest/ui': 3.2.3
happy-dom: '*'
jsdom: '*'
peerDependenciesMeta:
@@ -1919,8 +1935,8 @@ packages:
jsdom:
optional: true
- vue@3.5.13:
- resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==}
+ vue@3.5.16:
+ resolution: {integrity: sha512-rjOV2ecxMd5SiAmof2xzh2WxntRcigkX/He4YFJ6WdRvVUrbt6DxC1Iujh10XLl8xCDRDtGKMeO3D+pRQ1PP9w==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
@@ -1972,8 +1988,8 @@ packages:
wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
- ws@8.18.1:
- resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==}
+ ws@8.18.2:
+ resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==}
engines: {node: '>=10.0.0'}
peerDependencies:
bufferutil: ^4.0.1
@@ -1991,6 +2007,11 @@ packages:
xmlchars@2.2.0:
resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==}
+ yaml@2.8.0:
+ resolution: {integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==}
+ engines: {node: '>= 14.6'}
+ hasBin: true
+
yocto-queue@0.1.0:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
@@ -2000,158 +2021,158 @@ packages:
snapshots:
- '@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.23.4)(algoliasearch@5.23.4)(search-insights@2.17.2)':
+ '@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.27.0)(algoliasearch@5.27.0)(search-insights@2.17.2)':
dependencies:
- '@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.23.4)(algoliasearch@5.23.4)(search-insights@2.17.2)
- '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.23.4)(algoliasearch@5.23.4)
+ '@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.27.0)(algoliasearch@5.27.0)(search-insights@2.17.2)
+ '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.27.0)(algoliasearch@5.27.0)
transitivePeerDependencies:
- '@algolia/client-search'
- algoliasearch
- search-insights
- '@algolia/autocomplete-plugin-algolia-insights@1.17.7(@algolia/client-search@5.23.4)(algoliasearch@5.23.4)(search-insights@2.17.2)':
+ '@algolia/autocomplete-plugin-algolia-insights@1.17.7(@algolia/client-search@5.27.0)(algoliasearch@5.27.0)(search-insights@2.17.2)':
dependencies:
- '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.23.4)(algoliasearch@5.23.4)
+ '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.27.0)(algoliasearch@5.27.0)
search-insights: 2.17.2
transitivePeerDependencies:
- '@algolia/client-search'
- algoliasearch
- '@algolia/autocomplete-preset-algolia@1.17.7(@algolia/client-search@5.23.4)(algoliasearch@5.23.4)':
+ '@algolia/autocomplete-preset-algolia@1.17.7(@algolia/client-search@5.27.0)(algoliasearch@5.27.0)':
dependencies:
- '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.23.4)(algoliasearch@5.23.4)
- '@algolia/client-search': 5.23.4
- algoliasearch: 5.23.4
+ '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.27.0)(algoliasearch@5.27.0)
+ '@algolia/client-search': 5.27.0
+ algoliasearch: 5.27.0
- '@algolia/autocomplete-shared@1.17.7(@algolia/client-search@5.23.4)(algoliasearch@5.23.4)':
+ '@algolia/autocomplete-shared@1.17.7(@algolia/client-search@5.27.0)(algoliasearch@5.27.0)':
dependencies:
- '@algolia/client-search': 5.23.4
- algoliasearch: 5.23.4
+ '@algolia/client-search': 5.27.0
+ algoliasearch: 5.27.0
- '@algolia/client-abtesting@5.23.4':
+ '@algolia/client-abtesting@5.27.0':
dependencies:
- '@algolia/client-common': 5.23.4
- '@algolia/requester-browser-xhr': 5.23.4
- '@algolia/requester-fetch': 5.23.4
- '@algolia/requester-node-http': 5.23.4
+ '@algolia/client-common': 5.27.0
+ '@algolia/requester-browser-xhr': 5.27.0
+ '@algolia/requester-fetch': 5.27.0
+ '@algolia/requester-node-http': 5.27.0
- '@algolia/client-analytics@5.23.4':
+ '@algolia/client-analytics@5.27.0':
dependencies:
- '@algolia/client-common': 5.23.4
- '@algolia/requester-browser-xhr': 5.23.4
- '@algolia/requester-fetch': 5.23.4
- '@algolia/requester-node-http': 5.23.4
+ '@algolia/client-common': 5.27.0
+ '@algolia/requester-browser-xhr': 5.27.0
+ '@algolia/requester-fetch': 5.27.0
+ '@algolia/requester-node-http': 5.27.0
- '@algolia/client-common@5.23.4': {}
+ '@algolia/client-common@5.27.0': {}
- '@algolia/client-insights@5.23.4':
+ '@algolia/client-insights@5.27.0':
dependencies:
- '@algolia/client-common': 5.23.4
- '@algolia/requester-browser-xhr': 5.23.4
- '@algolia/requester-fetch': 5.23.4
- '@algolia/requester-node-http': 5.23.4
+ '@algolia/client-common': 5.27.0
+ '@algolia/requester-browser-xhr': 5.27.0
+ '@algolia/requester-fetch': 5.27.0
+ '@algolia/requester-node-http': 5.27.0
- '@algolia/client-personalization@5.23.4':
+ '@algolia/client-personalization@5.27.0':
dependencies:
- '@algolia/client-common': 5.23.4
- '@algolia/requester-browser-xhr': 5.23.4
- '@algolia/requester-fetch': 5.23.4
- '@algolia/requester-node-http': 5.23.4
+ '@algolia/client-common': 5.27.0
+ '@algolia/requester-browser-xhr': 5.27.0
+ '@algolia/requester-fetch': 5.27.0
+ '@algolia/requester-node-http': 5.27.0
- '@algolia/client-query-suggestions@5.23.4':
+ '@algolia/client-query-suggestions@5.27.0':
dependencies:
- '@algolia/client-common': 5.23.4
- '@algolia/requester-browser-xhr': 5.23.4
- '@algolia/requester-fetch': 5.23.4
- '@algolia/requester-node-http': 5.23.4
+ '@algolia/client-common': 5.27.0
+ '@algolia/requester-browser-xhr': 5.27.0
+ '@algolia/requester-fetch': 5.27.0
+ '@algolia/requester-node-http': 5.27.0
- '@algolia/client-search@5.23.4':
+ '@algolia/client-search@5.27.0':
dependencies:
- '@algolia/client-common': 5.23.4
- '@algolia/requester-browser-xhr': 5.23.4
- '@algolia/requester-fetch': 5.23.4
- '@algolia/requester-node-http': 5.23.4
+ '@algolia/client-common': 5.27.0
+ '@algolia/requester-browser-xhr': 5.27.0
+ '@algolia/requester-fetch': 5.27.0
+ '@algolia/requester-node-http': 5.27.0
- '@algolia/ingestion@1.23.4':
+ '@algolia/ingestion@1.27.0':
dependencies:
- '@algolia/client-common': 5.23.4
- '@algolia/requester-browser-xhr': 5.23.4
- '@algolia/requester-fetch': 5.23.4
- '@algolia/requester-node-http': 5.23.4
+ '@algolia/client-common': 5.27.0
+ '@algolia/requester-browser-xhr': 5.27.0
+ '@algolia/requester-fetch': 5.27.0
+ '@algolia/requester-node-http': 5.27.0
- '@algolia/monitoring@1.23.4':
+ '@algolia/monitoring@1.27.0':
dependencies:
- '@algolia/client-common': 5.23.4
- '@algolia/requester-browser-xhr': 5.23.4
- '@algolia/requester-fetch': 5.23.4
- '@algolia/requester-node-http': 5.23.4
+ '@algolia/client-common': 5.27.0
+ '@algolia/requester-browser-xhr': 5.27.0
+ '@algolia/requester-fetch': 5.27.0
+ '@algolia/requester-node-http': 5.27.0
- '@algolia/recommend@5.23.4':
+ '@algolia/recommend@5.27.0':
dependencies:
- '@algolia/client-common': 5.23.4
- '@algolia/requester-browser-xhr': 5.23.4
- '@algolia/requester-fetch': 5.23.4
- '@algolia/requester-node-http': 5.23.4
+ '@algolia/client-common': 5.27.0
+ '@algolia/requester-browser-xhr': 5.27.0
+ '@algolia/requester-fetch': 5.27.0
+ '@algolia/requester-node-http': 5.27.0
- '@algolia/requester-browser-xhr@5.23.4':
+ '@algolia/requester-browser-xhr@5.27.0':
dependencies:
- '@algolia/client-common': 5.23.4
+ '@algolia/client-common': 5.27.0
- '@algolia/requester-fetch@5.23.4':
+ '@algolia/requester-fetch@5.27.0':
dependencies:
- '@algolia/client-common': 5.23.4
+ '@algolia/client-common': 5.27.0
- '@algolia/requester-node-http@5.23.4':
+ '@algolia/requester-node-http@5.27.0':
dependencies:
- '@algolia/client-common': 5.23.4
+ '@algolia/client-common': 5.27.0
- '@asamuzakjp/css-color@3.1.4':
+ '@asamuzakjp/css-color@3.2.0':
dependencies:
- '@csstools/css-calc': 2.1.3(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)
- '@csstools/css-color-parser': 3.0.9(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)
- '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3)
- '@csstools/css-tokenizer': 3.0.3
+ '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-color-parser': 3.0.10(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-tokenizer': 3.0.4
lru-cache: 10.4.3
- '@babel/helper-string-parser@7.25.9': {}
+ '@babel/helper-string-parser@7.27.1': {}
- '@babel/helper-validator-identifier@7.25.9': {}
+ '@babel/helper-validator-identifier@7.27.1': {}
- '@babel/parser@7.27.0':
+ '@babel/parser@7.27.5':
dependencies:
- '@babel/types': 7.27.0
+ '@babel/types': 7.27.6
- '@babel/types@7.27.0':
+ '@babel/types@7.27.6':
dependencies:
- '@babel/helper-string-parser': 7.25.9
- '@babel/helper-validator-identifier': 7.25.9
+ '@babel/helper-string-parser': 7.27.1
+ '@babel/helper-validator-identifier': 7.27.1
'@csstools/color-helpers@5.0.2': {}
- '@csstools/css-calc@2.1.3(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)':
+ '@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)':
dependencies:
- '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3)
- '@csstools/css-tokenizer': 3.0.3
+ '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-tokenizer': 3.0.4
- '@csstools/css-color-parser@3.0.9(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)':
+ '@csstools/css-color-parser@3.0.10(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)':
dependencies:
'@csstools/color-helpers': 5.0.2
- '@csstools/css-calc': 2.1.3(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)
- '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3)
- '@csstools/css-tokenizer': 3.0.3
+ '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-tokenizer': 3.0.4
- '@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3)':
+ '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)':
dependencies:
- '@csstools/css-tokenizer': 3.0.3
+ '@csstools/css-tokenizer': 3.0.4
- '@csstools/css-tokenizer@3.0.3': {}
+ '@csstools/css-tokenizer@3.0.4': {}
'@docsearch/css@3.8.2': {}
- '@docsearch/js@3.8.2(@algolia/client-search@5.23.4)(search-insights@2.17.2)':
+ '@docsearch/js@3.8.2(@algolia/client-search@5.27.0)(search-insights@2.17.2)':
dependencies:
- '@docsearch/react': 3.8.2(@algolia/client-search@5.23.4)(search-insights@2.17.2)
- preact: 10.26.5
+ '@docsearch/react': 3.8.2(@algolia/client-search@5.27.0)(search-insights@2.17.2)
+ preact: 10.26.9
transitivePeerDependencies:
- '@algolia/client-search'
- '@types/react'
@@ -2159,12 +2180,12 @@ snapshots:
- react-dom
- search-insights
- '@docsearch/react@3.8.2(@algolia/client-search@5.23.4)(search-insights@2.17.2)':
+ '@docsearch/react@3.8.2(@algolia/client-search@5.27.0)(search-insights@2.17.2)':
dependencies:
- '@algolia/autocomplete-core': 1.17.7(@algolia/client-search@5.23.4)(algoliasearch@5.23.4)(search-insights@2.17.2)
- '@algolia/autocomplete-preset-algolia': 1.17.7(@algolia/client-search@5.23.4)(algoliasearch@5.23.4)
+ '@algolia/autocomplete-core': 1.17.7(@algolia/client-search@5.27.0)(algoliasearch@5.27.0)(search-insights@2.17.2)
+ '@algolia/autocomplete-preset-algolia': 1.17.7(@algolia/client-search@5.27.0)(algoliasearch@5.27.0)
'@docsearch/css': 3.8.2
- algoliasearch: 5.23.4
+ algoliasearch: 5.27.0
optionalDependencies:
search-insights: 2.17.2
transitivePeerDependencies:
@@ -2173,148 +2194,148 @@ snapshots:
'@esbuild/aix-ppc64@0.21.5':
optional: true
- '@esbuild/aix-ppc64@0.25.3':
+ '@esbuild/aix-ppc64@0.25.5':
optional: true
'@esbuild/android-arm64@0.21.5':
optional: true
- '@esbuild/android-arm64@0.25.3':
+ '@esbuild/android-arm64@0.25.5':
optional: true
'@esbuild/android-arm@0.21.5':
optional: true
- '@esbuild/android-arm@0.25.3':
+ '@esbuild/android-arm@0.25.5':
optional: true
'@esbuild/android-x64@0.21.5':
optional: true
- '@esbuild/android-x64@0.25.3':
+ '@esbuild/android-x64@0.25.5':
optional: true
'@esbuild/darwin-arm64@0.21.5':
optional: true
- '@esbuild/darwin-arm64@0.25.3':
+ '@esbuild/darwin-arm64@0.25.5':
optional: true
'@esbuild/darwin-x64@0.21.5':
optional: true
- '@esbuild/darwin-x64@0.25.3':
+ '@esbuild/darwin-x64@0.25.5':
optional: true
'@esbuild/freebsd-arm64@0.21.5':
optional: true
- '@esbuild/freebsd-arm64@0.25.3':
+ '@esbuild/freebsd-arm64@0.25.5':
optional: true
'@esbuild/freebsd-x64@0.21.5':
optional: true
- '@esbuild/freebsd-x64@0.25.3':
+ '@esbuild/freebsd-x64@0.25.5':
optional: true
'@esbuild/linux-arm64@0.21.5':
optional: true
- '@esbuild/linux-arm64@0.25.3':
+ '@esbuild/linux-arm64@0.25.5':
optional: true
'@esbuild/linux-arm@0.21.5':
optional: true
- '@esbuild/linux-arm@0.25.3':
+ '@esbuild/linux-arm@0.25.5':
optional: true
'@esbuild/linux-ia32@0.21.5':
optional: true
- '@esbuild/linux-ia32@0.25.3':
+ '@esbuild/linux-ia32@0.25.5':
optional: true
'@esbuild/linux-loong64@0.21.5':
optional: true
- '@esbuild/linux-loong64@0.25.3':
+ '@esbuild/linux-loong64@0.25.5':
optional: true
'@esbuild/linux-mips64el@0.21.5':
optional: true
- '@esbuild/linux-mips64el@0.25.3':
+ '@esbuild/linux-mips64el@0.25.5':
optional: true
'@esbuild/linux-ppc64@0.21.5':
optional: true
- '@esbuild/linux-ppc64@0.25.3':
+ '@esbuild/linux-ppc64@0.25.5':
optional: true
'@esbuild/linux-riscv64@0.21.5':
optional: true
- '@esbuild/linux-riscv64@0.25.3':
+ '@esbuild/linux-riscv64@0.25.5':
optional: true
'@esbuild/linux-s390x@0.21.5':
optional: true
- '@esbuild/linux-s390x@0.25.3':
+ '@esbuild/linux-s390x@0.25.5':
optional: true
'@esbuild/linux-x64@0.21.5':
optional: true
- '@esbuild/linux-x64@0.25.3':
+ '@esbuild/linux-x64@0.25.5':
optional: true
- '@esbuild/netbsd-arm64@0.25.3':
+ '@esbuild/netbsd-arm64@0.25.5':
optional: true
'@esbuild/netbsd-x64@0.21.5':
optional: true
- '@esbuild/netbsd-x64@0.25.3':
+ '@esbuild/netbsd-x64@0.25.5':
optional: true
- '@esbuild/openbsd-arm64@0.25.3':
+ '@esbuild/openbsd-arm64@0.25.5':
optional: true
'@esbuild/openbsd-x64@0.21.5':
optional: true
- '@esbuild/openbsd-x64@0.25.3':
+ '@esbuild/openbsd-x64@0.25.5':
optional: true
'@esbuild/sunos-x64@0.21.5':
optional: true
- '@esbuild/sunos-x64@0.25.3':
+ '@esbuild/sunos-x64@0.25.5':
optional: true
'@esbuild/win32-arm64@0.21.5':
optional: true
- '@esbuild/win32-arm64@0.25.3':
+ '@esbuild/win32-arm64@0.25.5':
optional: true
'@esbuild/win32-ia32@0.21.5':
optional: true
- '@esbuild/win32-ia32@0.25.3':
+ '@esbuild/win32-ia32@0.25.5':
optional: true
'@esbuild/win32-x64@0.21.5':
optional: true
- '@esbuild/win32-x64@0.25.3':
+ '@esbuild/win32-x64@0.25.5':
optional: true
- '@eslint-community/eslint-utils@4.6.1(eslint@8.57.1)':
+ '@eslint-community/eslint-utils@4.7.0(eslint@8.57.1)':
dependencies:
eslint: 8.57.1
eslint-visitor-keys: 3.4.3
@@ -2324,7 +2345,7 @@ snapshots:
'@eslint/eslintrc@2.1.4':
dependencies:
ajv: 6.12.6
- debug: 4.4.0
+ debug: 4.4.1
espree: 9.6.1
globals: 13.24.0
ignore: 5.3.2
@@ -2340,7 +2361,7 @@ snapshots:
'@humanwhocodes/config-array@0.13.0':
dependencies:
'@humanwhocodes/object-schema': 2.0.3
- debug: 4.4.0
+ debug: 4.4.1
minimatch: 3.1.2
transitivePeerDependencies:
- supports-color
@@ -2349,7 +2370,7 @@ snapshots:
'@humanwhocodes/object-schema@2.0.3': {}
- '@iconify-json/simple-icons@1.2.33':
+ '@iconify-json/simple-icons@1.2.38':
dependencies:
'@iconify/types': 2.0.0
@@ -2412,90 +2433,90 @@ snapshots:
'@pkgjs/parseargs@0.11.0':
optional: true
- '@rollup/plugin-node-resolve@15.3.1(rollup@4.40.0)':
+ '@rollup/plugin-node-resolve@15.3.1(rollup@4.43.0)':
dependencies:
- '@rollup/pluginutils': 5.1.4(rollup@4.40.0)
+ '@rollup/pluginutils': 5.1.4(rollup@4.43.0)
'@types/resolve': 1.20.2
deepmerge: 4.3.1
is-module: 1.0.0
resolve: 1.22.10
optionalDependencies:
- rollup: 4.40.0
+ rollup: 4.43.0
- '@rollup/plugin-terser@0.4.4(rollup@4.40.0)':
+ '@rollup/plugin-terser@0.4.4(rollup@4.43.0)':
dependencies:
serialize-javascript: 6.0.2
smob: 1.5.0
- terser: 5.39.0
+ terser: 5.42.0
optionalDependencies:
- rollup: 4.40.0
+ rollup: 4.43.0
- '@rollup/pluginutils@5.1.4(rollup@4.40.0)':
+ '@rollup/pluginutils@5.1.4(rollup@4.43.0)':
dependencies:
- '@types/estree': 1.0.7
+ '@types/estree': 1.0.8
estree-walker: 2.0.2
picomatch: 4.0.2
optionalDependencies:
- rollup: 4.40.0
+ rollup: 4.43.0
- '@rollup/rollup-android-arm-eabi@4.40.0':
+ '@rollup/rollup-android-arm-eabi@4.43.0':
optional: true
- '@rollup/rollup-android-arm64@4.40.0':
+ '@rollup/rollup-android-arm64@4.43.0':
optional: true
- '@rollup/rollup-darwin-arm64@4.40.0':
+ '@rollup/rollup-darwin-arm64@4.43.0':
optional: true
- '@rollup/rollup-darwin-x64@4.40.0':
+ '@rollup/rollup-darwin-x64@4.43.0':
optional: true
- '@rollup/rollup-freebsd-arm64@4.40.0':
+ '@rollup/rollup-freebsd-arm64@4.43.0':
optional: true
- '@rollup/rollup-freebsd-x64@4.40.0':
+ '@rollup/rollup-freebsd-x64@4.43.0':
optional: true
- '@rollup/rollup-linux-arm-gnueabihf@4.40.0':
+ '@rollup/rollup-linux-arm-gnueabihf@4.43.0':
optional: true
- '@rollup/rollup-linux-arm-musleabihf@4.40.0':
+ '@rollup/rollup-linux-arm-musleabihf@4.43.0':
optional: true
- '@rollup/rollup-linux-arm64-gnu@4.40.0':
+ '@rollup/rollup-linux-arm64-gnu@4.43.0':
optional: true
- '@rollup/rollup-linux-arm64-musl@4.40.0':
+ '@rollup/rollup-linux-arm64-musl@4.43.0':
optional: true
- '@rollup/rollup-linux-loongarch64-gnu@4.40.0':
+ '@rollup/rollup-linux-loongarch64-gnu@4.43.0':
optional: true
- '@rollup/rollup-linux-powerpc64le-gnu@4.40.0':
+ '@rollup/rollup-linux-powerpc64le-gnu@4.43.0':
optional: true
- '@rollup/rollup-linux-riscv64-gnu@4.40.0':
+ '@rollup/rollup-linux-riscv64-gnu@4.43.0':
optional: true
- '@rollup/rollup-linux-riscv64-musl@4.40.0':
+ '@rollup/rollup-linux-riscv64-musl@4.43.0':
optional: true
- '@rollup/rollup-linux-s390x-gnu@4.40.0':
+ '@rollup/rollup-linux-s390x-gnu@4.43.0':
optional: true
- '@rollup/rollup-linux-x64-gnu@4.40.0':
+ '@rollup/rollup-linux-x64-gnu@4.43.0':
optional: true
- '@rollup/rollup-linux-x64-musl@4.40.0':
+ '@rollup/rollup-linux-x64-musl@4.43.0':
optional: true
- '@rollup/rollup-win32-arm64-msvc@4.40.0':
+ '@rollup/rollup-win32-arm64-msvc@4.43.0':
optional: true
- '@rollup/rollup-win32-ia32-msvc@4.40.0':
+ '@rollup/rollup-win32-ia32-msvc@4.43.0':
optional: true
- '@rollup/rollup-win32-x64-msvc@4.40.0':
+ '@rollup/rollup-win32-x64-msvc@4.43.0':
optional: true
'@shikijs/core@2.5.0':
@@ -2538,8 +2559,21 @@ snapshots:
'@shikijs/vscode-textmate@10.0.2': {}
+ '@types/chai@5.2.2':
+ dependencies:
+ '@types/deep-eql': 4.0.2
+
+ '@types/debug@4.1.12':
+ dependencies:
+ '@types/ms': 2.1.0
+ optional: true
+
+ '@types/deep-eql@4.0.2': {}
+
'@types/estree@1.0.7': {}
+ '@types/estree@1.0.8': {}
+
'@types/hast@3.0.4':
dependencies:
'@types/unist': 3.0.3
@@ -2557,6 +2591,9 @@ snapshots:
'@types/mdurl@2.0.0': {}
+ '@types/ms@2.1.0':
+ optional: true
+
'@types/resolve@1.20.2': {}
'@types/unist@3.0.3': {}
@@ -2565,88 +2602,90 @@ snapshots:
'@ungap/structured-clone@1.3.0': {}
- '@vitejs/plugin-vue@5.2.3(vite@5.4.18(terser@5.39.0))(vue@3.5.13)':
+ '@vitejs/plugin-vue@5.2.4(vite@5.4.19(terser@5.42.0))(vue@3.5.16(typescript@5.8.3))':
dependencies:
- vite: 5.4.18(terser@5.39.0)
- vue: 3.5.13
+ vite: 5.4.19(terser@5.42.0)
+ vue: 3.5.16(typescript@5.8.3)
- '@vitest/expect@3.1.2':
+ '@vitest/expect@3.2.3':
dependencies:
- '@vitest/spy': 3.1.2
- '@vitest/utils': 3.1.2
+ '@types/chai': 5.2.2
+ '@vitest/spy': 3.2.3
+ '@vitest/utils': 3.2.3
chai: 5.2.0
tinyrainbow: 2.0.0
- '@vitest/mocker@3.1.2(vite@6.3.3(terser@5.39.0))':
+ '@vitest/mocker@3.2.3(vite@6.3.5(terser@5.42.0)(yaml@2.8.0))':
dependencies:
- '@vitest/spy': 3.1.2
+ '@vitest/spy': 3.2.3
estree-walker: 3.0.3
magic-string: 0.30.17
optionalDependencies:
- vite: 6.3.3(terser@5.39.0)
+ vite: 6.3.5(terser@5.42.0)(yaml@2.8.0)
- '@vitest/pretty-format@3.1.2':
+ '@vitest/pretty-format@3.2.3':
dependencies:
tinyrainbow: 2.0.0
- '@vitest/runner@3.1.2':
+ '@vitest/runner@3.2.3':
dependencies:
- '@vitest/utils': 3.1.2
+ '@vitest/utils': 3.2.3
pathe: 2.0.3
+ strip-literal: 3.0.0
- '@vitest/snapshot@3.1.2':
+ '@vitest/snapshot@3.2.3':
dependencies:
- '@vitest/pretty-format': 3.1.2
+ '@vitest/pretty-format': 3.2.3
magic-string: 0.30.17
pathe: 2.0.3
- '@vitest/spy@3.1.2':
+ '@vitest/spy@3.2.3':
dependencies:
- tinyspy: 3.0.2
+ tinyspy: 4.0.3
- '@vitest/utils@3.1.2':
+ '@vitest/utils@3.2.3':
dependencies:
- '@vitest/pretty-format': 3.1.2
+ '@vitest/pretty-format': 3.2.3
loupe: 3.1.3
tinyrainbow: 2.0.0
- '@vue/compiler-core@3.5.13':
+ '@vue/compiler-core@3.5.16':
dependencies:
- '@babel/parser': 7.27.0
- '@vue/shared': 3.5.13
+ '@babel/parser': 7.27.5
+ '@vue/shared': 3.5.16
entities: 4.5.0
estree-walker: 2.0.2
source-map-js: 1.2.1
- '@vue/compiler-dom@3.5.13':
+ '@vue/compiler-dom@3.5.16':
dependencies:
- '@vue/compiler-core': 3.5.13
- '@vue/shared': 3.5.13
+ '@vue/compiler-core': 3.5.16
+ '@vue/shared': 3.5.16
- '@vue/compiler-sfc@3.5.13':
+ '@vue/compiler-sfc@3.5.16':
dependencies:
- '@babel/parser': 7.27.0
- '@vue/compiler-core': 3.5.13
- '@vue/compiler-dom': 3.5.13
- '@vue/compiler-ssr': 3.5.13
- '@vue/shared': 3.5.13
+ '@babel/parser': 7.27.5
+ '@vue/compiler-core': 3.5.16
+ '@vue/compiler-dom': 3.5.16
+ '@vue/compiler-ssr': 3.5.16
+ '@vue/shared': 3.5.16
estree-walker: 2.0.2
magic-string: 0.30.17
- postcss: 8.5.3
+ postcss: 8.5.5
source-map-js: 1.2.1
- '@vue/compiler-ssr@3.5.13':
+ '@vue/compiler-ssr@3.5.16':
dependencies:
- '@vue/compiler-dom': 3.5.13
- '@vue/shared': 3.5.13
+ '@vue/compiler-dom': 3.5.16
+ '@vue/shared': 3.5.16
- '@vue/devtools-api@7.7.5':
+ '@vue/devtools-api@7.7.6':
dependencies:
- '@vue/devtools-kit': 7.7.5
+ '@vue/devtools-kit': 7.7.6
- '@vue/devtools-kit@7.7.5':
+ '@vue/devtools-kit@7.7.6':
dependencies:
- '@vue/devtools-shared': 7.7.5
+ '@vue/devtools-shared': 7.7.6
birpc: 2.3.0
hookable: 5.5.3
mitt: 3.0.1
@@ -2654,68 +2693,68 @@ snapshots:
speakingurl: 14.0.1
superjson: 2.2.2
- '@vue/devtools-shared@7.7.5':
+ '@vue/devtools-shared@7.7.6':
dependencies:
rfdc: 1.4.1
- '@vue/reactivity@3.5.13':
+ '@vue/reactivity@3.5.16':
dependencies:
- '@vue/shared': 3.5.13
+ '@vue/shared': 3.5.16
- '@vue/runtime-core@3.5.13':
+ '@vue/runtime-core@3.5.16':
dependencies:
- '@vue/reactivity': 3.5.13
- '@vue/shared': 3.5.13
+ '@vue/reactivity': 3.5.16
+ '@vue/shared': 3.5.16
- '@vue/runtime-dom@3.5.13':
+ '@vue/runtime-dom@3.5.16':
dependencies:
- '@vue/reactivity': 3.5.13
- '@vue/runtime-core': 3.5.13
- '@vue/shared': 3.5.13
+ '@vue/reactivity': 3.5.16
+ '@vue/runtime-core': 3.5.16
+ '@vue/shared': 3.5.16
csstype: 3.1.3
- '@vue/server-renderer@3.5.13(vue@3.5.13)':
+ '@vue/server-renderer@3.5.16(vue@3.5.16(typescript@5.8.3))':
dependencies:
- '@vue/compiler-ssr': 3.5.13
- '@vue/shared': 3.5.13
- vue: 3.5.13
+ '@vue/compiler-ssr': 3.5.16
+ '@vue/shared': 3.5.16
+ vue: 3.5.16(typescript@5.8.3)
- '@vue/shared@3.5.13': {}
+ '@vue/shared@3.5.16': {}
- '@vueuse/core@12.8.2':
+ '@vueuse/core@12.8.2(typescript@5.8.3)':
dependencies:
'@types/web-bluetooth': 0.0.21
'@vueuse/metadata': 12.8.2
- '@vueuse/shared': 12.8.2
- vue: 3.5.13
+ '@vueuse/shared': 12.8.2(typescript@5.8.3)
+ vue: 3.5.16(typescript@5.8.3)
transitivePeerDependencies:
- typescript
- '@vueuse/integrations@12.8.2(focus-trap@7.6.4)':
+ '@vueuse/integrations@12.8.2(focus-trap@7.6.5)(typescript@5.8.3)':
dependencies:
- '@vueuse/core': 12.8.2
- '@vueuse/shared': 12.8.2
- vue: 3.5.13
+ '@vueuse/core': 12.8.2(typescript@5.8.3)
+ '@vueuse/shared': 12.8.2(typescript@5.8.3)
+ vue: 3.5.16(typescript@5.8.3)
optionalDependencies:
- focus-trap: 7.6.4
+ focus-trap: 7.6.5
transitivePeerDependencies:
- typescript
'@vueuse/metadata@12.8.2': {}
- '@vueuse/shared@12.8.2':
+ '@vueuse/shared@12.8.2(typescript@5.8.3)':
dependencies:
- vue: 3.5.13
+ vue: 3.5.16(typescript@5.8.3)
transitivePeerDependencies:
- typescript
abbrev@2.0.0: {}
- acorn-jsx@5.3.2(acorn@8.14.1):
+ acorn-jsx@5.3.2(acorn@8.15.0):
dependencies:
- acorn: 8.14.1
+ acorn: 8.15.0
- acorn@8.14.1: {}
+ acorn@8.15.0: {}
agent-base@7.1.3: {}
@@ -2726,21 +2765,21 @@ snapshots:
json-schema-traverse: 0.4.1
uri-js: 4.4.1
- algoliasearch@5.23.4:
- dependencies:
- '@algolia/client-abtesting': 5.23.4
- '@algolia/client-analytics': 5.23.4
- '@algolia/client-common': 5.23.4
- '@algolia/client-insights': 5.23.4
- '@algolia/client-personalization': 5.23.4
- '@algolia/client-query-suggestions': 5.23.4
- '@algolia/client-search': 5.23.4
- '@algolia/ingestion': 1.23.4
- '@algolia/monitoring': 1.23.4
- '@algolia/recommend': 5.23.4
- '@algolia/requester-browser-xhr': 5.23.4
- '@algolia/requester-fetch': 5.23.4
- '@algolia/requester-node-http': 5.23.4
+ algoliasearch@5.27.0:
+ dependencies:
+ '@algolia/client-abtesting': 5.27.0
+ '@algolia/client-analytics': 5.27.0
+ '@algolia/client-common': 5.27.0
+ '@algolia/client-insights': 5.27.0
+ '@algolia/client-personalization': 5.27.0
+ '@algolia/client-query-suggestions': 5.27.0
+ '@algolia/client-search': 5.27.0
+ '@algolia/ingestion': 1.27.0
+ '@algolia/monitoring': 1.27.0
+ '@algolia/recommend': 5.27.0
+ '@algolia/requester-browser-xhr': 5.27.0
+ '@algolia/requester-fetch': 5.27.0
+ '@algolia/requester-node-http': 5.27.0
ansi-regex@5.0.1: {}
@@ -2760,12 +2799,12 @@ snapshots:
birpc@2.3.0: {}
- brace-expansion@1.1.11:
+ brace-expansion@1.1.12:
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
- brace-expansion@2.0.1:
+ brace-expansion@2.0.2:
dependencies:
balanced-match: 1.0.2
@@ -2794,8 +2833,6 @@ snapshots:
character-entities-legacy@3.0.0: {}
- charmingjs-vector@0.0.3: {}
-
check-error@2.1.1: {}
color-convert@2.0.1:
@@ -2827,9 +2864,9 @@ snapshots:
shebang-command: 2.0.0
which: 2.0.2
- cssstyle@4.3.1:
+ cssstyle@4.4.0:
dependencies:
- '@asamuzakjp/css-color': 3.1.4
+ '@asamuzakjp/css-color': 3.2.0
rrweb-cssom: 0.8.0
csstype@3.1.3: {}
@@ -2862,7 +2899,7 @@ snapshots:
whatwg-mimetype: 4.0.0
whatwg-url: 14.2.0
- debug@4.4.0:
+ debug@4.4.1:
dependencies:
ms: 2.1.3
@@ -2891,7 +2928,7 @@ snapshots:
'@one-ini/wasm': 0.1.1
commander: 10.0.1
minimatch: 9.0.1
- semver: 7.7.1
+ semver: 7.7.2
emoji-regex-xs@1.0.0: {}
@@ -2901,7 +2938,7 @@ snapshots:
entities@4.5.0: {}
- entities@6.0.0: {}
+ entities@6.0.1: {}
es-module-lexer@1.7.0: {}
@@ -2931,33 +2968,33 @@ snapshots:
'@esbuild/win32-ia32': 0.21.5
'@esbuild/win32-x64': 0.21.5
- esbuild@0.25.3:
+ esbuild@0.25.5:
optionalDependencies:
- '@esbuild/aix-ppc64': 0.25.3
- '@esbuild/android-arm': 0.25.3
- '@esbuild/android-arm64': 0.25.3
- '@esbuild/android-x64': 0.25.3
- '@esbuild/darwin-arm64': 0.25.3
- '@esbuild/darwin-x64': 0.25.3
- '@esbuild/freebsd-arm64': 0.25.3
- '@esbuild/freebsd-x64': 0.25.3
- '@esbuild/linux-arm': 0.25.3
- '@esbuild/linux-arm64': 0.25.3
- '@esbuild/linux-ia32': 0.25.3
- '@esbuild/linux-loong64': 0.25.3
- '@esbuild/linux-mips64el': 0.25.3
- '@esbuild/linux-ppc64': 0.25.3
- '@esbuild/linux-riscv64': 0.25.3
- '@esbuild/linux-s390x': 0.25.3
- '@esbuild/linux-x64': 0.25.3
- '@esbuild/netbsd-arm64': 0.25.3
- '@esbuild/netbsd-x64': 0.25.3
- '@esbuild/openbsd-arm64': 0.25.3
- '@esbuild/openbsd-x64': 0.25.3
- '@esbuild/sunos-x64': 0.25.3
- '@esbuild/win32-arm64': 0.25.3
- '@esbuild/win32-ia32': 0.25.3
- '@esbuild/win32-x64': 0.25.3
+ '@esbuild/aix-ppc64': 0.25.5
+ '@esbuild/android-arm': 0.25.5
+ '@esbuild/android-arm64': 0.25.5
+ '@esbuild/android-x64': 0.25.5
+ '@esbuild/darwin-arm64': 0.25.5
+ '@esbuild/darwin-x64': 0.25.5
+ '@esbuild/freebsd-arm64': 0.25.5
+ '@esbuild/freebsd-x64': 0.25.5
+ '@esbuild/linux-arm': 0.25.5
+ '@esbuild/linux-arm64': 0.25.5
+ '@esbuild/linux-ia32': 0.25.5
+ '@esbuild/linux-loong64': 0.25.5
+ '@esbuild/linux-mips64el': 0.25.5
+ '@esbuild/linux-ppc64': 0.25.5
+ '@esbuild/linux-riscv64': 0.25.5
+ '@esbuild/linux-s390x': 0.25.5
+ '@esbuild/linux-x64': 0.25.5
+ '@esbuild/netbsd-arm64': 0.25.5
+ '@esbuild/netbsd-x64': 0.25.5
+ '@esbuild/openbsd-arm64': 0.25.5
+ '@esbuild/openbsd-x64': 0.25.5
+ '@esbuild/sunos-x64': 0.25.5
+ '@esbuild/win32-arm64': 0.25.5
+ '@esbuild/win32-ia32': 0.25.5
+ '@esbuild/win32-x64': 0.25.5
escape-string-regexp@4.0.0: {}
@@ -2974,7 +3011,7 @@ snapshots:
eslint@8.57.1:
dependencies:
- '@eslint-community/eslint-utils': 4.6.1(eslint@8.57.1)
+ '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1)
'@eslint-community/regexpp': 4.12.1
'@eslint/eslintrc': 2.1.4
'@eslint/js': 8.57.1
@@ -2985,7 +3022,7 @@ snapshots:
ajv: 6.12.6
chalk: 4.1.2
cross-spawn: 7.0.6
- debug: 4.4.0
+ debug: 4.4.1
doctrine: 3.0.0
escape-string-regexp: 4.0.0
eslint-scope: 7.2.2
@@ -3017,8 +3054,8 @@ snapshots:
espree@9.6.1:
dependencies:
- acorn: 8.14.1
- acorn-jsx: 5.3.2(acorn@8.14.1)
+ acorn: 8.15.0
+ acorn-jsx: 5.3.2(acorn@8.15.0)
eslint-visitor-keys: 3.4.3
esprima@4.0.1: {}
@@ -3037,7 +3074,7 @@ snapshots:
estree-walker@3.0.3:
dependencies:
- '@types/estree': 1.0.7
+ '@types/estree': 1.0.8
esutils@2.0.3: {}
@@ -3053,7 +3090,7 @@ snapshots:
dependencies:
reusify: 1.1.0
- fdir@6.4.4(picomatch@4.0.2):
+ fdir@6.4.6(picomatch@4.0.2):
optionalDependencies:
picomatch: 4.0.2
@@ -3074,7 +3111,7 @@ snapshots:
flatted@3.3.3: {}
- focus-trap@7.6.4:
+ focus-trap@7.6.5:
dependencies:
tabbable: 6.2.0
@@ -3097,11 +3134,11 @@ snapshots:
esprima: 4.0.1
estraverse: 5.3.0
- genji-theme-vitepress@0.2.8(vitepress@1.6.3(@algolia/client-search@5.23.4)(postcss@8.5.3)(search-insights@2.17.2)(terser@5.39.0))(vue@3.5.13):
+ genji-theme-vitepress@0.2.8(vitepress@1.6.3(@algolia/client-search@5.27.0)(postcss@8.5.5)(search-insights@2.17.2)(terser@5.42.0)(typescript@5.8.3))(vue@3.5.16(typescript@5.8.3)):
dependencies:
genji-runtime: 0.2.8
- vitepress: 1.6.3(@algolia/client-search@5.23.4)(postcss@8.5.3)(search-insights@2.17.2)(terser@5.39.0)
- vue: 3.5.13
+ vitepress: 1.6.3(@algolia/client-search@5.27.0)(postcss@8.5.5)(search-insights@2.17.2)(terser@5.42.0)(typescript@5.8.3)
+ vue: 3.5.16(typescript@5.8.3)
glob-parent@6.0.2:
dependencies:
@@ -3146,7 +3183,7 @@ snapshots:
hast-util-whitespace: 3.0.0
html-void-elements: 3.0.0
mdast-util-to-hast: 13.2.0
- property-information: 7.0.0
+ property-information: 7.1.0
space-separated-tokens: 2.0.2
stringify-entities: 4.0.4
zwitch: 2.0.4
@@ -3168,14 +3205,14 @@ snapshots:
http-proxy-agent@7.0.2:
dependencies:
agent-base: 7.1.3
- debug: 4.4.0
+ debug: 4.4.1
transitivePeerDependencies:
- supports-color
https-proxy-agent@7.0.6:
dependencies:
agent-base: 7.1.3
- debug: 4.4.0
+ debug: 4.4.1
transitivePeerDependencies:
- supports-color
@@ -3241,13 +3278,15 @@ snapshots:
js-cookie@3.0.5: {}
+ js-tokens@9.0.1: {}
+
js-yaml@4.1.0:
dependencies:
argparse: 2.0.1
jsdom@26.1.0:
dependencies:
- cssstyle: 4.3.1
+ cssstyle: 4.4.0
data-urls: 5.0.0
decimal.js: 10.5.0
html-encoding-sniffer: 4.0.0
@@ -3265,7 +3304,7 @@ snapshots:
whatwg-encoding: 3.1.1
whatwg-mimetype: 4.0.0
whatwg-url: 14.2.0
- ws: 8.18.1
+ ws: 8.18.2
xml-name-validator: 5.0.0
transitivePeerDependencies:
- bufferutil
@@ -3334,15 +3373,15 @@ snapshots:
minimatch@3.1.2:
dependencies:
- brace-expansion: 1.1.11
+ brace-expansion: 1.1.12
minimatch@9.0.1:
dependencies:
- brace-expansion: 2.0.1
+ brace-expansion: 2.0.2
minimatch@9.0.5:
dependencies:
- brace-expansion: 2.0.1
+ brace-expansion: 2.0.2
minipass@7.1.2: {}
@@ -3397,7 +3436,7 @@ snapshots:
parse5@7.3.0:
dependencies:
- entities: 6.0.0
+ entities: 6.0.1
path-exists@4.0.0: {}
@@ -3422,19 +3461,19 @@ snapshots:
picomatch@4.0.2: {}
- postcss@8.5.3:
+ postcss@8.5.5:
dependencies:
nanoid: 3.3.11
picocolors: 1.1.1
source-map-js: 1.2.1
- preact@10.26.5: {}
+ preact@10.26.9: {}
prelude-ls@1.2.1: {}
prettier@3.5.3: {}
- property-information@7.0.0: {}
+ property-information@7.1.0: {}
proto-list@1.2.4: {}
@@ -3472,30 +3511,30 @@ snapshots:
dependencies:
glob: 7.2.3
- rollup@4.40.0:
+ rollup@4.43.0:
dependencies:
'@types/estree': 1.0.7
optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.40.0
- '@rollup/rollup-android-arm64': 4.40.0
- '@rollup/rollup-darwin-arm64': 4.40.0
- '@rollup/rollup-darwin-x64': 4.40.0
- '@rollup/rollup-freebsd-arm64': 4.40.0
- '@rollup/rollup-freebsd-x64': 4.40.0
- '@rollup/rollup-linux-arm-gnueabihf': 4.40.0
- '@rollup/rollup-linux-arm-musleabihf': 4.40.0
- '@rollup/rollup-linux-arm64-gnu': 4.40.0
- '@rollup/rollup-linux-arm64-musl': 4.40.0
- '@rollup/rollup-linux-loongarch64-gnu': 4.40.0
- '@rollup/rollup-linux-powerpc64le-gnu': 4.40.0
- '@rollup/rollup-linux-riscv64-gnu': 4.40.0
- '@rollup/rollup-linux-riscv64-musl': 4.40.0
- '@rollup/rollup-linux-s390x-gnu': 4.40.0
- '@rollup/rollup-linux-x64-gnu': 4.40.0
- '@rollup/rollup-linux-x64-musl': 4.40.0
- '@rollup/rollup-win32-arm64-msvc': 4.40.0
- '@rollup/rollup-win32-ia32-msvc': 4.40.0
- '@rollup/rollup-win32-x64-msvc': 4.40.0
+ '@rollup/rollup-android-arm-eabi': 4.43.0
+ '@rollup/rollup-android-arm64': 4.43.0
+ '@rollup/rollup-darwin-arm64': 4.43.0
+ '@rollup/rollup-darwin-x64': 4.43.0
+ '@rollup/rollup-freebsd-arm64': 4.43.0
+ '@rollup/rollup-freebsd-x64': 4.43.0
+ '@rollup/rollup-linux-arm-gnueabihf': 4.43.0
+ '@rollup/rollup-linux-arm-musleabihf': 4.43.0
+ '@rollup/rollup-linux-arm64-gnu': 4.43.0
+ '@rollup/rollup-linux-arm64-musl': 4.43.0
+ '@rollup/rollup-linux-loongarch64-gnu': 4.43.0
+ '@rollup/rollup-linux-powerpc64le-gnu': 4.43.0
+ '@rollup/rollup-linux-riscv64-gnu': 4.43.0
+ '@rollup/rollup-linux-riscv64-musl': 4.43.0
+ '@rollup/rollup-linux-s390x-gnu': 4.43.0
+ '@rollup/rollup-linux-x64-gnu': 4.43.0
+ '@rollup/rollup-linux-x64-musl': 4.43.0
+ '@rollup/rollup-win32-arm64-msvc': 4.43.0
+ '@rollup/rollup-win32-ia32-msvc': 4.43.0
+ '@rollup/rollup-win32-x64-msvc': 4.43.0
fsevents: 2.3.3
rrweb-cssom@0.8.0: {}
@@ -3514,7 +3553,7 @@ snapshots:
search-insights@2.17.2: {}
- semver@7.7.1: {}
+ semver@7.7.2: {}
serialize-javascript@6.0.2:
dependencies:
@@ -3587,6 +3626,10 @@ snapshots:
strip-json-comments@3.1.1: {}
+ strip-literal@3.0.0:
+ dependencies:
+ js-tokens: 9.0.1
+
superjson@2.2.2:
dependencies:
copy-anything: 3.0.5
@@ -3601,10 +3644,10 @@ snapshots:
tabbable@6.2.0: {}
- terser@5.39.0:
+ terser@5.42.0:
dependencies:
'@jridgewell/source-map': 0.3.6
- acorn: 8.14.1
+ acorn: 8.15.0
commander: 2.20.3
source-map-support: 0.5.21
@@ -3614,16 +3657,16 @@ snapshots:
tinyexec@0.3.2: {}
- tinyglobby@0.2.13:
+ tinyglobby@0.2.14:
dependencies:
- fdir: 6.4.4(picomatch@4.0.2)
+ fdir: 6.4.6(picomatch@4.0.2)
picomatch: 4.0.2
- tinypool@1.0.2: {}
+ tinypool@1.1.0: {}
tinyrainbow@2.0.0: {}
- tinyspy@3.0.2: {}
+ tinyspy@4.0.3: {}
tldts-core@6.1.86: {}
@@ -3647,6 +3690,9 @@ snapshots:
type-fest@0.20.2: {}
+ typescript@5.8.3:
+ optional: true
+
unist-util-is@6.0.0:
dependencies:
'@types/unist': 3.0.3
@@ -3684,13 +3730,13 @@ snapshots:
'@types/unist': 3.0.3
vfile-message: 4.0.2
- vite-node@3.1.2(terser@5.39.0):
+ vite-node@3.2.3(terser@5.42.0)(yaml@2.8.0):
dependencies:
cac: 6.7.14
- debug: 4.4.0
+ debug: 4.4.1
es-module-lexer: 1.7.0
pathe: 2.0.3
- vite: 6.3.3(terser@5.39.0)
+ vite: 6.3.5(terser@5.42.0)(yaml@2.8.0)
transitivePeerDependencies:
- '@types/node'
- jiti
@@ -3705,49 +3751,50 @@ snapshots:
- tsx
- yaml
- vite@5.4.18(terser@5.39.0):
+ vite@5.4.19(terser@5.42.0):
dependencies:
esbuild: 0.21.5
- postcss: 8.5.3
- rollup: 4.40.0
+ postcss: 8.5.5
+ rollup: 4.43.0
optionalDependencies:
fsevents: 2.3.3
- terser: 5.39.0
+ terser: 5.42.0
- vite@6.3.3(terser@5.39.0):
+ vite@6.3.5(terser@5.42.0)(yaml@2.8.0):
dependencies:
- esbuild: 0.25.3
- fdir: 6.4.4(picomatch@4.0.2)
+ esbuild: 0.25.5
+ fdir: 6.4.6(picomatch@4.0.2)
picomatch: 4.0.2
- postcss: 8.5.3
- rollup: 4.40.0
- tinyglobby: 0.2.13
+ postcss: 8.5.5
+ rollup: 4.43.0
+ tinyglobby: 0.2.14
optionalDependencies:
fsevents: 2.3.3
- terser: 5.39.0
+ terser: 5.42.0
+ yaml: 2.8.0
- vitepress@1.6.3(@algolia/client-search@5.23.4)(postcss@8.5.3)(search-insights@2.17.2)(terser@5.39.0):
+ vitepress@1.6.3(@algolia/client-search@5.27.0)(postcss@8.5.5)(search-insights@2.17.2)(terser@5.42.0)(typescript@5.8.3):
dependencies:
'@docsearch/css': 3.8.2
- '@docsearch/js': 3.8.2(@algolia/client-search@5.23.4)(search-insights@2.17.2)
- '@iconify-json/simple-icons': 1.2.33
+ '@docsearch/js': 3.8.2(@algolia/client-search@5.27.0)(search-insights@2.17.2)
+ '@iconify-json/simple-icons': 1.2.38
'@shikijs/core': 2.5.0
'@shikijs/transformers': 2.5.0
'@shikijs/types': 2.5.0
'@types/markdown-it': 14.1.2
- '@vitejs/plugin-vue': 5.2.3(vite@5.4.18(terser@5.39.0))(vue@3.5.13)
- '@vue/devtools-api': 7.7.5
- '@vue/shared': 3.5.13
- '@vueuse/core': 12.8.2
- '@vueuse/integrations': 12.8.2(focus-trap@7.6.4)
- focus-trap: 7.6.4
+ '@vitejs/plugin-vue': 5.2.4(vite@5.4.19(terser@5.42.0))(vue@3.5.16(typescript@5.8.3))
+ '@vue/devtools-api': 7.7.6
+ '@vue/shared': 3.5.16
+ '@vueuse/core': 12.8.2(typescript@5.8.3)
+ '@vueuse/integrations': 12.8.2(focus-trap@7.6.5)(typescript@5.8.3)
+ focus-trap: 7.6.5
mark.js: 8.11.1
minisearch: 7.1.2
shiki: 2.5.0
- vite: 5.4.18(terser@5.39.0)
- vue: 3.5.13
+ vite: 5.4.19(terser@5.42.0)
+ vue: 3.5.16(typescript@5.8.3)
optionalDependencies:
- postcss: 8.5.3
+ postcss: 8.5.5
transitivePeerDependencies:
- '@algolia/client-search'
- '@types/node'
@@ -3775,30 +3822,33 @@ snapshots:
- typescript
- universal-cookie
- vitest@3.1.2(jsdom@26.1.0)(terser@5.39.0):
+ vitest@3.2.3(@types/debug@4.1.12)(jsdom@26.1.0)(terser@5.42.0)(yaml@2.8.0):
dependencies:
- '@vitest/expect': 3.1.2
- '@vitest/mocker': 3.1.2(vite@6.3.3(terser@5.39.0))
- '@vitest/pretty-format': 3.1.2
- '@vitest/runner': 3.1.2
- '@vitest/snapshot': 3.1.2
- '@vitest/spy': 3.1.2
- '@vitest/utils': 3.1.2
+ '@types/chai': 5.2.2
+ '@vitest/expect': 3.2.3
+ '@vitest/mocker': 3.2.3(vite@6.3.5(terser@5.42.0)(yaml@2.8.0))
+ '@vitest/pretty-format': 3.2.3
+ '@vitest/runner': 3.2.3
+ '@vitest/snapshot': 3.2.3
+ '@vitest/spy': 3.2.3
+ '@vitest/utils': 3.2.3
chai: 5.2.0
- debug: 4.4.0
+ debug: 4.4.1
expect-type: 1.2.1
magic-string: 0.30.17
pathe: 2.0.3
+ picomatch: 4.0.2
std-env: 3.9.0
tinybench: 2.9.0
tinyexec: 0.3.2
- tinyglobby: 0.2.13
- tinypool: 1.0.2
+ tinyglobby: 0.2.14
+ tinypool: 1.1.0
tinyrainbow: 2.0.0
- vite: 6.3.3(terser@5.39.0)
- vite-node: 3.1.2(terser@5.39.0)
+ vite: 6.3.5(terser@5.42.0)(yaml@2.8.0)
+ vite-node: 3.2.3(terser@5.42.0)(yaml@2.8.0)
why-is-node-running: 2.3.0
optionalDependencies:
+ '@types/debug': 4.1.12
jsdom: 26.1.0
transitivePeerDependencies:
- jiti
@@ -3814,13 +3864,15 @@ snapshots:
- tsx
- yaml
- vue@3.5.13:
+ vue@3.5.16(typescript@5.8.3):
dependencies:
- '@vue/compiler-dom': 3.5.13
- '@vue/compiler-sfc': 3.5.13
- '@vue/runtime-dom': 3.5.13
- '@vue/server-renderer': 3.5.13(vue@3.5.13)
- '@vue/shared': 3.5.13
+ '@vue/compiler-dom': 3.5.16
+ '@vue/compiler-sfc': 3.5.16
+ '@vue/runtime-dom': 3.5.16
+ '@vue/server-renderer': 3.5.16(vue@3.5.16(typescript@5.8.3))
+ '@vue/shared': 3.5.16
+ optionalDependencies:
+ typescript: 5.8.3
w3c-xmlserializer@5.0.0:
dependencies:
@@ -3864,12 +3916,15 @@ snapshots:
wrappy@1.0.2: {}
- ws@8.18.1: {}
+ ws@8.18.2: {}
xml-name-validator@5.0.0: {}
xmlchars@2.2.0: {}
+ yaml@2.8.0:
+ optional: true
+
yocto-queue@0.1.0: {}
zwitch@2.0.4: {}
diff --git a/src/dom.js b/src/dom.js
new file mode 100644
index 00000000..bad27cb2
--- /dev/null
+++ b/src/dom.js
@@ -0,0 +1,95 @@
+const propSetterCache = {};
+
+const protoOf = Object.getPrototypeOf;
+
+const isFunc = (x) => typeof x === "function";
+
+const isStr = (x) => typeof x === "string";
+
+const isObjectLiteral = (x) => Object.prototype.toString.call(x) === "[object Object]";
+
+const rename = (obj, oldKey, newKey) => (oldKey in obj ? ((obj[newKey] = obj[oldKey]), delete obj[oldKey], obj) : obj);
+
+function postprocess(nodes) {
+ if (!nodes) return null;
+ if (nodes.length === 1) return nodes[0];
+ const fragment = document.createDocumentFragment();
+ fragment.append(...nodes);
+ return fragment;
+}
+
+function snake2kebab(str) {
+ return str.replace(/_/g, "-");
+}
+
+// Ref: https://github.com/vanjs-org/van/blob/d09cfd1e1e3b5ea7cf8d0a9b5deacca4c0946fb4/src/van.js#L99
+function set(dom, k, v) {
+ k = snake2kebab(k);
+ if (k.startsWith("on")) return dom.addEventListener(k.slice(2), v);
+ if (k.startsWith("style-")) return dom.style.setProperty(k.slice(6), v);
+ const get = (proto) => (proto ? (Object.getOwnPropertyDescriptor(proto, k) ?? get(protoOf(proto))) : undefined);
+ const cacheKey = dom.nodeName + "," + k;
+ const propSetter = (propSetterCache[cacheKey] ??= get(protoOf(dom))?.set ?? 0);
+ const setter = propSetter ? propSetter.bind(dom) : dom.setAttribute.bind(dom, k);
+ setter(v);
+}
+
+class Mark {
+ constructor(ns, tag, data, options) {
+ if (isObjectLiteral(data)) (options = data), (data = undefined);
+ this._ns = ns;
+ this._tag = tag;
+ this._data = data;
+ this._options = options;
+ }
+ clone() {
+ return new Mark(this._ns, this._tag, this._data, this._options);
+ }
+ with(children) {
+ this._options = {...this._options, children};
+ return this;
+ }
+}
+
+function renderNodes(mark) {
+ const {_ns: ns, _tag: tag, _data: data = [undefined], _options: options = {}} = mark;
+ if (!isStr(tag)) return null;
+ const {children = [], ...attrs} = options;
+ const nodes = data.map((d, i, array) => {
+ const dom = ns ? document.createElementNS(ns, tag) : document.createElement(tag);
+ for (const [k, v] of Object.entries(attrs)) {
+ const val = k.startsWith("on") ? (e) => v(e, d, i, array) : isFunc(v) ? v(d, i, array) : v;
+ set(dom, k, val);
+ }
+ return dom;
+ });
+ for (const child of children.filter(Boolean).flat(Infinity)) {
+ if (child._data) {
+ for (let i = 0; i < nodes.length; i++) {
+ const node = nodes[i];
+ const datum = data[i];
+ const childData = child._data;
+ const clonedChild = child.clone();
+ clonedChild._data = isFunc(childData) ? childData(datum, i, data) : childData;
+ const childNodes = renderNodes(clonedChild);
+ node.append(...childNodes);
+ }
+ } else {
+ const clonedChild = child.clone();
+ clonedChild._data = data;
+ const childNodes = renderNodes(clonedChild);
+ for (let i = 0; i < nodes.length; i++) nodes[i].append(childNodes[i]);
+ }
+ }
+ return nodes;
+}
+
+export const renderMark = (mark) => postprocess(renderNodes(mark));
+
+export const render = (options) => renderMark(svg("svg", rename(options, "marks", "children")));
+
+export const tag = (ns) => (tag, data, options) => new Mark(ns, tag, data, options);
+
+export const svg = tag("http://www.w3.org/2000/svg");
+
+export const html = tag(null);
diff --git a/src/index.js b/src/index.js
index 90745697..8f623a73 100644
--- a/src/index.js
+++ b/src/index.js
@@ -1,5 +1 @@
-export {state} from "./state.js";
-export {constrain} from "./math.js";
-export {Mark, svg, html} from "./mark.js";
-export {Renderer} from "./renderer.js";
-export * from "charmingjs-vector";
+export {svg, html, tag, render, renderMark} from "./dom.js";
diff --git a/src/mark.js b/src/mark.js
deleted file mode 100644
index 23c1e115..00000000
--- a/src/mark.js
+++ /dev/null
@@ -1,264 +0,0 @@
-import {interval} from "d3-timer";
-import {Renderer} from "./renderer.js";
-
-export const drawRef = {current: null};
-
-const isFunction = (x) => typeof x === "function";
-
-const isStr = (x) => typeof x === "string";
-
-const isDefined = (x) => x !== undefined && x !== null;
-
-function applyAttributes(node, options, values, context = {}) {
- const {use} = context;
- const decorators = [];
- const props = {};
-
- for (const [k, v] of Object.entries(options)) {
- if (use && k in use && isDefined(v)) decorators.push([use[k], v]);
- else if (k !== "use") props[k] = v;
- }
-
- const {attrs = () => ({}), renderer, ...rest} = props;
- const {datum, i, data} = values;
- const eventValues = {};
- const attrValues = {};
- for (const [k, v] of Object.entries({...attrs(datum, i, data), ...rest})) {
- if (k.startsWith("on")) eventValues[k] = (event) => v(event, datum, i, data);
- else attrValues[k] = isFunction(v) ? v(datum, i, data) : v;
- }
- renderer.events(node, eventValues);
- renderer.attrs(node, attrValues);
-
- for (const [type, decorator] of decorators) {
- const options = isFunction(decorator) ? decorator(datum, i, data) : decorator;
- type(node, options, context);
- }
-
- return node;
-}
-
-function bindIndex(data, nodes, enter, update, exit) {
- const dataLength = data.length;
- const nodeLength = nodes.length;
-
- let i = 0;
- let node;
-
- for (; i < dataLength; i++) {
- if ((node = nodes[i])) update[i] = node;
- else enter[i] = {datum: data[i], next: null};
- }
-
- for (; i < nodeLength; i++) exit[i] = nodes[i];
-}
-
-function addTimer(parent, key, timer) {
- const timers = parent.__timers__ ?? new Map();
- parent.__timers__ = timers;
- timers.set(key, timer);
-}
-
-function removeTimer(parent, key) {
- const timers = parent.__timers__ ?? new Map();
- parent.__timers__ = timers;
- if (timers.has(key)) {
- const timer = timers.get(key);
- timer.stop();
- timers.delete(key);
- return timer;
- }
- return null;
-}
-
-function markof(group) {
- if (!group) return [];
- const {children, datum, i, data} = group;
- return [isFunction(children) ? children(datum, i, data) : children].flat(Infinity).map((d) => d.clone());
-}
-
-function isDocumentFragment(node) {
- return node.nodeName === "#document-fragment";
-}
-
-function postprocess(node) {
- if (!isDocumentFragment(node)) return node;
- if (node.childNodes.length === 1) return node.firstChild;
-
- const root =
- node.firstChild instanceof SVGElement
- ? document.createElementNS("http://www.w3.org/2000/svg", "g")
- : document.createElement("span");
-
- root.append(node);
- return root;
-}
-
-function patchMark(parent, mark, context) {
- const data = mark._update?._data ?? mark._data;
- const props = mark._update?._props ?? mark._props;
- const children = mark._update?._children ?? mark._children;
- const isStatic = mark._update?._static ?? mark._static;
- const nextNode = mark._next?._nodes?.[0] ?? null;
- const {loop, ...attrs} = props;
-
- const tag = mark._tag;
- const nodes = mark._nodes ?? [];
- const dataLength = data.length;
- const nodeLength = nodes.length;
- const enter = new Array(dataLength);
- const update = new Array(dataLength);
- const exit = new Array(nodeLength);
- const newNodes = (mark._nodes = new Array(dataLength));
- const newGroups = new Array(dataLength);
-
- bindIndex(data, nodes, enter, update, exit);
-
- let previous, next;
- for (let i0 = 0, i1 = 0; i0 < dataLength; i0++) {
- if ((previous = enter[i0])) {
- if (i0 >= i1) i1 = i0 + 1;
- while (!(next = update[i1]) && ++i1 < nodeLength);
- previous.next = next ?? nextNode;
- }
- }
-
- let current;
-
- for (let i = 0; i < dataLength; i++) {
- if ((current = enter[i])) {
- const {datum, next} = current;
- const node = mark.create(tag, attrs, {datum, i, data}, context);
- parent?.insertBefore(node, next);
- newNodes[i] = node;
- newGroups[i] = {children, datum, i, data, loop};
- }
- }
-
- for (let i = 0; i < nodeLength; i++) {
- if ((current = update[i])) {
- const datum = data[i];
- newNodes[i] = mark.create(current, attrs, {datum, i, data}, context);
- newGroups[i] = {children, datum, i, data, loop};
- }
- }
-
- for (let i = 0; i < nodeLength; i++) if ((current = exit[i])) current.remove();
-
- return [newNodes, newGroups, isStatic];
-}
-
-// Assume the structure is not going to change for now.
-function patch(parent, prev, current, context, timers) {
- let mark;
- const m = current.length;
- const update = new Array(m);
-
- for (let i = 0; i < m; i++) {
- update[i] = (mark = prev[i]) ? ((mark._update = current[i]), mark) : (mark = current[i]);
- mark._next = prev[i + 1] ?? null;
- const [parents, childGroups, isStatic] = patchMark(parent, mark, context);
- const groups = mark._groups ?? [];
-
- for (let j = 0; j < parents.length; j++) {
- const groupParent = parents[j];
- const oldChildren = groups[j] ?? null;
- const newChildren = childGroups[j];
- const newLoop = newChildren?.loop ?? false;
- const isCallback = isFunction(newChildren?.children);
-
- // Remove old timer if exists.
- const oldTimer = removeTimer(groupParent, oldChildren);
- if (oldTimer) timers.delete(oldTimer);
-
- // Only static marks can be animated and interactive.
- if (isStatic && (newLoop || isCallback)) {
- const templateChildren = {...newChildren};
-
- // Rerender the children.
- let oldMarks = oldChildren?.children ?? [];
- const frame = (options) => {
- const {children} = templateChildren;
- const newMarks = markof({...templateChildren, children: children(options)});
- const prev = (oldMarks = patch(groupParent, oldMarks, newMarks, context));
- newChildren.children = prev;
- };
-
- // Call frame and make it reactive.
- let frameCount = 0;
- drawRef.current = frame;
- frame({time: 0, frameCount});
- drawRef.current = null;
-
- // Add new timer.
- if (newLoop) {
- const {frameRate} = newLoop;
- const delay = frameRate ? 1000 / frameRate : undefined;
- const timer = interval((time) => frame({time, frameCount: ++frameCount}), delay);
- addTimer(groupParent, newChildren, timer);
- timers.add(timer);
- }
- } else {
- const prev = patch(groupParent, oldChildren?.children ?? [], markof(newChildren), context);
- newChildren.children = prev;
- }
-
- groups[j] = newChildren;
- }
- mark._groups = groups;
- }
-
- return update;
-}
-
-export class Mark {
- constructor(tag, data, options) {
- const isStatic = options === undefined;
- if (isStatic) (options = data), (data = [0]);
- const {children = [], ...props} = options ?? {};
-
- this._tag = tag;
- this._static = isStatic;
- this._data = data;
- this._options = options;
- this._props = props;
- this._children = children;
- this._update = null;
- this._nodes = null;
- this._next = null;
- this._groups = null;
- this._timers = new Set();
- }
- create(current, options, values, context) {
- const renderer = options?.renderer ?? context?.renderer ?? new Renderer();
- const node = isStr(current) ? renderer.create(current) : current;
- return applyAttributes(node, {...options, renderer}, values, context);
- }
- render(parent = document.createDocumentFragment()) {
- const root = () => (parent = postprocess(parent));
- const context = {...this._props, root};
- patch(parent, [], [this], context, this._timers);
- return postprocess(parent);
- }
- unmount() {
- const nodes = this._nodes ?? [];
- const timers = this._timers;
- for (const node of nodes) node.remove();
- for (const timer of timers) timer.stop();
- }
- nodes() {
- return this._nodes;
- }
- node() {
- return this._nodes?.[0] ?? null;
- }
- clone() {
- const mark = new this.constructor(this._tag, this._data, this._options);
- mark._static = this._static;
- return mark;
- }
-}
-
-export const svg = (tag, data, options) => new Mark(`svg:${tag}`, data, options);
-
-export const html = (tag, data, options) => new Mark(tag, data, options);
diff --git a/src/math.js b/src/math.js
deleted file mode 100644
index 56b40d49..00000000
--- a/src/math.js
+++ /dev/null
@@ -1,3 +0,0 @@
-export function constrain(x, min, max) {
- return x < min ? min : x > max ? max : x;
-}
diff --git a/src/renderer.js b/src/renderer.js
deleted file mode 100644
index b921d74c..00000000
--- a/src/renderer.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import {setAttribute} from "./set.js";
-
-const namespaces = {
- svg: "http://www.w3.org/2000/svg",
-};
-
-function addEventListener(node, k, handler) {
- const key = "__" + k + "__";
- if (!node[key]) node.addEventListener(k.slice(2).toLowerCase(), (event) => node[key](event));
- node[key] = handler;
-}
-
-export class Renderer {
- create(tag) {
- const [key, name] = tag.split(":");
- const namespace = namespaces[key];
- if (namespace) return document.createElementNS(namespace, name);
- return document.createElement(key);
- }
- events(node, events) {
- for (const [k, v] of Object.entries(events)) addEventListener(node, k, v);
- }
- attrs(node, attrs) {
- for (const [k, v] of Object.entries(attrs)) setAttribute(node, k, v);
- }
-}
diff --git a/src/set.js b/src/set.js
deleted file mode 100644
index 49f85ab1..00000000
--- a/src/set.js
+++ /dev/null
@@ -1,80 +0,0 @@
-const svgCamelCaseAttributes = new Set([
- "attributeName",
- "attributeType",
- "baseFrequency",
- "baseProfile",
- "calcMode",
- "clipPathUnits",
- "diffuseConstant",
- "edgeMode",
- "filterUnits",
- "glyphRef",
- "gradientTransform",
- "gradientUnits",
- "kernelMatrix",
- "kernelUnitLength",
- "keyPoints",
- "keySplines",
- "keyTimes",
- "lengthAdjust",
- "limitingConeAngle",
- "markerHeight",
- "markerUnits",
- "markerWidth",
- "maskContentUnits",
- "maskUnits",
- "numOctaves",
- "pathLength",
- "patternContentUnits",
- "patternTransform",
- "patternUnits",
- "pointsAtX",
- "pointsAtY",
- "pointsAtZ",
- "preserveAlpha",
- "preserveAspectRatio",
- "primitiveUnits",
- "refX",
- "refY",
- "repeatCount",
- "repeatDur",
- "requiredExtensions",
- "requiredFeatures",
- "specularConstant",
- "specularExponent",
- "spreadMethod",
- "startOffset",
- "stdDeviation",
- "stitchTiles",
- "surfaceScale",
- "systemLanguage",
- "tableValues",
- "targetX",
- "targetY",
- "textContent", // For text elements.
- "textLength",
- "viewBox",
- "viewTarget",
- "xChannelSelector",
- "yChannelSelector",
- "zoomAndPan",
-]);
-
-const directAttributes = new Set(["textContent", "innerHTML", "className", "innerText"]);
-
-const toKebabCase = (str) => str.replace(/[A-Z]/g, (m) => "-" + m.toLowerCase());
-
-const svgKeyof = (key) => (svgCamelCaseAttributes.has(key) || directAttributes.has(key) ? key : toKebabCase(key));
-
-const lowerFirst = (str) => str.charAt(0).toLowerCase() + str.slice(1);
-
-export function setAttribute(dom, k, v) {
- if (k.startsWith("on")) return dom.addEventListener(k.slice(2).toLowerCase(), v);
- if (k.startsWith("style")) return dom.style.setProperty(lowerFirst(k.slice(5)), v);
- k = svgKeyof(k);
- const [set, get] = directAttributes.has(k)
- ? [() => (dom[k] = v), () => dom[k]]
- : [dom.setAttribute.bind(dom, k), dom.getAttribute.bind(dom, k)];
- if (get() === v + "") return; // get() returns a string, such as stroke-width.
- set(v);
-}
diff --git a/src/state.js b/src/state.js
deleted file mode 100644
index 56593757..00000000
--- a/src/state.js
+++ /dev/null
@@ -1,32 +0,0 @@
-import {drawRef} from "./mark.js";
-
-let active;
-
-function schedule(deps) {
- if (active) deps.forEach((d) => active.add(d));
- else {
- active = new Set(deps);
- setTimeout(() => {
- active.forEach((d) => d());
- active = null;
- });
- }
-}
-
-export function state(data) {
- const depsByKey = new Map();
- for (const key in data) depsByKey.set(key, new Set());
- return new Proxy(data, {
- get(target, key) {
- if (drawRef.current && key in data) depsByKey.get(key).add(drawRef.current);
- return target[key];
- },
- set(target, key, value) {
- const oldValue = target[key];
- if (oldValue === value) return true;
- if (depsByKey.has(key)) schedule(depsByKey.get(key));
- target[key] = value;
- return true;
- },
- });
-}
diff --git a/test/apps/circle.js b/test/apps/circle.js
deleted file mode 100644
index 73c3824b..00000000
--- a/test/apps/circle.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import * as cm from "../../src/index.js";
-
-export function circle() {
- return cm.svg("svg", {children: [cm.svg("circle", {cx: 50, cy: 50, r: 50})]}).render();
-}
diff --git a/test/apps/circleClick.js b/test/apps/circleClick.js
deleted file mode 100644
index d5dfbccd..00000000
--- a/test/apps/circleClick.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import * as cm from "../../src/index.js";
-
-export function circleClick() {
- const state = cm.state({clicked: false});
-
- const svg = cm.svg("svg", {
- width: 100,
- height: 100,
- styleBackground: "black",
- children: () =>
- cm.svg("circle", {
- cx: 50,
- cy: 50,
- r: 40,
- fill: state.clicked ? "red" : "white",
- styleCursor: "pointer",
- onClick: () => (state.clicked = !state.clicked),
- }),
- });
-
- return svg.render();
-}
diff --git a/test/apps/circleMoving.js b/test/apps/circleMoving.js
deleted file mode 100644
index 97b90b35..00000000
--- a/test/apps/circleMoving.js
+++ /dev/null
@@ -1,21 +0,0 @@
-import * as cm from "../../src/index.js";
-
-export function circleMoving() {
- const svg = cm.svg("svg", {
- width: 200,
- height: 50,
- loop: true,
- children: () => [
- cm.svg("circle", {
- cx: Math.abs(Math.sin(Date.now() / 1000) * 200),
- cy: 25,
- r: 20,
- stroke: "red",
- strokeWidth: 4,
- }),
- ],
- });
- return svg.render();
-}
-
-circleMoving.skip = true;
diff --git a/test/apps/circles.js b/test/apps/circles.js
deleted file mode 100644
index 14b4a74b..00000000
--- a/test/apps/circles.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import * as cm from "../../src/index.js";
-
-export function circles() {
- const data = Array.from({length: 5}, (_, i) => i);
- const svg = cm.svg("svg", {
- width: 30 * (data.length + 1),
- height: 40,
- children: [
- cm.svg("circle", data, {
- cy: 20,
- r: 10,
- fill: (i) => (i % 2 ? "steelblue" : "orange"),
- attrs: (i) => ({fill: "red", cx: (i + 1) * 30}),
- }),
- ],
- });
- return svg.render();
-}
diff --git a/test/apps/circlesMoving.js b/test/apps/circlesMoving.js
deleted file mode 100644
index 11774dcc..00000000
--- a/test/apps/circlesMoving.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import * as cm from "../../src/index.js";
-
-export function circlesMoving() {
- const svg = cm.svg("svg", {
- width: 200,
- height: 250,
- loop: true,
- stroke: "red",
- strokeWidth: 4,
- children: () => [
- cm.svg("g", new Array(5), {
- transform: (_, i) => `translate(0, ${i * 50})`,
- children: () => [
- cm.svg("circle", {
- cx: Math.abs(Math.sin(Date.now() / 1000) * 200),
- cy: 25,
- r: 20,
- }),
- ],
- }),
- ],
- });
- return svg.render();
-}
-
-circlesMoving.skip = true;
diff --git a/test/apps/groupCircles.js b/test/apps/groupCircles.js
deleted file mode 100644
index b2a226de..00000000
--- a/test/apps/groupCircles.js
+++ /dev/null
@@ -1,24 +0,0 @@
-import * as cm from "../../src/index.js";
-
-export function groupCircles() {
- const data = Array.from({length: 5}, (_, i) => i);
- const svg = cm.svg("svg", {
- width: 30 * (data.length + 1),
- height: 90,
- children: [
- cm.svg("g", data, {
- transform: (i) => `translate(${(i + 1) * 30}, 20)`,
- children: [cm.svg("circle", {r: 10, fill: "black"})],
- }),
- cm.svg("g", data, {
- transform: (i) => `translate(${(i + 1) * 30}, 50)`,
- children: [[cm.svg("circle", {r: 10, fill: "black"}), cm.svg("circle", {r: 5, fill: "white"})]],
- }),
- cm.svg("g", data, {
- transform: (i) => `translate(${(i + 1) * 30}, 80)`,
- children: (i) => [cm.svg("circle", {r: (i + 1) * 2, fill: "black"})],
- }),
- ],
- });
- return svg.render();
-}
diff --git a/test/apps/groupNested.js b/test/apps/groupNested.js
deleted file mode 100644
index 86982c5b..00000000
--- a/test/apps/groupNested.js
+++ /dev/null
@@ -1,16 +0,0 @@
-import * as cm from "../../src/index.js";
-
-export function groupNested() {
- const svg = cm.svg("svg", {
- children: [
- cm.svg("g", {
- children: [
- cm.svg("g", {
- children: [cm.svg("circle", {cx: 50, cy: 50, r: 50})],
- }),
- ],
- }),
- ],
- });
- return svg.render();
-}
diff --git a/test/apps/index.js b/test/apps/index.js
deleted file mode 100644
index 89ab7782..00000000
--- a/test/apps/index.js
+++ /dev/null
@@ -1,8 +0,0 @@
-export {circle} from "./circle.js";
-export {circles} from "./circles.js";
-export {circleMoving} from "./circleMoving.js";
-export {groupCircles} from "./groupCircles.js";
-export {groupNested} from "./groupNested.js";
-export {circleClick} from "./circleClick.js";
-export {circlesMoving} from "./circlesMoving.js";
-export {textState} from "./textState.js";
diff --git a/test/apps/textState.js b/test/apps/textState.js
deleted file mode 100644
index 320a333a..00000000
--- a/test/apps/textState.js
+++ /dev/null
@@ -1,31 +0,0 @@
-import * as cm from "../../src/index.js";
-
-export function textState() {
- const state = cm.state({count: 0, fill: "steelblue"});
-
- setTimeout(() => {
- state.count = 0;
- }, 500);
-
- setTimeout(() => {
- state.count = 1;
- state.fill = "black";
- }, 1000);
-
- const svg = cm.svg("svg", {
- width: 100,
- height: 100,
- children: () => {
- console.log("update");
- return cm.svg("text", {
- textContent: state.count,
- fill: state.fill,
- dy: "1em",
- });
- },
- });
-
- return svg.render();
-}
-
-textState.skip = true;
diff --git a/test/dom.spec.js b/test/dom.spec.js
new file mode 100644
index 00000000..64e3de3b
--- /dev/null
+++ b/test/dom.spec.js
@@ -0,0 +1,18 @@
+import {test, expect, vi} from "vitest";
+import {svg, renderMark} from "../src/index.js";
+
+test("svg(tag, options) should set events", () => {
+ const click = vi.fn();
+ const root = renderMark(svg("svg", {onclick: click}));
+ root.dispatchEvent(new Event("click"));
+ expect(click).toHaveBeenCalled();
+});
+
+test("svg(tag, options) should pass datum to event handler", () => {
+ const click = vi.fn();
+ const root = renderMark(svg("svg", [1, 2, 3], {onclick: click}));
+ const el = root.children[0];
+ const event = new Event("click");
+ el.dispatchEvent(event);
+ expect(click).toHaveBeenCalledWith(event, 1, 0, [1, 2, 3]);
+});
diff --git a/test/index.html b/test/index.html
deleted file mode 100644
index 30ce1ffb..00000000
--- a/test/index.html
+++ /dev/null
@@ -1,76 +0,0 @@
-
-
diff --git a/test/index.spec.js b/test/index.spec.js
deleted file mode 100644
index 78b69eb0..00000000
--- a/test/index.spec.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import * as cm from "../src/index.js";
-import * as cmVector from "charmingjs-vector";
-import {test, expect} from "vitest";
-
-test("cm should have expected exports", () => {
- for (const [key, value] of Object.entries(cmVector)) {
- expect(cm[key]).toBe(value);
- }
-});
diff --git a/test/mark.spec.js b/test/mark.spec.js
deleted file mode 100644
index 0a4b7385..00000000
--- a/test/mark.spec.js
+++ /dev/null
@@ -1,47 +0,0 @@
-import {Mark, svg} from "../src/index.js";
-import {test, expect} from "vitest";
-
-test("Mark should have expected defaults.", () => {
- const mark = new Mark();
- expect(mark._children).toEqual([]);
- expect(mark._data).toEqual([0]);
- expect(mark._options).toEqual(undefined);
- expect(mark._props).toEqual({});
- expect(mark._tag).toBe(undefined);
- expect(mark._update).toBe(null);
- expect(mark._nodes).toBe(null);
- expect(mark._next).toBe(null);
- expect(mark._groups).toBe(null);
-});
-
-test("Mark.clone should return a new Mark with the same properties", () => {
- const mark = new Mark("svg:circle", [1, 2, 3], {cx: 0, cy: 0, r: 10}, []);
- const cloned = mark.clone();
- expect(cloned).toBeInstanceOf(Mark);
- expect(cloned._tag).toBe("svg:circle");
- expect(cloned._data).toEqual([1, 2, 3]);
- expect(cloned._options).toEqual({cx: 0, cy: 0, r: 10});
- expect(cloned._children).toEqual([]);
-});
-
-test("Mark should pass expected params to Mark.render", () => {
- class Test extends Mark {
- create(tag, options, values, context) {
- expect(tag).toBe("svg:circle");
- expect(options).toEqual({cx: 0, cy: 0, r: 10});
- expect(values).toEqual({datum: 0, i: 0, data: [0]});
- const {root, ...rest} = context;
- expect(rest).toEqual({width: 100, height: 200});
- expect(root()).toBeInstanceOf(SVGSVGElement);
- return super.create(tag, options, values, context);
- }
- }
-
- const root = svg("svg", {
- width: 100,
- height: 200,
- children: [new Test("svg:circle", {cx: 0, cy: 0, r: 10})],
- });
-
- root.render();
-});
diff --git a/test/output/circle.svg b/test/output/circle.svg
deleted file mode 100644
index 8b4fe50d..00000000
--- a/test/output/circle.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
\ No newline at end of file
diff --git a/test/output/circleClick.svg b/test/output/circleClick.svg
deleted file mode 100644
index d3fe590c..00000000
--- a/test/output/circleClick.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
\ No newline at end of file
diff --git a/test/output/circles.svg b/test/output/circles.svg
deleted file mode 100644
index ecb3e9f8..00000000
--- a/test/output/circles.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
\ No newline at end of file
diff --git a/test/output/cloneDataDrivenChildren.html b/test/output/cloneDataDrivenChildren.html
new file mode 100644
index 00000000..23d463cf
--- /dev/null
+++ b/test/output/cloneDataDrivenChildren.html
@@ -0,0 +1,26 @@
+
\ No newline at end of file
diff --git a/test/output/fragmentRoot.html b/test/output/fragmentRoot.html
new file mode 100644
index 00000000..0826cb2b
--- /dev/null
+++ b/test/output/fragmentRoot.html
@@ -0,0 +1,17 @@
+
| + 11975 + | ++ 5871 + | ++ 8916 + | ++ 2868 + | +
| + 1951 + | ++ 10048 + | ++ 2060 + | ++ 6171 + | +
| + 8010 + | ++ 16145 + | ++ 8090 + | ++ 8045 + | +
| + 1013 + | ++ 990 + | ++ 940 + | ++ 6907 + | +