diff --git a/.github/workflows/docs-ci.yml b/.github/workflows/docs-ci.yml
index 9079d079..a248ec90 100644
--- a/.github/workflows/docs-ci.yml
+++ b/.github/workflows/docs-ci.yml
@@ -42,3 +42,18 @@ jobs:
- name: Build docs site
run: npm run build --prefix docs
+
+ # `astro build` exits 0 even when the `docs` collection resolves empty —
+ # it emits a lone 404 page and mentions "The collection "docs" does not
+ # exist or is empty" in passing. That is exactly what the Starlight 0.41
+ # upgrade did before the content loader was added (#1461), and with the
+ # site not yet deployed (#1318) nobody would have noticed. A green build
+ # is not evidence the site has content.
+ - name: Fail if the build emitted no content
+ run: |
+ pages=$(find docs/dist -name '*.html' | wc -l | tr -d ' ')
+ echo "emitted $pages HTML pages"
+ if [ "$pages" -lt 10 ]; then
+ echo "::error::Docs build emitted only $pages page(s) — the content collection is probably empty."
+ exit 1
+ fi
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 06fd3e30..a59449e4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -16,6 +16,13 @@ Chart-experience release: chart authoring, editing, rule-based styling and click
### Fixed
+- A table whose saved `groupBy` was an **array** rendered completely flat — no group rows, no aggregates, no error — so individual rows read as group totals, a wrong answer with nothing to suggest anything had been dropped. Three seeded Chart Reference tiles holding `groupBy: ["region"]` were pixel-identical to the ungrouped tile. `parseGroupByColumns` accepted only a comma-separated string and its `typeof groupBy === "string" ? groupBy : ""` guard turned any array into an empty string. Note the shape of the bug is the opposite of what it looks like: the widget editor emits `vals.join(",")`, so configuring grouping through the UI always worked — the array reaches storage from seeded layouts, imported dashboards and NeoDash conversions. Both forms are now accepted, order preserved as the nesting hierarchy (#1395)
+- A parameter widget's **Default value** was never applied, so every dashboard relying on defaults rendered empty on arrival. `extractParamDefaults` walked the layout correctly, had its own unit test, and had **zero production callers** — the editor's field wrote a value into the saved layout that was read only by a test. The seeded Chart Playground carries 21 configured defaults across 8 pages and showed `Waiting for parameters… $param_cat_dimension $param_cat_metric …` on every chart until the user set each knob by hand. Defaults are now seeded on load, filling only parameters that are not already set — which gives the precedence `URL > restored session > default` without any ordering machinery, since both of those are applied before the layout finishes loading. A once-per-dashboard guard stops a cleared parameter snapping straight back. This was the third instance of the same shape after #1234 and #1388, so a guard now asserts this helper has a production caller; the general form, a dead-export check across `lib/`, is #1477 (#1421)
+- Every dashboard page you had ever visited kept auto-refreshing, forever, so query load scaled with browsing history rather than with what was on screen. Measured on Chart Reference sitting on the same page with the same 18 visible widgets: 16 `/api/query` POSTs in 40s having opened only page 1, against 77 after touring six pages and returning — **4.81x the database traffic for an identical view**, ~68 hidden widgets polling for pages nobody was looking at. Tour all 20 pages and leave the tab open and roughly 230 widgets keep polling. All of it is refresh-tier work against the customer's database, which is exactly the load the query scheduler exists to shed, so one user exploring a large dashboard could crowd out interactive queries for everyone on that connector. `isActive` was already computed and already used to hide the page and to gate `onLayoutChange` — it just never gated the refresh. Visited pages still stay mounted, so tab switching remains instant and does not re-query; they simply stop polling while hidden (#1419)
+- Two options were advertised in the widget editor, implemented in the component library, and silently discarded in between: `trendEnabled` (single-value) and `thresholdZones` (gauge). Setting either did nothing, with no error, and the seeded reference dashboard shipped tiles demonstrating both — the `thresholdZones (3 bands)` tile was pixel-identical to `default`. The cause was not the Zod schema, which uses `.passthrough()` and preserved the keys intact; it was the plugin's explicit prop mapping, which never passed them to the chart. The worse half was the KPI: `transformToValueData` took the first column **positionally**, so following the editor's own "requires 2 rows" instruction on a `label, value` query rendered the date as the headline metric — `$2026-03`. It now picks the first numeric column and carries the previous row so a trend can be computed. A ratchet asserts that every option offered for a chart type is actually read by its plugin; it found the same bug in five more plugins, allowlisted and tracked in #1472 (#1397)
+- A long-format result — `category, series, value`, what `GROUP BY a, b` naturally produces — rendered a bar or line chart that looked plausible and was wrong. `resolveValueKeys` treats every non-label column as a value series, so the `series` column became a series of its own whose cells all coerced to null: 12 bars with duplicated x labels, a ghost legend swatch with no bars, and **no stacking at all** despite `stackMode` being set. Line was worse — a single revenue line drawn across duplicated x values, interleaving delivered -> shipped -> delivered, which reads as a violently spiky time series but is pure artifact. Nothing marked either as an error, and the seeded reference dashboard itself demonstrated two `stackMode` options with this exact query shape, which is how easy it is to fall into. Bar and line now reject a result whose plotted value columns contain no numeric values, naming the offending column and showing the pivot that fixes it. A column that is entirely null stays legal — that is a sparse series, what a LEFT JOIN produces. `validate` now receives the same column mapping as the transform, so a result whose text columns the user already mapped away is not wrongly rejected. The 11 affected reference tiles are rewritten to wide format, so the stacking options finally demonstrate stacking (#1400)
+- `numberFormat: "percent"` appended a `%` sign and scaled nothing, so a KPI computing `401 / 2000` rendered **`0.2%`** where the true share was **`20.05%`** — wrong by a factor of 100, rendered cleanly, with nothing in the UI to distinguish it from a real value. `0.2%` and `20.05%` are both believable share figures. The convention was never stated anywhere and the two option surfaces documented **opposite** contracts: the table's option was labelled `Percent (12%)`, asserting input was already 0–100, while the seeded reference tile was authored with ratio semantics — the clearest evidence the contract was not discoverable. `percent` now takes a **ratio** and scales it, via `Intl.NumberFormat`'s own `style: "percent"`, which also brings locale grouping (`12.5` → `1,250%`) that the hand-rolled branch never had. With no explicit decimal places it caps at 2 rather than Intl's default of 0, since rounding `20.05%` to `20%` is the same class of silent precision loss. **Breaking** for anyone who worked around the old behaviour by pre-multiplying by 100 in their query. Both option descriptions, both option labels, the single-value docs page and the demo tile now state the expected input range (#1396)
+- A client-side `groupBy` reported `count` as the number of **rows** in the group while `sum`, `avg`, `min` and `max` all skipped nulls, so the three contradicted each other: a group of `[100, 200, null]` returned `count: 3, sum: 300, avg: 150`, and `sum / count` came to 100. A reader saw "3 revenue values totalling 300" with no way to know only two rows had revenue at all — and because `count` is typically the denominator someone divides by, the error propagated into everything derived from it. Nulls in an aggregated column are not an edge case; they are what a `LEFT JOIN` produces. `count` now counts non-null values, matching SQL's `COUNT(col)` — the output key is `revenue_count`, named for the column, so the column form is the only one it could have meant. The existing test used sample data with no nulls and passed on both the wrong and the right behaviour; the new invariant test (`sum / count === avg` for every group) fails on the old code and cannot be silently re-broken (#1414)
- Overlays ignored `prefers-reduced-motion`. All ten Radix primitives (dialog, alert-dialog, sheet, popover, tooltip, toast, select, dropdown-menu, context-menu, navigation-menu) animated unconditionally, even though spinner, progress and skeleton had honoured the preference since the component audit. Per-component `motion-reduce:animate-none` cannot fix this: the overlays animate through data-attribute variants like `data-[state=open]:animate-in`, which compile to `.class[data-state=open]` — specificity (0,2,0) — while the `motion-reduce:` utility is (0,1,0) and a media query adds no specificity, so the guard loses the cascade. The reset now lives once in `design-tokens.css`, the only stylesheet both packages import. It also fixed a CI flake nobody had connected to accessibility: Radix keeps an overlay mounted until its exit animation reports `animationend`, and when an NVL/WebGL widget mounted alongside the close that animation stalled, leaving `data-state="closed"` dialogs visible past a 5s budget — every "flaky graph chart" failure on `dev` was this, never a graph assertion. The E2E suite now runs as a reduced-motion user, so the accessibility branch is exercised in CI rather than merely declared (#1458)
- The "Sync to URL" toggle on a parameter-select widget did nothing. `buildUrlParams()` was called with no exclude set and `extractNoSyncParams()` — the helper written to supply one — had **zero production callers**, only its own unit tests. Switching the toggle off still put the value in the address bar. URL sync is now **opt-in**: only a parameter whose widget sets `syncToUrl: true` reaches the query string. **Breaking for shared links** — a URL carrying `?param_…` for a widget that never opted in will no longer reproduce those values, and the parameter is stripped from an inbound URL rather than silently ignored (#1388)
- Leaflet's zoom-transition timer fired after the map was torn down, throwing `Cannot read properties of undefined (reading '_leaflet_pos')`. Four such unhandled errors made the entire Storybook browser project exit 1 even though every story passed, which is why the visual-regression gate could only be pointed at two files. The timer is now disarmed before teardown, so `test:visual` runs the whole project (#1384)
@@ -31,10 +38,12 @@ Chart-experience release: chart authoring, editing, rule-based styling and click
### Changed
+- Docs site upgraded to astro 7.1.4 and starlight 0.41.5. Dependabot had split this into two PRs that could never pass — each broke the other's peer range — so they are replaced by one combined bump (#1461). Three breaking changes came with it: `social` takes an array of link items (starlight 0.33), autogenerated sidebar groups can no longer carry a `label` beside `autogenerate` (0.39), and content collections now require an explicit loader. That last one is worth knowing about: without it the `docs` collection resolves empty and `astro build` still **exits 0**, emitting a single 404 page while mentioning the empty collection only in passing. CI now fails the docs build when it emits fewer than 10 pages, because a green build was not evidence the site had any content — and with the site not yet deployed (#1318) an empty one would have gone unnoticed
- `zod` upgraded from 3.25.76 to 4.4.3. The tree previously held **two majors at once**: `component` declared `zod@^4.3.6` while importing it zero times, and that phantom dependency hoisted v4 to the root, forcing `app` to carry a nested v3. The unused declaration is removed, so there is now one zod. Migration was smaller than a 51-file footprint suggests — `.passthrough()` is unchanged and still preserves unknown keys, which matters because chart options depend on it (#1397). Three real changes: `ZodError.errors` is gone in favour of `.issues` (8 API routes, where leaving it would have turned a helpful 400 into a 500), `z.record()` now requires an explicit key type at the type level (11 sites), and `issue.path` widened to `PropertyKey[]` so it can contain symbols (#1436)
- `AlertDialog` now uses the same exact-centre animation as `Dialog`. It had kept upstream shadcn's `top-[48%]`, a deliberate 2%-of-height rise, so the two sibling modals animated differently and its centring classes carried no comment protecting them. Both now use `top-1/2` on both axes, and the geometry scrub is shared by both story files (#1373)
- `CLAUDE.md` moved to `.claude/CLAUDE.md`, alongside the hooks, skills and agents it belongs with, and out of the repo root where every visitor saw it. Claude Code reads both paths, so nothing changed about how it loads
- `npm run review:local` targets the active release branch instead of the previous one
+- Vitest caps worker forks at 50% of available parallelism in `app` and `component`. The default is roughly one fork per core, and each fork loads jsdom + React + the component library, so on a many-core machine the suite ran out of headroom before it ran out of cores: workers began failing to boot with `Timeout waiting for worker to respond`, taking whole test files down with them. Measured on a 10-core machine, the `app` suite went from **889s with 96 failures and 9 files never collected** to **37s with 3480/3480 passing** — and a run that silently collects nine fewer files still prints a summary that looks complete, so the lost coverage was invisible. Expressed as a percentage rather than a fixed count so CI runners scale down with it (#1240)
### Added
diff --git a/app/e2e/hidden-page-refresh.spec.ts b/app/e2e/hidden-page-refresh.spec.ts
new file mode 100644
index 00000000..7d430e53
--- /dev/null
+++ b/app/e2e/hidden-page-refresh.spec.ts
@@ -0,0 +1,133 @@
+import { test, expect, ALICE, createTestDashboard } from "./fixtures";
+
+/**
+ * #1419 — every page you had ever visited kept auto-refreshing, so query load
+ * scaled with browsing history rather than with what was on screen. Measured on
+ * the Chart Reference dashboard: 4.81x the `/api/query` volume for the same 18
+ * visible widgets after touring six pages.
+ *
+ * This is that measurement as a regression test. It counts `/api/query` POSTs
+ * over a fixed window while sitting on page 1, then repeats the count after
+ * visiting the other pages and returning to page 1. The visible view is
+ * identical in both windows, so the counts must be too.
+ */
+
+const REFRESH_SECONDS = 5;
+/** Long enough for two refresh ticks, short enough to keep the test bearable. */
+const SAMPLE_MS = 12_000;
+
+/**
+ * Each page must query something *different*.
+ *
+ * `use-widget-query` keys on `[connectionId, database, query, params,
+ * staleTime]` with no widget id, so widgets sharing a query across pages share
+ * one TanStack cache entry — and therefore one refetch, however many are
+ * mounted. An earlier version of this fixture gave every page the same query
+ * and passed identically with and against the fix, measuring nothing. The
+ * distinct `LIMIT` is what makes the pages independently pollable.
+ */
+function page(id: string, title: string, limit: number) {
+ return {
+ id,
+ title,
+ widgets: [
+ {
+ id: `${id}-w1`,
+ chartType: "table",
+ connectionId: "conn-neo4j-001",
+ query: `MATCH (m:Movie) RETURN m.title AS title LIMIT ${limit}`,
+ settings: { title: `${title} widget` },
+ },
+ ],
+ gridLayout: [{ i: `${id}-w1`, x: 0, y: 0, w: 12, h: 4 }],
+ };
+}
+
+test.describe("Hidden pages do not auto-refresh (#1419)", () => {
+ test.beforeEach(async ({ authPage }) => {
+ await authPage.login(ALICE.email, ALICE.password);
+ });
+
+ test("query volume depends on the visible page, not on browsing history", async ({
+ page: pw,
+ }) => {
+ test.setTimeout(120_000);
+
+ const { id, cleanup } = await createTestDashboard(
+ pw.request,
+ `Hidden refresh ${Date.now()}`,
+ );
+
+ try {
+ await pw.request.put(`/api/dashboards/${id}`, {
+ data: {
+ layoutJson: {
+ version: 2,
+ pages: [
+ page("p1", "One", 1),
+ page("p2", "Two", 2),
+ page("p3", "Three", 3),
+ ],
+ settings: {
+ autoRefresh: true,
+ refreshIntervalSeconds: REFRESH_SECONDS,
+ },
+ },
+ },
+ });
+
+ // Count every widget query the browser issues, regardless of page.
+ let queries = 0;
+ pw.on("request", (req) => {
+ if (req.url().includes("/api/query") && req.method() === "POST") {
+ queries += 1;
+ }
+ });
+
+ await pw.goto(`/${id}`);
+ await expect(
+ pw.locator("[data-testid='widget-card']").first(),
+ ).toBeVisible({
+ timeout: 20_000,
+ });
+ await expect(pw.locator("table").first()).toBeVisible({
+ timeout: 20_000,
+ });
+
+ // ── Baseline: only page 1 has ever been opened ────────────────────
+ queries = 0;
+ await pw.waitForTimeout(SAMPLE_MS);
+ const baseline = queries;
+
+ // Auto-refresh must actually be running, or this test proves nothing.
+ expect(
+ baseline,
+ "expected auto-refresh to issue queries during the baseline window",
+ ).toBeGreaterThan(0);
+
+ // ── Tour the other pages, then come back to page 1 ────────────────
+ for (const title of ["Two", "Three", "One"]) {
+ await pw.getByRole("tab", { name: title }).click();
+ await pw.waitForTimeout(500);
+ }
+ await expect(pw.locator("table").first()).toBeVisible({
+ timeout: 20_000,
+ });
+
+ // ── Same visible view, same window, same count ────────────────────
+ queries = 0;
+ await pw.waitForTimeout(SAMPLE_MS);
+ const afterTour = queries;
+
+ // Before the fix this was ~3x baseline with three pages mounted. Allow
+ // one extra tick of slack for timer alignment rather than demanding
+ // equality, but nothing close to a second page's worth.
+ expect(
+ afterTour,
+ `hidden pages are still polling: ${afterTour} queries after touring vs ${baseline} on a fresh load`,
+ ).toBeLessThanOrEqual(baseline + 1);
+ } finally {
+ await cleanup();
+ }
+ });
+});
diff --git a/app/e2e/param-defaults.spec.ts b/app/e2e/param-defaults.spec.ts
new file mode 100644
index 00000000..c86fd1b6
--- /dev/null
+++ b/app/e2e/param-defaults.spec.ts
@@ -0,0 +1,90 @@
+import { test, expect, ALICE, createTestDashboard } from "./fixtures";
+
+/**
+ * #1421 — a parameter widget's **Default value** was never applied, because
+ * `extractParamDefaults` had zero production callers. Every dashboard relying
+ * on defaults rendered empty on arrival: the seeded Chart Playground (8 pages,
+ * 21 configured defaults) showed "Waiting for parameters…" on every chart until
+ * the user set each knob by hand.
+ *
+ * Built as a fixture rather than driving the seeded Playground, which is a demo
+ * showcase and is not present in the E2E database.
+ */
+test.describe("Parameter defaults are applied on load (#1421)", () => {
+ test.beforeEach(async ({ authPage }) => {
+ await authPage.login(ALICE.email, ALICE.password);
+ });
+
+ test("a configured default renders the chart instead of 'Waiting for parameters'", async ({
+ page,
+ }) => {
+ test.setTimeout(90_000);
+
+ const { id, cleanup } = await createTestDashboard(
+ page.request,
+ `Param defaults ${Date.now()}`,
+ );
+
+ try {
+ await page.request.put(`/api/dashboards/${id}`, {
+ data: {
+ layoutJson: {
+ version: 2,
+ pages: [
+ {
+ id: "p1",
+ title: "Page 1",
+ widgets: [
+ {
+ id: "sel",
+ chartType: "parameter-select",
+ connectionId: "conn-neo4j-001",
+ query: "",
+ settings: {
+ title: "Title filter",
+ chartOptions: {
+ parameterName: "title_filter",
+ parameterType: "text",
+ defaultValue: "The",
+ },
+ },
+ },
+ {
+ // Consumes the parameter. Neo4j binds `$param_` natively,
+ // so this is a real bound parameter, not string splicing.
+ id: "tbl",
+ chartType: "table",
+ connectionId: "conn-neo4j-001",
+ query:
+ "MATCH (m:Movie) WHERE m.title CONTAINS $param_title_filter RETURN m.title AS title LIMIT 3",
+ settings: { title: "Filtered movies" },
+ },
+ ],
+ gridLayout: [
+ { i: "sel", x: 0, y: 0, w: 4, h: 3 },
+ { i: "tbl", x: 4, y: 0, w: 8, h: 4 },
+ ],
+ },
+ ],
+ },
+ },
+ });
+
+ await page.goto(`/${id}`);
+
+ // The symptom: the consuming widget stalls, naming the token it lacks.
+ await expect(page.getByText(/Waiting for parameters/)).toHaveCount(0, {
+ timeout: 20_000,
+ });
+ await expect(page.getByText("$param_title_filter")).toHaveCount(0);
+
+ // And the chart actually renders, which only happens once the parameter
+ // resolves and the query runs.
+ await expect(page.locator("table").first()).toBeVisible({
+ timeout: 20_000,
+ });
+ } finally {
+ await cleanup();
+ }
+ });
+});
diff --git a/app/e2e/table-grouping.spec.ts b/app/e2e/table-grouping.spec.ts
new file mode 100644
index 00000000..71d8e1fa
--- /dev/null
+++ b/app/e2e/table-grouping.spec.ts
@@ -0,0 +1,86 @@
+import { test, expect, ALICE, createTestDashboard } from "./fixtures";
+
+/**
+ * #1395 — a table whose saved `groupBy` is an **array** rendered completely
+ * flat: no group rows, no aggregates, no error. Individual rows then read as
+ * group totals, which is a wrong answer the user has every reason to believe.
+ *
+ * The array is the shape that seeded layouts, imported dashboards and NeoDash
+ * conversions carry; the widget editor writes a comma-separated string, which
+ * always worked. So this test deliberately drives the **array** path — an
+ * editor-driven test would exercise the working one and pass either way.
+ */
+test.describe("Table grouping from a saved layout (#1395)", () => {
+ test.beforeEach(async ({ authPage }) => {
+ await authPage.login(ALICE.email, ALICE.password);
+ });
+
+ test("a groupBy array from saved JSON renders group rows", async ({
+ page,
+ }) => {
+ test.setTimeout(90_000);
+
+ const { id, cleanup } = await createTestDashboard(
+ page.request,
+ `Table grouping ${Date.now()}`,
+ );
+
+ try {
+ await page.request.put(`/api/dashboards/${id}`, {
+ data: {
+ layoutJson: {
+ version: 2,
+ pages: [
+ {
+ id: "p1",
+ title: "Page 1",
+ widgets: [
+ {
+ id: "tbl",
+ chartType: "table",
+ // `released` repeats across rows, so grouping by it must
+ // collapse them into a handful of group rows.
+ query:
+ "MATCH (m:Movie) WHERE m.released IS NOT NULL RETURN m.released AS released, m.title AS title ORDER BY released LIMIT 20",
+ connectionId: "conn-neo4j-001",
+ settings: {
+ title: "Movies by year",
+ chartOptions: {
+ enableGrouping: true,
+ // The shape under test. Not a string.
+ groupBy: ["released"],
+ aggregationFn: "count",
+ },
+ },
+ },
+ ],
+ gridLayout: [{ i: "tbl", x: 0, y: 0, w: 12, h: 6 }],
+ },
+ ],
+ },
+ },
+ });
+
+ await page.goto(`/${id}`);
+ await expect(page.locator("table").first()).toBeVisible({
+ timeout: 20_000,
+ });
+
+ // Group rows carry an expand toggle; flat rows do not. Before the fix the
+ // table rendered every row individually and this count was 0.
+ await expect(
+ page.getByRole("button", { name: "Toggle group" }).first(),
+ ).toBeVisible({ timeout: 20_000 });
+
+ const groups = await page
+ .getByRole("button", { name: "Toggle group" })
+ .count();
+ expect(groups).toBeGreaterThan(0);
+
+ // Grouping must actually collapse: fewer group rows than source rows.
+ expect(groups).toBeLessThan(20);
+ } finally {
+ await cleanup();
+ }
+ });
+});
diff --git a/app/src/components/__tests__/card-container-states.test.tsx b/app/src/components/__tests__/card-container-states.test.tsx
index 82b76c07..faf81733 100644
--- a/app/src/components/__tests__/card-container-states.test.tsx
+++ b/app/src/components/__tests__/card-container-states.test.tsx
@@ -98,6 +98,28 @@ vi.mock("@/lib/query/data-transforms", () => ({
applyTransforms: (d: unknown) => d,
}));
+// `chart-helpers` registers *lightweight stub* plugins when the full plugin
+// modules haven't loaded, and a stub carries no `validate` — so without this
+// the validation path is unreachable from jsdom and #1400 could not be tested
+// at this layer at all. Attach the real bar validator; importing the plugin
+// module itself would drag ECharts into jsdom for no benefit.
+vi.mock("@/lib/plugin/chart-helpers", async () => {
+ const actual = await vi.importActual<
+ typeof import("@/lib/plugin/chart-helpers")
+ >("@/lib/plugin/chart-helpers");
+ const { validateBarData } = await vi.importActual<
+ typeof import("@/plugins/bar/transform")
+ >("@/plugins/bar/transform");
+ return {
+ ...actual,
+ getChartConfig: (type: string) => {
+ const config = actual.getChartConfig(type);
+ if (!config || type !== "bar") return config;
+ return { ...config, validate: validateBarData };
+ },
+ };
+});
+
/* ---------- import under test ---------- */
import { CardContainer } from "../card-container";
import type { DashboardWidget } from "@/lib/db/schema";
@@ -462,4 +484,63 @@ describe("CardContainer", () => {
expect(screen.queryByText(/Showing first .* rows/)).toBeNull();
});
+
+ // ----- Long-format rejection (#1400) -----
+
+ describe("long-format results (#1400)", () => {
+ const longFormat = [
+ { category: "Apparel", series: "delivered", revenue: 100 },
+ { category: "Apparel", series: "shipped", revenue: 50 },
+ { category: "Home", series: "delivered", revenue: 80 },
+ ];
+
+ it("renders an explicit error state instead of a silently wrong chart", () => {
+ mockUseWidgetQuery.mockReturnValue({
+ isPending: false,
+ fetchStatus: "idle",
+ isError: false,
+ data: { data: longFormat, resultId: "r1" },
+ missingParams: [],
+ });
+
+ render();
+
+ expect(screen.queryByTestId("chart-renderer")).toBeNull();
+ expect(screen.getByText("Incompatible data format")).toBeDefined();
+ });
+
+ it("names the offending column in the error", () => {
+ mockUseWidgetQuery.mockReturnValue({
+ isPending: false,
+ fetchStatus: "idle",
+ isError: false,
+ data: { data: longFormat, resultId: "r1" },
+ missingParams: [],
+ });
+
+ render();
+
+ expect(screen.getByText(/"series"/)).toBeDefined();
+ });
+
+ it("still renders the chart for the wide-format equivalent", () => {
+ mockUseWidgetQuery.mockReturnValue({
+ isPending: false,
+ fetchStatus: "idle",
+ isError: false,
+ data: {
+ data: [
+ { category: "Apparel", delivered: 100, shipped: 50 },
+ { category: "Home", delivered: 80, shipped: 20 },
+ ],
+ resultId: "r1",
+ },
+ missingParams: [],
+ });
+
+ render();
+
+ expect(screen.getByTestId("chart-renderer")).toBeDefined();
+ });
+ });
});
diff --git a/app/src/components/__tests__/dashboard-workspace.test.tsx b/app/src/components/__tests__/dashboard-workspace.test.tsx
index 1d35d565..96702b0a 100644
--- a/app/src/components/__tests__/dashboard-workspace.test.tsx
+++ b/app/src/components/__tests__/dashboard-workspace.test.tsx
@@ -614,6 +614,77 @@ describe("DashboardWorkspace", () => {
).toBe("false");
});
+ // #1419 — visited pages stay mounted so tab switching is instant, but they
+ // kept polling too. Query load scaled with browsing history rather than with
+ // what is on screen: 4.81x the /api/query volume for the same 18 visible
+ // widgets after touring six pages.
+ describe("hidden pages do not auto-refresh (#1419)", () => {
+ function withAutoRefresh() {
+ const d = makeDashboard();
+ (d.layoutJson as unknown as { settings: unknown }).settings = {
+ autoRefresh: true,
+ refreshIntervalSeconds: 30,
+ };
+ return d;
+ }
+
+ function intervals() {
+ return screen
+ .getAllByTestId("dashboard-container")
+ .map((el) => el.getAttribute("data-refetch-interval"));
+ }
+
+ it("only the active page carries the refresh interval", async () => {
+ dashboard = withAutoRefresh();
+ render();
+
+ // Page 1 is active and alone.
+ expect(intervals()).toEqual(["30000"]);
+
+ // Visiting page 2 keeps page 1 mounted — that is deliberate — but it
+ // must stop polling.
+ await userEvent.click(screen.getAllByTestId("page-tab")[1]);
+ expect(intervals()).toEqual(["false", "30000"]);
+ });
+
+ it("stops the previously active page when returning to the first", async () => {
+ dashboard = withAutoRefresh();
+ render();
+
+ await userEvent.click(screen.getAllByTestId("page-tab")[1]);
+ await userEvent.click(screen.getAllByTestId("page-tab")[2]);
+ await userEvent.click(screen.getAllByTestId("page-tab")[0]);
+
+ // Three pages mounted, exactly one polling.
+ const found = intervals();
+ expect(found).toHaveLength(3);
+ expect(found.filter((v) => v === "30000")).toHaveLength(1);
+ expect(found[0]).toBe("30000");
+ });
+
+ it("never polls a hidden page, however many are mounted", async () => {
+ dashboard = withAutoRefresh();
+ render();
+
+ for (const i of [1, 2]) {
+ await userEvent.click(screen.getAllByTestId("page-tab")[i]);
+ }
+
+ // This is the invariant the 4.8x measurement violated: polling depends on
+ // the visible page, not on how much of the dashboard has been explored.
+ expect(intervals().filter((v) => v !== "false")).toHaveLength(1);
+ });
+
+ it("keeps every page off in edit mode regardless of which is active", async () => {
+ dashboard = withAutoRefresh();
+ pathname = "/d1/edit";
+ render();
+
+ await userEvent.click(screen.getAllByTestId("page-tab")[1]);
+ expect(intervals().every((v) => v === "false")).toBe(true);
+ });
+ });
+
// ── view mode must not fetch the editor's data ──────────────────────
it("does not fetch connections or widget templates in view mode", () => {
render();
@@ -1053,6 +1124,128 @@ describe("DashboardWorkspace", () => {
expect(useDashboardStore.getState().layout.pages).toHaveLength(3);
});
+ // ── Parameter defaults (#1421) ──────────────────────────────────────
+ // `extractParamDefaults` walked the layout correctly and had its own unit
+ // test, but zero production callers — so the editor's "Default value" field
+ // wrote into the saved layout and was read only by a test. The seeded Chart
+ // Playground carries 21 defaults and rendered "Waiting for parameters…" on
+ // every chart until the user configured each knob by hand.
+ describe("parameter defaults are applied on load (#1421)", () => {
+ function withDefaults() {
+ const d = makeDashboard(1);
+ d.layoutJson.pages[0].widgets.push({
+ id: "pw1",
+ chartType: "parameter-select",
+ connectionId: "c1",
+ query: "",
+ settings: {
+ chartOptions: {
+ parameterName: "dimension",
+ parameterType: "select",
+ defaultValue: "category",
+ },
+ },
+ } as unknown as (typeof d.layoutJson.pages)[0]["widgets"][0]);
+ return d;
+ }
+
+ function renderWithDefaults() {
+ mockUseDashboard.mockReturnValue({
+ data: withDefaults(),
+ isLoading: false,
+ isFetching: false,
+ });
+ return render();
+ }
+
+ it("seeds the store from a widget's configured default", () => {
+ renderWithDefaults();
+ const entry = useParameterStore.getState().parameters.dimension;
+ expect(entry?.value).toBe("category");
+ // Provenance matters: without this, seeding could label the value as a
+ // user selection and the assertion above would not notice.
+ expect(entry?.sourceType).toBe("default");
+ });
+
+ it("a URL parameter beats the default", () => {
+ searchParams = new URLSearchParams("param_dimension=revenue");
+ renderWithDefaults();
+ expect(useParameterStore.getState().parameters.dimension?.value).toBe(
+ "revenue",
+ );
+ });
+
+ it("a restored session value beats the default", () => {
+ // Must go through localStorage, not the store: `restoreFromDashboard`
+ // runs on mount and *replaces* the store wholesale, so anything set
+ // beforehand is wiped before the defaults effect ever runs.
+ // Shape matters: `restoreFromDashboard` drops any entry missing a string
+ // `source`, `field` or `type`, so a near-miss fixture would restore
+ // nothing and this test would "pass" against a broken implementation.
+ localStorage.setItem(
+ "nb-params:d1",
+ JSON.stringify({
+ dimension: {
+ value: "region",
+ source: "Dimension",
+ field: "dimension",
+ type: "text",
+ sourceType: "selector-widget",
+ sourceWidgetId: "pw1",
+ },
+ }),
+ );
+ renderWithDefaults();
+ expect(useParameterStore.getState().parameters.dimension?.value).toBe(
+ "region",
+ );
+ });
+
+ // The dangerous regression: re-seeding on every render would make a
+ // parameter impossible to clear — it would snap back instantly.
+ it("does not re-apply the default after the user clears it", () => {
+ const { rerender } = renderWithDefaults();
+ expect(useParameterStore.getState().parameters.dimension?.value).toBe(
+ "category",
+ );
+
+ useParameterStore.getState().clearParameter("dimension");
+
+ // A plain rerender is not enough: it reuses the same dashboard object, so
+ // `serverLayout` keeps its identity, the effect's deps never change, and
+ // the effect does not re-run — the test would pass with the ref guard
+ // deleted. Handing back a fresh object forces the effect to fire again,
+ // which is the only thing that actually exercises the guard.
+ mockUseDashboard.mockReturnValue({
+ data: withDefaults(),
+ isLoading: false,
+ isFetching: false,
+ });
+ rerender();
+
+ expect(useParameterStore.getState().parameters.dimension).toBeUndefined();
+ });
+
+ it("leaves a parameter-select with no default alone", () => {
+ const d = makeDashboard(1);
+ d.layoutJson.pages[0].widgets.push({
+ id: "pw2",
+ chartType: "parameter-select",
+ connectionId: "c1",
+ query: "",
+ settings: { chartOptions: { parameterName: "unset" } },
+ } as unknown as (typeof d.layoutJson.pages)[0]["widgets"][0]);
+ mockUseDashboard.mockReturnValue({
+ data: d,
+ isLoading: false,
+ isFetching: false,
+ });
+
+ render();
+ expect(useParameterStore.getState().parameters.unset).toBeUndefined();
+ });
+ });
+
// ── Parameters ↔ URL ────────────────────────────────────────────────
it("applies param_ values from the URL on mount", () => {
searchParams = new URLSearchParams("param_year=1999");
diff --git a/app/src/components/card-container.tsx b/app/src/components/card-container.tsx
index 673fcc34..ac936f3f 100644
--- a/app/src/components/card-container.tsx
+++ b/app/src/components/card-container.tsx
@@ -276,8 +276,7 @@ export function CardContainer({
// Resolve color scales config
const conditionalFormatting = ws.conditionalFormatting as
- | { colorScales?: ColorScaleConfig[] }
- | undefined;
+ { colorScales?: ColorScaleConfig[] } | undefined;
const colorScales = conditionalFormatting?.colorScales;
if (!chartConfig) {
@@ -293,7 +292,8 @@ export function CardContainer({
// Use preview data directly if provided
if (previewData !== undefined) {
- const validationError = chartConfig.validate?.(previewData) ?? null;
+ const validationError =
+ chartConfig.validate?.(previewData, columnMapping) ?? null;
if (validationError) {
return (
restored session > default` without any ordering
+ // machinery: the restore and URL effects above both run before the layout has
+ // loaded, so whatever they put in the store is already there by the time this
+ // can run. The ref guard is what stops a cleared parameter snapping back —
+ // without it, clearing a knob would be impossible.
+ const defaultsAppliedFor = useRef(null);
+ useEffect(() => {
+ if (!serverLayout || defaultsAppliedFor.current === id) return;
+ defaultsAppliedFor.current = id;
+
+ const defaults = extractParamDefaults(serverLayout);
+ const store = useParameterStore.getState();
+ for (const [name, value] of Object.entries(defaults)) {
+ if (store.parameters[name] !== undefined) continue;
+ store.setParameter(name, value, value, "", "text", "default", "");
+ }
+ }, [id, serverLayout]);
+
// Seeded from the URL we arrived on, so the first sync is a no-op unless it
// actually has something to strip.
const lastSyncedUrlRef = useRef(null);
@@ -803,7 +831,16 @@ export function DashboardWorkspace({
parseGroupByColumns(enableGrouping, settings.groupBy as string),
+ () =>
+ parseGroupByColumns(
+ enableGrouping,
+ // Both shapes reach here: the editor writes a comma-separated string,
+ // saved/imported layouts carry an array (#1395).
+ settings.groupBy as string | string[],
+ ),
[enableGrouping, settings.groupBy],
);
const aggregationFn = ((settings.aggregationFn as string) || "sum") as
- | "sum"
- | "mean"
- | "median"
- | "count"
- | "min"
- | "max";
+ "sum" | "mean" | "median" | "count" | "min" | "max";
const columns = useMemo((): ColumnDef, unknown>[] => {
if (!records.length) return [];
@@ -288,11 +289,7 @@ export function TableRenderer({
pageSize={(settings.pageSize as number) ?? 10}
numberFormat={
settings.numberFormat as
- | "comma"
- | "compact"
- | "percent"
- | "plain"
- | undefined
+ "comma" | "compact" | "percent" | "plain" | undefined
}
decimalPlaces={settings.decimalPlaces as number | undefined}
containerHeight={
diff --git a/app/src/lib/__tests__/parameter/apply-param-defaults.test.ts b/app/src/lib/__tests__/parameter/apply-param-defaults.test.ts
index 61d2f786..eb5e6df0 100644
--- a/app/src/lib/__tests__/parameter/apply-param-defaults.test.ts
+++ b/app/src/lib/__tests__/parameter/apply-param-defaults.test.ts
@@ -1,4 +1,7 @@
import { describe, it, expect } from "vitest";
+import { execFileSync } from "node:child_process";
+import { readFileSync } from "node:fs";
+import { join } from "node:path";
import { extractParamDefaults } from "@/lib/parameter/apply-param-defaults";
import type { DashboardLayoutV2 } from "@/lib/db/schema";
@@ -104,3 +107,72 @@ describe("extractParamDefaults", () => {
});
});
});
+
+// ---------------------------------------------------------------------------
+// #1421 — the helper below was written, unit-tested, and never called.
+// ---------------------------------------------------------------------------
+
+describe("extractParamDefaults has a production caller (#1421)", () => {
+ /**
+ * This function was correct and fully covered while doing nothing, because
+ * nothing invoked it: the editor's "Default value" field wrote into the saved
+ * layout and was read only by this test file. The seeded Chart Playground
+ * carries 21 defaults and showed "Waiting for parameters…" on every chart.
+ *
+ * A unit test proving a function works is not evidence that anything calls
+ * it. This is the third instance of that shape — #1388 (`extractNoSyncParams`)
+ * and #1234 (the audit trail) were the first two.
+ *
+ * Deliberately narrow. The general form — "any `lib/` export reachable only
+ * from `__tests__` fails the build" — was measured at ~69 current matches,
+ * the great majority legitimate (`_reset*` test hooks, Zod fragments composed
+ * in-file, Drizzle enums). Shipping that would mean shipping an allowlist
+ * bigger than the signal, so it is filed separately as a tooling change.
+ */
+ it("is imported and called by non-test source", () => {
+ const appSrc = join(__dirname, "../../..");
+ let matched: string[];
+ try {
+ matched = execFileSync(
+ "grep",
+ [
+ "-rl",
+ "extractParamDefaults",
+ appSrc,
+ "--include=*.ts",
+ "--include=*.tsx",
+ ],
+ { encoding: "utf8" },
+ )
+ .trim()
+ .split("\n")
+ .filter(Boolean);
+ } catch {
+ // grep exits 1 on no matches, which would otherwise throw before the
+ // assertion and hide the message explaining what broke.
+ matched = [];
+ }
+
+ // A raw text match is not enough: this file's own explanatory comment names
+ // the helper, so a comment alone would satisfy it even with the import and
+ // the call deleted. Strip comments, then require both.
+ const callers = matched
+ .filter((f) => !f.includes("apply-param-defaults.ts"))
+ .filter((f) => !f.includes("__tests__") && !f.includes(".test."))
+ .filter((f) => {
+ const code = readFileSync(f, "utf8")
+ .replace(/\/\*[\s\S]*?\*\//g, "")
+ .replace(/^\s*\/\/.*$/gm, "");
+ const imported = /import\s*\{[^}]*\bextractParamDefaults\b[^}]*\}/.test(
+ code,
+ );
+ const called = /\bextractParamDefaults\s*\(/.test(code);
+ return imported && called;
+ });
+
+ expect(
+ callers,
+ "extractParamDefaults has no production caller — the Default value field would silently do nothing",
+ ).not.toEqual([]);
+ });
+});
diff --git a/app/src/lib/__tests__/query/data-transforms.test.ts b/app/src/lib/__tests__/query/data-transforms.test.ts
index 8ba719c4..017bcd4d 100644
--- a/app/src/lib/__tests__/query/data-transforms.test.ts
+++ b/app/src/lib/__tests__/query/data-transforms.test.ts
@@ -199,6 +199,73 @@ describe("applyTransforms", () => {
expect(eng?.salary_min).toBe(110000);
expect(eng?.salary_max).toBe(130000);
});
+
+ // #1414 — `count` used to count rows while every other aggregation skipped
+ // nulls, so `sum / count` disagreed with `avg` on any column a LEFT JOIN
+ // had left holes in. It now counts non-null values, i.e. SQL's COUNT(col).
+ describe("count over nulls (#1414)", () => {
+ const withNulls = [
+ { region: "EU", revenue: 100 },
+ { region: "EU", revenue: 200 },
+ { region: "EU", revenue: null },
+ ];
+
+ const groupByRegion = (
+ fns: Array<"count" | "sum" | "avg">,
+ ): Transform[] => [
+ {
+ type: "groupBy",
+ column: "region",
+ aggregations: fns.map((fn) => ({ column: "revenue", fn })),
+ },
+ ];
+
+ it("counts non-null values, not rows", () => {
+ const [eu] = applyTransforms(withNulls, groupByRegion(["count"]));
+ expect(eu.revenue_count).toBe(2);
+ });
+
+ it("holds the invariant sum / count === avg for every group", () => {
+ const result = applyTransforms(
+ [
+ ...withNulls,
+ { region: "US", revenue: 50 },
+ { region: "US", revenue: null },
+ ],
+ groupByRegion(["count", "sum", "avg"]),
+ );
+ expect(result).toHaveLength(2);
+ for (const group of result) {
+ const count = group.revenue_count as number;
+ expect(count).toBeGreaterThan(0);
+ expect((group.revenue_sum as number) / count).toBe(group.revenue_avg);
+ }
+ });
+
+ it("yields count 0 for an entirely null column, not the group size", () => {
+ const [eu] = applyTransforms(
+ [
+ { region: "EU", revenue: null },
+ { region: "EU", revenue: null },
+ ],
+ groupByRegion(["count"]),
+ );
+ expect(eu.revenue_count).toBe(0);
+ });
+
+ it("counts non-numeric non-null values but excludes them from sum and avg", () => {
+ const [eu] = applyTransforms(
+ [
+ { region: "EU", revenue: 100 },
+ { region: "EU", revenue: "N/A" },
+ ],
+ groupByRegion(["count", "sum", "avg"]),
+ );
+ expect(eu.revenue_count).toBe(2);
+ expect(eu.revenue_sum).toBe(100);
+ expect(eu.revenue_avg).toBe(100);
+ });
+ });
});
describe("calculatedColumn", () => {
diff --git a/app/src/lib/__tests__/widget/table-utils.test.ts b/app/src/lib/__tests__/widget/table-utils.test.ts
index e002e7c7..3f6ce4d6 100644
--- a/app/src/lib/__tests__/widget/table-utils.test.ts
+++ b/app/src/lib/__tests__/widget/table-utils.test.ts
@@ -47,4 +47,48 @@ describe("parseGroupByColumns", () => {
).toBeUndefined();
expect(parseGroupByColumns(true, 123 as unknown as string)).toBeUndefined();
});
+
+ // #1395 — the editor writes a comma-separated string, but seeded layouts,
+ // imports and NeoDash conversions carry an array. `typeof groupBy === "string"
+ // ? groupBy : ""` turned the array into "" and grouping was dropped with no
+ // error, so individual rows read as group totals. Three seeded Chart
+ // Reference tiles hold `groupBy: ["region"]` and rendered flat.
+ describe("array form (#1395)", () => {
+ it("accepts a single-element array", () => {
+ expect(parseGroupByColumns(true, ["region"])).toEqual(["region"]);
+ });
+
+ it("preserves order, which is the nesting hierarchy", () => {
+ expect(parseGroupByColumns(true, ["region", "city"])).toEqual([
+ "region",
+ "city",
+ ]);
+ });
+
+ it("returns undefined for an empty array", () => {
+ expect(parseGroupByColumns(true, [])).toBeUndefined();
+ });
+
+ it("returns undefined for an array when grouping is disabled", () => {
+ expect(parseGroupByColumns(false, ["region"])).toBeUndefined();
+ });
+
+ it("trims and drops blank entries", () => {
+ expect(parseGroupByColumns(true, [" region ", "", " ", "city"])).toEqual(
+ ["region", "city"],
+ );
+ });
+
+ it("ignores non-string entries rather than stringifying them", () => {
+ expect(
+ parseGroupByColumns(true, ["region", 7, null] as unknown as string[]),
+ ).toEqual(["region"]);
+ });
+
+ it("returns undefined when an array holds nothing usable", () => {
+ expect(
+ parseGroupByColumns(true, [null, ""] as unknown as string[]),
+ ).toBeUndefined();
+ });
+ });
});
diff --git a/app/src/lib/plugin/__tests__/chart-option-forwarding.test.ts b/app/src/lib/plugin/__tests__/chart-option-forwarding.test.ts
new file mode 100644
index 00000000..fe83b296
--- /dev/null
+++ b/app/src/lib/plugin/__tests__/chart-option-forwarding.test.ts
@@ -0,0 +1,149 @@
+import { describe, it, expect } from "vitest";
+import { readFileSync, existsSync, readdirSync } from "node:fs";
+import { join } from "node:path";
+
+/**
+ * Ratchet: every option offered in the widget editor must be read by the
+ * plugin that advertises it (#1397).
+ *
+ * Two options — `trendEnabled` (single-value) and `thresholdZones` (gauge) —
+ * shipped fully built at both ends and inert in between: present in the editor,
+ * implemented in the component library, and never forwarded by the plugin.
+ * Setting them did nothing, with no error, and the seeded reference dashboard
+ * shipped tiles demonstrating both. A control that lies is worse than a missing
+ * one.
+ *
+ * **Why source text and not the Zod schema.** #1397 proposed asserting that
+ * every option key exists in the plugin's `settingsSchema`. That would not have
+ * caught either bug: these schemas end in `.passthrough()`, so an unknown key
+ * survives the parse untouched — `gaugeSettingsSchema.parse({thresholdZones})`
+ * returns it intact. The value died at the plugin's explicit prop mapping,
+ * a seam the schema never sees. Conversely a key can be in the schema and still
+ * be dropped there. So the check has to be "does the plugin actually read this",
+ * and the cheapest honest proxy is a reference in its source.
+ *
+ * **Why not import `getChartOptions`.** It lives in `@neoboard/components`,
+ * whose barrel pulls in `@neo4j-nvl` — a browser-only WebGL dependency that
+ * cannot load in the node test environment. Reading the option definitions from
+ * source keeps this test fast and dependency-free; the shape it parses is
+ * guarded by `finds option keys for every chart type` below, so a refactor that
+ * changed it would fail loudly rather than silently pass.
+ *
+ * This catches "advertised but never wired". It cannot catch "wired but
+ * misused" — that needs a per-option behavioural test.
+ */
+
+const OPTIONS_DIR = join(
+ __dirname,
+ "../../../../../component/src/components/composed/chart-options",
+);
+const PLUGIN_DIR = join(__dirname, "../../../plugins");
+
+/** Files in chart-options/ that describe no chart type. */
+const NON_CHART_FILES = new Set(["index", "shared", "validate-iframe-url"]);
+
+function chartTypesWithOptions(): string[] {
+ return readdirSync(OPTIONS_DIR)
+ .filter((f) => f.endsWith(".ts") && !f.endsWith(".d.ts"))
+ .map((f) => f.slice(0, -3))
+ .filter((t) => !NON_CHART_FILES.has(t))
+ .filter((t) => existsSync(join(PLUGIN_DIR, t)))
+ .sort();
+}
+
+function optionKeys(type: string): string[] {
+ const src = readFileSync(join(OPTIONS_DIR, `${type}.ts`), "utf8");
+ return [...src.matchAll(/^\s*key:\s*"([^"]+)"/gm)].map((m) => m[1]);
+}
+
+const APP_SRC = join(__dirname, "../../..");
+
+function readIfPresent(path: string): string {
+ return existsSync(path) ? readFileSync(path, "utf8") : "";
+}
+
+/**
+ * A plugin's source, plus any `@/components/*` module it renders.
+ *
+ * Several plugins are thin wrappers that hand their settings straight to a
+ * shared renderer — `table` → `TableRenderer`, `form` → `FormWidgetRenderer` —
+ * and those renderers are where the options are actually read. Without
+ * following that one hop, every such plugin reports its entire option list as
+ * unforwarded, which is how this check first reported 29 problems where there
+ * were far fewer.
+ */
+function pluginSource(type: string): string {
+ const own = ["component.tsx", "settings.ts", "transform.ts"]
+ .map((f) => join(PLUGIN_DIR, type, f))
+ .map(readIfPresent)
+ .join("\n");
+
+ const delegated = [...own.matchAll(/from\s+"@\/components\/([\w./-]+)"/g)]
+ .flatMap((m) => [`${m[1]}.tsx`, `${m[1]}.ts`])
+ .map((rel) => join(APP_SRC, "components", rel))
+ .map(readIfPresent)
+ .join("\n");
+
+ return `${own}\n${delegated}`;
+}
+
+/**
+ * Options that are still not forwarded. Every entry is a live instance of the
+ * #1397 bug and is tracked in a follow-up issue. This list may only shrink —
+ * adding to it means shipping another control that lies.
+ *
+ * `parameter-select` is a different case and is listed for a different reason:
+ * its options are consumed by dashboard-level code (`lib/shared/url-params.ts`,
+ * `lib/parameter/apply-param-defaults.ts`) rather than by the plugin's render
+ * path, so this check cannot see them. `syncToUrl` genuinely works (#1388);
+ * `defaultValue` genuinely does not, because `extractParamDefaults` has zero
+ * callers — which is #1421, not this issue. Note the limit that exposes: a key
+ * referenced only from dead code would satisfy a text search. This ratchet
+ * catches "advertised but never wired", not "wired to nothing".
+ */
+const KNOWN_UNFORWARDED: Record = {
+ graph: ["nodeSize", "showRelationshipLabels", "physics"],
+ json: ["fontSize", "showCopyButton", "theme"],
+ line: ["samplingThreshold", "samplingMethod"],
+ map: ["markerSize", "showPopup"],
+ "parameter-select": ["defaultValue", "syncToUrl"],
+};
+
+describe("chart option forwarding ratchet (#1397)", () => {
+ const types = chartTypesWithOptions();
+
+ it("finds chart types to check", () => {
+ expect(types.length).toBeGreaterThan(5);
+ });
+
+ it("finds option keys for every chart type", () => {
+ // Guards the source-parsing above: if the option-definition shape ever
+ // changes, every type would yield zero keys and the ratchet would pass
+ // vacuously. Fail loudly instead.
+ const empty = types.filter((t) => optionKeys(t).length === 0);
+ expect(empty).toEqual([]);
+ });
+
+ it.each(types)("%s reads every option it advertises", (type) => {
+ const src = pluginSource(type);
+ const allowed = new Set(KNOWN_UNFORWARDED[type] ?? []);
+ const unforwarded = optionKeys(type).filter(
+ (k) => !allowed.has(k) && !new RegExp(`\\b${k}\\b`).test(src),
+ );
+ expect(unforwarded).toEqual([]);
+ });
+
+ it("the allowlist names only options that are genuinely unforwarded", () => {
+ // Stops the list rotting: once an entry is fixed it must be removed, so the
+ // ratchet keeps tightening instead of quietly permitting a working key.
+ for (const [type, keys] of Object.entries(KNOWN_UNFORWARDED)) {
+ const src = pluginSource(type);
+ for (const key of keys) {
+ expect(
+ new RegExp(`\\b${key}\\b`).test(src),
+ `${type}.${key} is allowlisted but is now read — remove it`,
+ ).toBe(false);
+ }
+ }
+ });
+});
diff --git a/app/src/lib/plugin/chart-plugin-registry.ts b/app/src/lib/plugin/chart-plugin-registry.ts
index 0ab97713..a2a5ee00 100644
--- a/app/src/lib/plugin/chart-plugin-registry.ts
+++ b/app/src/lib/plugin/chart-plugin-registry.ts
@@ -95,8 +95,14 @@ export interface ChartPluginConfig {
/**
* Validates raw data shape. Returns an error string when data is present
* but malformed. Returns null for valid or empty data (empty = "No data" state).
+ *
+ * Receives the same mapping as `transformWithMapping` so a validator can
+ * check the columns that will actually be plotted. Without it, a validator
+ * has to assume positional defaults and would wrongly reject a result whose
+ * text columns the user had already mapped away (#1400).
*/
- validate?: (data: unknown) => string | null;
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- ColumnMapping lives in component package
+ validate?: (data: unknown, mapping?: any) => string | null;
/** Chart-specific options shown in the Chart Options panel. */
options?: ChartOptionDef[];
/** Example + column expectations shown to users when they pick this chart. */
diff --git a/app/src/lib/query/data-transforms.ts b/app/src/lib/query/data-transforms.ts
index 016217e7..5611f1f8 100644
--- a/app/src/lib/query/data-transforms.ts
+++ b/app/src/lib/query/data-transforms.ts
@@ -5,14 +5,7 @@
type Row = Record;
export type FilterOperator =
- | ">"
- | ">="
- | "<"
- | "<="
- | "=="
- | "!="
- | "contains"
- | "not_contains";
+ ">" | ">=" | "<" | "<=" | "==" | "!=" | "contains" | "not_contains";
export interface FilterTransform {
type: "filter";
@@ -195,7 +188,10 @@ function applyGroupBy(data: Row[], t: GroupByTransform): Row[] {
switch (agg.fn) {
case "count":
- aggregated[outKey] = rows.length;
+ // SQL's COUNT(col), not COUNT(*) — the output key is named for the
+ // column, and every other aggregation here already skips nulls.
+ // Counting rows made `sum / count` disagree with `avg` (#1414).
+ aggregated[outKey] = values.length;
break;
case "sum":
aggregated[outKey] = nums.reduce((a, b) => a + b, 0);
diff --git a/app/src/lib/widget/table-utils.ts b/app/src/lib/widget/table-utils.ts
index ca692422..2a74ab27 100644
--- a/app/src/lib/widget/table-utils.ts
+++ b/app/src/lib/widget/table-utils.ts
@@ -1,16 +1,37 @@
/**
- * Parses the comma-separated groupBy string into an array of column IDs.
+ * Parses the widget's `groupBy` setting into an array of column IDs.
* Returns undefined if grouping is disabled or no valid columns are provided.
+ *
+ * Accepts **both** shapes, because both occur in the wild (#1395):
+ *
+ * - a comma-separated string — what the widget editor writes, since the
+ * `column-multi-select` control emits `vals.join(",")`
+ * - an array of column ids — what seeded layouts, imported dashboards and
+ * NeoDash conversions carry
+ *
+ * It previously accepted only the string, and `typeof groupBy === "string" ?
+ * groupBy : ""` turned an array into an empty string. Grouping was then dropped
+ * with no group rows, no aggregates and no error — so individual rows read as
+ * group totals, a wrong answer the user had every reason to believe. Three
+ * seeded Chart Reference tiles hold `groupBy: ["region"]` and rendered flat.
+ *
+ * Order is significant: it is the nesting hierarchy.
*/
export function parseGroupByColumns(
enableGrouping: boolean,
- groupBy: string,
+ groupBy: string | string[],
): string[] | undefined {
if (!enableGrouping) return undefined;
- const raw = typeof groupBy === "string" ? groupBy : "";
- if (!raw.trim()) return undefined;
- return raw
- .split(",")
- .map((s) => s.trim())
- .filter(Boolean);
+
+ const parts =
+ typeof groupBy === "string"
+ ? groupBy.split(",")
+ : Array.isArray(groupBy)
+ ? // Non-string entries are dropped rather than stringified: a stray
+ // number would otherwise become a column id matching nothing.
+ groupBy.filter((c): c is string => typeof c === "string")
+ : [];
+
+ const columns = parts.map((s) => s.trim()).filter(Boolean);
+ return columns.length ? columns : undefined;
}
diff --git a/app/src/plugins/__tests__/option-forwarding.test.tsx b/app/src/plugins/__tests__/option-forwarding.test.tsx
new file mode 100644
index 00000000..1b610e01
--- /dev/null
+++ b/app/src/plugins/__tests__/option-forwarding.test.tsx
@@ -0,0 +1,127 @@
+import { describe, it, expect, vi } from "vitest";
+import { render, screen } from "@testing-library/react";
+import { gaugePlugin } from "../gauge";
+import { singleValuePlugin } from "../single-value";
+import { transformToValueData } from "../single-value/transform";
+
+/**
+ * #1397 — `thresholdZones` and `trendEnabled` were advertised in the widget
+ * editor, implemented in the component library, and never handed from the
+ * plugin to the chart. These assert the exact seam that was broken: the props
+ * the plugin actually passes.
+ */
+
+vi.mock("next/dynamic", () => ({
+ default: () => {
+ const Stub = (props: Record) => (
+
+ );
+ Stub.displayName = "ChartStub";
+ return Stub;
+ },
+}));
+
+vi.mock("@neoboard/components", () => ({
+ Skeleton: () => null,
+ getChartOptions: () => [],
+}));
+
+const GaugeComponent = gaugePlugin.component;
+const SingleValueComponent = singleValuePlugin.component;
+
+describe("gauge thresholdZones forwarding (#1397)", () => {
+ const zones =
+ '[{"value":30,"color":"#ef4444"},{"value":100,"color":"#22c55e"}]';
+
+ it("passes thresholdZones through to the chart", () => {
+ render();
+ expect(
+ screen.getByTestId("chart").getAttribute("data-threshold-zones"),
+ ).toBe(zones);
+ });
+
+ it("passes nothing when the option is unset", () => {
+ render();
+ expect(
+ screen.getByTestId("chart").getAttribute("data-threshold-zones"),
+ ).toBe("");
+ });
+});
+
+describe("single-value trendEnabled forwarding (#1397)", () => {
+ /** The shape the editor's own instruction produces: two rows, label + value. */
+ const twoRows = [
+ { label: "2026-03", value: 100 },
+ { label: "2026-02", value: 80 },
+ ];
+
+ it("renders an upward trend when enabled and a previous row exists", () => {
+ render(
+ ,
+ );
+ const el = screen.getByTestId("chart");
+ expect(el.getAttribute("data-trend-direction")).toBe("up");
+ expect(el.getAttribute("data-trend-label")).toBe("25.0%");
+ });
+
+ it("renders a downward trend when the value fell", () => {
+ render(
+ ,
+ );
+ expect(
+ screen.getByTestId("chart").getAttribute("data-trend-direction"),
+ ).toBe("down");
+ });
+
+ it("renders no trend when the option is off", () => {
+ render(
+ ,
+ );
+ expect(
+ screen.getByTestId("chart").getAttribute("data-trend-direction"),
+ ).toBe("");
+ });
+
+ it("renders no trend when there is only one row to compare", () => {
+ render(
+ ,
+ );
+ expect(
+ screen.getByTestId("chart").getAttribute("data-trend-direction"),
+ ).toBe("");
+ });
+
+ // The headline symptom of #1397: following the editor's "requires 2 rows"
+ // instruction rendered the date column as the KPI, e.g. `$2026-03`.
+ it("shows the numeric column as the headline value, not the label", () => {
+ render(
+ ,
+ );
+ expect(screen.getByTestId("chart").getAttribute("data-value")).toBe("100");
+ });
+});
diff --git a/app/src/plugins/bar/transform.ts b/app/src/plugins/bar/transform.ts
index e0b50603..d80b8639 100644
--- a/app/src/plugins/bar/transform.ts
+++ b/app/src/plugins/bar/transform.ts
@@ -9,6 +9,7 @@ import {
normalizeValue,
collectAllKeys,
toSeriesNumber,
+ validateNumericValueColumns,
type ColumnMapping,
} from "../transforms/shared-utils";
@@ -48,11 +49,14 @@ export function transformToBarData(
* Validates raw data shape for bar charts.
* Returns null if valid or empty, error string if rows exist but shape is wrong.
*/
-export function validateBarData(data: unknown): string | null {
+export function validateBarData(
+ data: unknown,
+ mapping?: ColumnMapping,
+): string | null {
const records = toRecords(data);
if (!records.length) return null;
const cols = collectAllKeys(records).length;
if (cols < 2)
return `Bar chart requires at least 2 columns: first column for category labels (x-axis) and one or more columns for numeric values (y-axis). Your query returned only ${cols} column(s). Example: \`SELECT category, count FROM ...\``;
- return null;
+ return validateNumericValueColumns(records, "Bar chart", mapping);
}
diff --git a/app/src/plugins/gauge/component.tsx b/app/src/plugins/gauge/component.tsx
index 04538eb4..9380c09b 100644
--- a/app/src/plugins/gauge/component.tsx
+++ b/app/src/plugins/gauge/component.tsx
@@ -38,6 +38,7 @@ function GaugePluginComponent({
startAngle={settings.startAngle}
endAngle={settings.endAngle}
colorPalette={settings.colorPalette}
+ thresholdZones={settings.thresholdZones}
stylingRules={stylingRules as StylingRule[] | undefined}
paramValues={paramValues}
colorblindMode={settings.colorblindMode}
diff --git a/app/src/plugins/gauge/settings.ts b/app/src/plugins/gauge/settings.ts
index 635071d3..113f5b99 100644
--- a/app/src/plugins/gauge/settings.ts
+++ b/app/src/plugins/gauge/settings.ts
@@ -13,6 +13,10 @@ export const gaugeSettingsSchema = z
endAngle: z.coerce.number().default(-45),
colorPalette: z.string().optional(),
colorblindMode: z.boolean().default(false),
+ // JSON array of {value, color} bands, parsed by the chart. Declared here
+ // for typing — `.passthrough()` never stripped it; the plugin simply did
+ // not forward it (#1397).
+ thresholdZones: z.string().optional(),
})
.passthrough();
diff --git a/app/src/plugins/line/transform.ts b/app/src/plugins/line/transform.ts
index 6c007203..ae8d6aa5 100644
--- a/app/src/plugins/line/transform.ts
+++ b/app/src/plugins/line/transform.ts
@@ -9,6 +9,7 @@ import {
normalizeValue,
collectAllKeys,
toSeriesNumber,
+ validateNumericValueColumns,
type ColumnMapping,
} from "../transforms/shared-utils";
@@ -47,11 +48,14 @@ export function transformToLineData(
* Validates raw data shape for line charts.
* Returns null if valid or empty, error string if rows exist but shape is wrong.
*/
-export function validateLineData(data: unknown): string | null {
+export function validateLineData(
+ data: unknown,
+ mapping?: ColumnMapping,
+): string | null {
const records = toRecords(data);
if (!records.length) return null;
const cols = collectAllKeys(records).length;
if (cols < 2)
return `Line chart requires at least 2 columns: first column for x-axis values (dates, numbers, or labels) and one or more columns for numeric series. Your query returned only ${cols} column(s). Example: \`SELECT date, revenue FROM ...\``;
- return null;
+ return validateNumericValueColumns(records, "Line chart", mapping);
}
diff --git a/app/src/plugins/single-value/component.tsx b/app/src/plugins/single-value/component.tsx
index 386b2e5e..c50a2cb5 100644
--- a/app/src/plugins/single-value/component.tsx
+++ b/app/src/plugins/single-value/component.tsx
@@ -11,7 +11,11 @@ import { Skeleton, getChartOptions } from "@neoboard/components";
import type { StylingRule } from "@neoboard/components";
import { normalizeValue } from "@/lib/shared/normalize-value";
import { defineChartPlugin } from "../registry";
-import { transformToValueData, validateValueData } from "./transform";
+import {
+ transformToValueData,
+ validateValueData,
+ type SingleValueData,
+} from "./transform";
import { type PluginProps } from "../utils";
import { singleValueSettingsSchema } from "./settings";
import { safeParseSettings } from "@/lib/plugin/safe-parse-settings";
@@ -24,6 +28,34 @@ const SingleValueChart = dynamic(
{ ssr: false, loading: () => },
);
+/**
+ * Percentage change against the previous period, or undefined when the trend is
+ * off or there is nothing to compare. A previous value of 0 yields a direction
+ * without a percentage — dividing by it would render `Infinity%`.
+ */
+function buildTrend(
+ enabled: boolean,
+ value: string | number,
+ previous: number | undefined,
+): { direction: "up" | "down" | "neutral"; label?: string } | undefined {
+ if (!enabled || typeof value !== "number" || previous === undefined) {
+ return undefined;
+ }
+ const delta = value - previous;
+ const direction = delta > 0 ? "up" : delta < 0 ? "down" : "neutral";
+ if (previous === 0) {
+ return {
+ direction,
+ label: direction === "neutral" ? "no change" : undefined,
+ };
+ }
+ const pct = Math.abs(delta / previous) * 100;
+ return {
+ direction,
+ label: direction === "neutral" ? "no change" : `${pct.toFixed(1)}%`,
+ };
+}
+
function SingleValuePluginComponent({
data,
settings: raw,
@@ -35,11 +67,24 @@ function SingleValuePluginComponent({
raw,
"single-value",
);
- const rawData = data ?? 0;
- const val =
- typeof rawData === "number" || typeof rawData === "string"
- ? rawData
- : (normalizeValue(rawData) ?? String(rawData));
+ // `transform` yields { value, previous }; older callers may still hand over a
+ // bare scalar, so both shapes are accepted.
+ const parsed: SingleValueData =
+ data !== null && typeof data === "object" && "value" in data
+ ? (data as SingleValueData)
+ : { value: (normalizeValue(data) ?? 0) as string | number };
+
+ const val = parsed.value;
+
+ // The chart takes a computed { direction, label }, not a boolean — so the
+ // option could never have been forwarded as-is. It needs the previous row,
+ // which is why the transform now carries it (#1397).
+ const trend = buildTrend(
+ settings.trendEnabled === true,
+ val,
+ parsed.previous,
+ );
+
return (
diff --git a/app/src/plugins/single-value/settings.ts b/app/src/plugins/single-value/settings.ts
index f3bce966..743a81bf 100644
--- a/app/src/plugins/single-value/settings.ts
+++ b/app/src/plugins/single-value/settings.ts
@@ -13,6 +13,9 @@ export const singleValueSettingsSchema = z
.enum(["plain", "comma", "compact", "percent"])
.default("plain"),
decimalPlaces: z.coerce.number().optional(),
+ // Declared for typing — `.passthrough()` never stripped it; the plugin
+ // simply did not forward it (#1397).
+ trendEnabled: z.boolean().optional(),
})
.passthrough();
diff --git a/app/src/plugins/single-value/transform.ts b/app/src/plugins/single-value/transform.ts
index 098e8704..d05c7d49 100644
--- a/app/src/plugins/single-value/transform.ts
+++ b/app/src/plugins/single-value/transform.ts
@@ -4,18 +4,59 @@
import { toRecords, normalizeValue } from "../transforms/shared-utils";
+export interface SingleValueData {
+ /** The headline value. */
+ value: string | number;
+ /** Second row's value in the same column, when numeric — drives the trend. */
+ previous?: number;
+}
+
+/** Coerce a cell to a finite number, or null. */
+function toNumber(raw: unknown): number | null {
+ const v = normalizeValue(raw);
+ if (typeof v === "number") return Number.isFinite(v) ? v : null;
+ if (typeof v === "string" && v.trim() !== "") {
+ const n = Number(v);
+ return Number.isFinite(n) ? n : null;
+ }
+ return null;
+}
+
/**
* Transform to a single value for SingleValueChart.
+ *
+ * Picks the first **numeric** column rather than the positionally first one
+ * (#1397). The editor tells users the trend indicator "requires 2 rows in the
+ * query result", so the natural query is `label, value` — and taking column one
+ * positionally rendered the *label* as the headline metric, e.g. a KPI reading
+ * `$2026-03`. A non-numeric column is still returned when the result has no
+ * numeric column at all, which is the legitimate "status text" case.
+ *
+ * The second row's value in the same column is exposed as `previous` so the
+ * plugin can compute a trend; the scalar alone cannot express one.
*/
-export function transformToValueData(data: unknown): unknown {
+export function transformToValueData(data: unknown): SingleValueData {
const records = toRecords(data);
if (records.length > 0) {
const first = records[0];
- const values = Object.values(first);
- return normalizeValue(values[0]) ?? 0;
+ const keys = Object.keys(first);
+ const numericKey = keys.find((k) => toNumber(first[k]) !== null);
+ const key = numericKey ?? keys[0];
+
+ const raw = key === undefined ? undefined : first[key];
+ const value =
+ (numericKey ? toNumber(raw) : (normalizeValue(raw) ?? 0)) ?? 0;
+
+ const previous =
+ records.length > 1 && key !== undefined
+ ? (toNumber(records[1][key]) ?? undefined)
+ : undefined;
+
+ return { value: value as string | number, previous };
}
- if (typeof data === "number" || typeof data === "string") return data;
- return 0;
+ if (typeof data === "number" || typeof data === "string")
+ return { value: data };
+ return { value: 0 };
}
/**
diff --git a/app/src/plugins/transforms/__tests__/bar.test.ts b/app/src/plugins/transforms/__tests__/bar.test.ts
index 9d432a7a..25a6c33e 100644
--- a/app/src/plugins/transforms/__tests__/bar.test.ts
+++ b/app/src/plugins/transforms/__tests__/bar.test.ts
@@ -107,3 +107,34 @@ describe("validateBarData", () => {
expect(err).toContain("1 column");
});
});
+
+// #1400 — the reference dashboard itself demonstrated two stackMode options
+// with this query shape, which is how easy it is to fall into.
+describe("validateBarData — long format (#1400)", () => {
+ const longFormat = [
+ { category: "Apparel", series: "delivered", revenue: 100 },
+ { category: "Apparel", series: "shipped", revenue: 50 },
+ { category: "Home", series: "delivered", revenue: 80 },
+ ];
+
+ it("rejects a long-format result naming the offending column", () => {
+ const err = validateBarData(longFormat);
+ expect(err).not.toBeNull();
+ expect(err).toContain("series");
+ });
+
+ it("accepts the wide-format equivalent", () => {
+ expect(
+ validateBarData([
+ { category: "Apparel", delivered: 100, shipped: 50 },
+ { category: "Home", delivered: 80, shipped: 20 },
+ ]),
+ ).toBeNull();
+ });
+
+ it("accepts long format once the value column is mapped explicitly", () => {
+ expect(
+ validateBarData(longFormat, { xAxis: "category", yAxis: ["revenue"] }),
+ ).toBeNull();
+ });
+});
diff --git a/app/src/plugins/transforms/__tests__/line.test.ts b/app/src/plugins/transforms/__tests__/line.test.ts
index 497ee203..24840de1 100644
--- a/app/src/plugins/transforms/__tests__/line.test.ts
+++ b/app/src/plugins/transforms/__tests__/line.test.ts
@@ -94,3 +94,35 @@ describe("validateLineData", () => {
expect(err).toContain("Line chart");
});
});
+
+// #1400 — line was the worse of the two: one revenue line drawn across
+// duplicated x values, interleaving delivered -> shipped -> delivered, which
+// reads as a violently spiky time series but is pure artifact.
+describe("validateLineData — long format (#1400)", () => {
+ const longFormat = [
+ { week: "2026-01-05", series: "delivered", revenue: 100 },
+ { week: "2026-01-05", series: "shipped", revenue: 50 },
+ { week: "2026-01-12", series: "delivered", revenue: 80 },
+ ];
+
+ it("rejects a long-format result naming the offending column", () => {
+ const err = validateLineData(longFormat);
+ expect(err).not.toBeNull();
+ expect(err).toContain("series");
+ });
+
+ it("accepts the wide-format equivalent", () => {
+ expect(
+ validateLineData([
+ { week: "2026-01-05", delivered: 100, shipped: 50 },
+ { week: "2026-01-12", delivered: 80, shipped: 20 },
+ ]),
+ ).toBeNull();
+ });
+
+ it("accepts long format once the value column is mapped explicitly", () => {
+ expect(
+ validateLineData(longFormat, { xAxis: "week", yAxis: ["revenue"] }),
+ ).toBeNull();
+ });
+});
diff --git a/app/src/plugins/transforms/__tests__/remaining.test.ts b/app/src/plugins/transforms/__tests__/remaining.test.ts
index 21eba5ff..6253b0ff 100644
--- a/app/src/plugins/transforms/__tests__/remaining.test.ts
+++ b/app/src/plugins/transforms/__tests__/remaining.test.ts
@@ -38,20 +38,68 @@ describe("transformToTableData", () => {
describe("transformToValueData", () => {
it("extracts the first value from the first record", () => {
- expect(transformToValueData([{ count: 42 }])).toBe(42);
+ expect(transformToValueData([{ count: 42 }]).value).toBe(42);
});
it("passes through raw number", () => {
- expect(transformToValueData(7)).toBe(7);
+ expect(transformToValueData(7).value).toBe(7);
});
it("returns 0 for null/undefined", () => {
- expect(transformToValueData(null)).toBe(0);
- expect(transformToValueData(undefined)).toBe(0);
+ expect(transformToValueData(null).value).toBe(0);
+ expect(transformToValueData(undefined).value).toBe(0);
});
it("returns 0 for empty array", () => {
- expect(transformToValueData([])).toBe(0);
+ expect(transformToValueData([]).value).toBe(0);
+ });
+
+ // #1397 — the editor tells you trend "requires 2 rows in the query result",
+ // so the reference tile is queried as `label, value`. Taking the first column
+ // positionally then rendered the *date* as the headline metric: `$2026-03`.
+ describe("column selection (#1397)", () => {
+ it("picks the numeric column, not the positionally first one", () => {
+ expect(
+ transformToValueData([{ label: "2026-03", value: 48210.5 }]).value,
+ ).toBe(48210.5);
+ });
+
+ it("still returns a lone non-numeric column when there is no numeric one", () => {
+ expect(transformToValueData([{ status: "healthy" }]).value).toBe(
+ "healthy",
+ );
+ });
+
+ it("prefers the first numeric column when several are numeric", () => {
+ expect(transformToValueData([{ a: 1, b: 2 }]).value).toBe(1);
+ });
+
+ it("treats a numeric string as the numeric column", () => {
+ expect(
+ transformToValueData([{ label: "2026-03", value: "48210.5" }]).value,
+ ).toBe(48210.5);
+ });
+ });
+
+ describe("previous value for trend (#1397)", () => {
+ it("exposes the second row's value as `previous`", () => {
+ const out = transformToValueData([
+ { label: "2026-03", value: 100 },
+ { label: "2026-02", value: 80 },
+ ]);
+ expect(out.value).toBe(100);
+ expect(out.previous).toBe(80);
+ });
+
+ it("leaves `previous` undefined for a single row", () => {
+ expect(transformToValueData([{ value: 100 }]).previous).toBeUndefined();
+ });
+
+ it("leaves `previous` undefined when the second row is non-numeric", () => {
+ expect(
+ transformToValueData([{ value: 100 }, { value: "n/a" }]).previous,
+ ).toBeUndefined();
+ });
});
});
diff --git a/app/src/plugins/transforms/__tests__/shared.test.ts b/app/src/plugins/transforms/__tests__/shared.test.ts
index 20a2d1d0..2f31f546 100644
--- a/app/src/plugins/transforms/__tests__/shared.test.ts
+++ b/app/src/plugins/transforms/__tests__/shared.test.ts
@@ -5,6 +5,7 @@ import {
resolveValueKeys,
collectAllKeys,
toSeriesNumber,
+ validateNumericValueColumns,
} from "../shared-utils";
describe("toRecords", () => {
@@ -126,3 +127,96 @@ describe("toSeriesNumber", () => {
expect(toSeriesNumber(Number.NaN)).toBeNull();
});
});
+
+// ---------------------------------------------------------------------------
+// #1400 — long-format rejection
+// ---------------------------------------------------------------------------
+
+describe("validateNumericValueColumns (#1400)", () => {
+ // The natural shape of `GROUP BY a, b`. Every non-label column was treated
+ // as a value series, so `series` became a series of its own whose cells all
+ // coerced to null — a ghost legend entry, duplicated x labels, and a chart
+ // that looked like data.
+ const longFormat = [
+ { category: "Apparel", series: "delivered", revenue: 100 },
+ { category: "Apparel", series: "shipped", revenue: 50 },
+ { category: "Home", series: "delivered", revenue: 80 },
+ ];
+
+ it("rejects a value column whose every non-null cell is non-numeric", () => {
+ const msg = validateNumericValueColumns(longFormat, "Bar chart");
+ expect(msg).not.toBeNull();
+ });
+
+ it("names the offending column", () => {
+ const msg = validateNumericValueColumns(longFormat, "Bar chart");
+ expect(msg).toContain("series");
+ });
+
+ it("accepts a wide-format result", () => {
+ const wide = [
+ { category: "Apparel", delivered: 100, shipped: 50 },
+ { category: "Home", delivered: 80, shipped: 20 },
+ ];
+ expect(validateNumericValueColumns(wide, "Bar chart")).toBeNull();
+ });
+
+ it("accepts numeric strings", () => {
+ const rows = [
+ { month: "Jan", revenue: "100" },
+ { month: "Feb", revenue: "200" },
+ ];
+ expect(validateNumericValueColumns(rows, "Line chart")).toBeNull();
+ });
+
+ // An all-null column is a legitimate sparse series — what a LEFT JOIN
+ // produces — and `collectAllKeys` exists specifically to keep it. Rejecting
+ // it would re-break the case the union-of-keys logic was written for.
+ it("accepts an entirely null column as a sparse series", () => {
+ const sparse = [
+ { month: "Jan", revenue: 100, forecast: null },
+ { month: "Feb", revenue: 200, forecast: null },
+ ];
+ expect(validateNumericValueColumns(sparse, "Line chart")).toBeNull();
+ });
+
+ it("accepts a column that is only partly populated", () => {
+ const partial = [
+ { month: "Jan", revenue: 100, forecast: null },
+ { month: "Feb", revenue: 200, forecast: 250 },
+ ];
+ expect(validateNumericValueColumns(partial, "Line chart")).toBeNull();
+ });
+
+ it("respects an explicit yAxis mapping and ignores unmapped text columns", () => {
+ // The user mapped the value column themselves; `series` is not plotted,
+ // so it must not be flagged.
+ const msg = validateNumericValueColumns(longFormat, "Bar chart", {
+ xAxis: "category",
+ yAxis: ["revenue"],
+ });
+ expect(msg).toBeNull();
+ });
+
+ it("flags an explicitly mapped column that is non-numeric", () => {
+ const msg = validateNumericValueColumns(longFormat, "Bar chart", {
+ xAxis: "category",
+ yAxis: ["series"],
+ });
+ expect(msg).toContain("series");
+ });
+
+ it("names every offending column when there is more than one", () => {
+ const rows = [
+ { category: "A", series: "x", label: "p", revenue: 1 },
+ { category: "B", series: "y", label: "q", revenue: 2 },
+ ];
+ const msg = validateNumericValueColumns(rows, "Bar chart") ?? "";
+ expect(msg).toContain("series");
+ expect(msg).toContain("label");
+ });
+
+ it("returns null for empty data", () => {
+ expect(validateNumericValueColumns([], "Bar chart")).toBeNull();
+ });
+});
diff --git a/app/src/plugins/transforms/shared-utils.ts b/app/src/plugins/transforms/shared-utils.ts
index aace4de9..4ce14cc3 100644
--- a/app/src/plugins/transforms/shared-utils.ts
+++ b/app/src/plugins/transforms/shared-utils.ts
@@ -81,3 +81,51 @@ export function toSeriesNumber(raw: unknown): number | null {
const n = typeof raw === "number" ? raw : Number(raw);
return Number.isFinite(n) ? n : null;
}
+
+/**
+ * Reject a result whose plotted value columns hold no numbers at all (#1400).
+ *
+ * A long-format result — `category, series, value`, what `GROUP BY a, b`
+ * naturally produces — used to render cleanly and wrongly: `resolveValueKeys`
+ * treats every non-label column as a series, so `series` became a series of
+ * its own whose cells all coerced to null. That produced duplicated category
+ * labels, a ghost legend entry with no bars, and (on line) a single value
+ * line zig-zagging across repeated x values. None of it looked like an error.
+ *
+ * Resolution goes through `resolveValueKeys` — the same call the transform
+ * makes — so the validator cannot disagree with what is actually plotted.
+ *
+ * A column is only rejected when it has at least one non-null cell and *none*
+ * of them parse. An entirely null column stays legal: that is a sparse series,
+ * what a LEFT JOIN produces, and the reason `collectAllKeys` unions keys.
+ */
+export function validateNumericValueColumns(
+ records: Record[],
+ chartLabel: string,
+ mapping?: ColumnMapping,
+): string | null {
+ if (!records.length) return null;
+ const keys = collectAllKeys(records);
+ // Fewer than 2 columns is the callers' own column-count error, which says
+ // something more useful than this would.
+ if (keys.length < 2) return null;
+
+ const labelKey = resolveLabelKey(keys, mapping);
+ const offenders = resolveValueKeys(keys, labelKey, mapping).filter((key) => {
+ let sawValue = false;
+ for (const record of records) {
+ const raw = record[key];
+ if (raw === null || raw === undefined) continue;
+ if (typeof raw === "string" && raw.trim() === "") continue;
+ sawValue = true;
+ if (toSeriesNumber(raw) !== null) return false;
+ }
+ return sawValue;
+ });
+
+ if (!offenders.length) return null;
+
+ const named = offenders.map((k) => `"${k}"`).join(", ");
+ const plural = offenders.length > 1;
+ return `${chartLabel} cannot plot ${named} — ${plural ? "those columns contain" : "that column contains"} no numeric values. This usually means the result is in long format (one row per category *and* series, e.g. \`GROUP BY category, status\`), where the series name is its own column. Pivot it so each series is a column, or map the value column explicitly. Example: \`SELECT category, SUM(x) FILTER (WHERE status='delivered') AS delivered, SUM(x) FILTER (WHERE status='shipped') AS shipped FROM ... GROUP BY category\`.`;
+}
diff --git a/app/src/stores/parameter-store.ts b/app/src/stores/parameter-store.ts
index bf41b072..33c33e55 100644
--- a/app/src/stores/parameter-store.ts
+++ b/app/src/stores/parameter-store.ts
@@ -29,7 +29,10 @@ export type ParameterSource =
| "click-action"
| "selector-widget"
| "url"
- | "cross-dashboard";
+ | "cross-dashboard"
+ // Seeded from a parameter widget's configured Default value on load (#1421).
+ // Distinct from "selector-widget": the user never picked this.
+ | "default";
export interface ParameterEntry {
value: unknown;
diff --git a/app/vitest.config.ts b/app/vitest.config.ts
index a63766f0..0fa7596c 100644
--- a/app/vitest.config.ts
+++ b/app/vitest.config.ts
@@ -4,6 +4,18 @@ import tsconfigPaths from "vite-tsconfig-paths";
export default defineConfig({
plugins: [tsconfigPaths()],
test: {
+ // Cap worker forks at half the machine (#1240). Vitest's default is
+ // ~availableParallelism, and each fork here loads jsdom + React + the
+ // component library — so on a many-core machine the suite runs out of
+ // headroom before it runs out of cores and workers start failing to boot
+ // ("Timeout waiting for worker to respond"), taking whole test files with
+ // them. Measured on a 10-core box: default = 889s with 96 failures and 9
+ // files never collected; at this setting = 37s, everything green.
+ //
+ // A percentage rather than a fixed number so CI runners (fewer vCPUs)
+ // scale down with it instead of inheriting a value tuned for a laptop.
+ // Confirmed harmless on CI: the unit job went 8m08s -> 8m20s.
+ maxWorkers: "50%",
coverage: {
provider: "v8",
reportsDirectory: "./coverage",
diff --git a/component/src/charts/__tests__/format-number.test.ts b/component/src/charts/__tests__/format-number.test.ts
index 3744d18e..b4c4ffb2 100644
--- a/component/src/charts/__tests__/format-number.test.ts
+++ b/component/src/charts/__tests__/format-number.test.ts
@@ -62,14 +62,53 @@ describe("formatNumber", () => {
expect(result).toMatch(/1\.2K/i);
});
- it("applies percent format", () => {
- expect(formatNumber(75, { numberFormat: "percent" })).toBe("75%");
- });
+ // #1396 — `percent` takes a RATIO and scales it, matching Intl's own
+ // `style: "percent"` and every spreadsheet. It used to append a bare "%"
+ // and scale nothing, so 0.2005 rendered as "0.2%" instead of "20.05%" —
+ // a plausible wrong number on the most prominent widget in the product.
+ describe("percent (#1396)", () => {
+ it("scales a ratio to a percentage", () => {
+ expect(formatNumber(0.2005, { numberFormat: "percent" })).toBe("20.05%");
+ });
- it("applies percent format with decimalPlaces", () => {
- expect(
- formatNumber(75.678, { numberFormat: "percent", decimalPlaces: 1 }),
- ).toBe("75.7%");
+ // Pins the convention: under the old "already 0-100" reading this was "1%".
+ it("renders 1 as 100%, not 1%", () => {
+ expect(formatNumber(1, { numberFormat: "percent" })).toBe("100%");
+ });
+
+ it("applies decimalPlaces after scaling", () => {
+ expect(
+ formatNumber(0.75678, { numberFormat: "percent", decimalPlaces: 1 }),
+ ).toBe("75.7%");
+ });
+
+ it("pads to decimalPlaces when asked", () => {
+ expect(
+ formatNumber(0.42, { numberFormat: "percent", decimalPlaces: 1 }),
+ ).toBe("42.0%");
+ });
+
+ it("does not pad when decimalPlaces is unset", () => {
+ expect(formatNumber(0.5, { numberFormat: "percent" })).toBe("50%");
+ });
+
+ it("groups thousands for ratios above 10", () => {
+ expect(formatNumber(12.5, { numberFormat: "percent" })).toBe("1,250%");
+ });
+
+ it("handles negative ratios", () => {
+ expect(formatNumber(-0.035, { numberFormat: "percent" })).toBe("-3.5%");
+ });
+
+ it("still applies prefix and suffix", () => {
+ expect(
+ formatNumber(0.2, {
+ numberFormat: "percent",
+ prefix: "~",
+ suffix: " YoY",
+ }),
+ ).toBe("~20% YoY");
+ });
});
it("adds prefix (and applies new defaults — prefix doesn't count as set)", () => {
diff --git a/component/src/charts/__tests__/single-value-chart.test.tsx b/component/src/charts/__tests__/single-value-chart.test.tsx
index b46fcfb7..8c4fb6b4 100644
--- a/component/src/charts/__tests__/single-value-chart.test.tsx
+++ b/component/src/charts/__tests__/single-value-chart.test.tsx
@@ -97,8 +97,10 @@ describe("SingleValueChart", () => {
expect(screen.getByText(/1\.5M/i)).toBeInTheDocument();
});
- it("appends percent sign when numberFormat is percent", () => {
- render();
+ // #1396 — percent takes a ratio and scales it, so the KPI showing
+ // "401 / 2000" now reads 20.05% rather than 0.2%.
+ it("scales a ratio when numberFormat is percent", () => {
+ render();
expect(screen.getByText("75%")).toBeInTheDocument();
});
diff --git a/component/src/charts/chart-utils.ts b/component/src/charts/chart-utils.ts
index 788b2e6e..d0dd4881 100644
--- a/component/src/charts/chart-utils.ts
+++ b/component/src/charts/chart-utils.ts
@@ -66,10 +66,22 @@ export function formatNumber(
}).format(value);
break;
case "percent":
- formatted =
- decimalPlaces !== undefined
- ? `${value.toFixed(decimalPlaces)}%`
- : `${value}%`;
+ // Takes a RATIO and scales it — 0.2005 → "20.05%" — matching Intl's own
+ // `style: "percent"` and every spreadsheet. It used to append a bare "%"
+ // and scale nothing, which meant a genuine share rendered 100x too small
+ // with nothing in the UI to distinguish it from a real value (#1396).
+ // With no explicit decimalPlaces, cap at 2 rather than take Intl's
+ // default of 0 — rounding 20.05% to "20%" is the same class of silent
+ // precision loss this fix exists to remove.
+ formatted = Intl.NumberFormat("en-US", {
+ style: "percent",
+ ...(decimalPlaces !== undefined
+ ? {
+ minimumFractionDigits: decimalPlaces,
+ maximumFractionDigits: decimalPlaces,
+ }
+ : { maximumFractionDigits: 2 }),
+ }).format(value);
break;
default: // "plain"
formatted =
diff --git a/component/src/components/composed/chart-options/single-value.ts b/component/src/components/composed/chart-options/single-value.ts
index 347c8fe3..a8735e19 100644
--- a/component/src/components/composed/chart-options/single-value.ts
+++ b/component/src/components/composed/chart-options/single-value.ts
@@ -55,12 +55,12 @@ export const singleValueOptions: ChartOptionDef[] = [
default: "plain",
category: "Display",
description:
- "How to format the numeric value — plain, comma-separated, compact (1.2k), or percentage.",
+ "How to format the numeric value — plain, comma-separated, compact (1.2k), or percentage. Percent expects a ratio and scales it: query 0.42 to render 42%.",
options: [
{ label: "Plain", value: "plain" },
{ label: "Comma", value: "comma" },
{ label: "Compact", value: "compact" },
- { label: "Percent", value: "percent" },
+ { label: "Percent (0.42 → 42%)", value: "percent" },
],
},
{
diff --git a/component/src/components/composed/chart-options/table.ts b/component/src/components/composed/chart-options/table.ts
index bc894680..767f2ef2 100644
--- a/component/src/components/composed/chart-options/table.ts
+++ b/component/src/components/composed/chart-options/table.ts
@@ -70,11 +70,11 @@ export const tableOptions: ChartOptionDef[] = [
default: "comma",
category: "Display",
description:
- "How numeric cells are formatted across the whole table. Use Plain to opt out of formatting (raw JS precision).",
+ "How numeric cells are formatted across the whole table. Use Plain to opt out of formatting (raw JS precision). Percent expects a ratio and scales it — a column of 0.12 renders as 12%, not 0.12%.",
options: [
{ label: "Comma (1,234.56)", value: "comma" },
{ label: "Compact (1.2K)", value: "compact" },
- { label: "Percent (12%)", value: "percent" },
+ { label: "Percent (0.12 → 12%)", value: "percent" },
{ label: "Plain (1234.56)", value: "plain" },
],
},
diff --git a/component/vite.config.ts b/component/vite.config.ts
index 8e417e4a..cff49f4f 100644
--- a/component/vite.config.ts
+++ b/component/vite.config.ts
@@ -1,77 +1,92 @@
///
-import { defineConfig } from 'vite';
-import react from '@vitejs/plugin-react';
-import path from 'path';
-import { fileURLToPath } from 'node:url';
-import { storybookTest } from '@storybook/addon-vitest/vitest-plugin';
-import { playwright } from '@vitest/browser-playwright';
-const dirname = typeof __dirname !== 'undefined' ? __dirname : path.dirname(fileURLToPath(import.meta.url));
+import { defineConfig } from "vite";
+import react from "@vitejs/plugin-react";
+import path from "path";
+import { fileURLToPath } from "node:url";
+import { storybookTest } from "@storybook/addon-vitest/vitest-plugin";
+import { playwright } from "@vitest/browser-playwright";
+const dirname =
+ typeof __dirname !== "undefined"
+ ? __dirname
+ : path.dirname(fileURLToPath(import.meta.url));
// More info at: https://storybook.js.org/docs/next/writing-tests/integrations/vitest-addon
export default defineConfig({
plugins: [react()],
resolve: {
alias: {
- '@': path.resolve(__dirname, './src')
- }
+ "@": path.resolve(__dirname, "./src"),
+ },
},
build: {
lib: {
- entry: path.resolve(__dirname, 'src/index.ts'),
- name: 'NeoboardComponents',
- formats: ['es', 'umd'],
- fileName: format => `neoboard-components.${format}.js`
+ entry: path.resolve(__dirname, "src/index.ts"),
+ name: "NeoboardComponents",
+ formats: ["es", "umd"],
+ fileName: (format) => `neoboard-components.${format}.js`,
},
rollupOptions: {
- external: ['react', 'react-dom'],
+ external: ["react", "react-dom"],
output: {
globals: {
- react: 'React',
- 'react-dom': 'ReactDOM'
- }
- }
- }
+ react: "React",
+ "react-dom": "ReactDOM",
+ },
+ },
+ },
},
test: {
+ // See app/vitest.config.ts — same cap, same reason (#1240). This package
+ // is the more exposed of the two: the `storybook` project drives a real
+ // Chromium instance, and the NVL/WebGL graph stories are the first thing
+ // to time out when the machine is saturated (#1469).
+ maxWorkers: "50%",
coverage: {
- provider: 'v8',
- reportsDirectory: './coverage',
- reporter: ['text', 'lcov', 'json'],
- include: ['src/**/*.ts', 'src/**/*.tsx'],
- exclude: ['src/**/*.test.{ts,tsx}', 'src/**/*.stories.*', 'src/**/*.d.ts'],
+ provider: "v8",
+ reportsDirectory: "./coverage",
+ reporter: ["text", "lcov", "json"],
+ include: ["src/**/*.ts", "src/**/*.tsx"],
+ exclude: [
+ "src/**/*.test.{ts,tsx}",
+ "src/**/*.stories.*",
+ "src/**/*.d.ts",
+ ],
},
projects: [
{
extends: true,
test: {
- name: 'unit',
- include: ['src/**/*.test.{ts,tsx}'],
- environment: 'jsdom',
- setupFiles: ['./vitest.setup.ts'],
+ name: "unit",
+ include: ["src/**/*.test.{ts,tsx}"],
+ environment: "jsdom",
+ setupFiles: ["./vitest.setup.ts"],
css: true,
},
},
{
extends: true,
plugins: [
- // The plugin will run tests for the stories defined in your Storybook config
- // See options at: https://storybook.js.org/docs/next/writing-tests/integrations/vitest-addon#storybooktest
- storybookTest({
- configDir: path.join(dirname, '.storybook')
- })],
+ // The plugin will run tests for the stories defined in your Storybook config
+ // See options at: https://storybook.js.org/docs/next/writing-tests/integrations/vitest-addon#storybooktest
+ storybookTest({
+ configDir: path.join(dirname, ".storybook"),
+ }),
+ ],
test: {
- name: 'storybook',
+ name: "storybook",
browser: {
enabled: true,
headless: true,
provider: playwright({}),
- instances: [{
- browser: 'chromium'
- }]
+ instances: [
+ {
+ browser: "chromium",
+ },
+ ],
},
- setupFiles: ['.storybook/vitest.setup.ts']
- }
+ setupFiles: [".storybook/vitest.setup.ts"],
+ },
},
- ]
- }
-});
\ No newline at end of file
+ ],
+ },
+});
diff --git a/docs/.astro/collections/docs.schema.json b/docs/.astro/collections/docs.schema.json
index 040fafa8..40f12f73 100644
--- a/docs/.astro/collections/docs.schema.json
+++ b/docs/.astro/collections/docs.schema.json
@@ -1,607 +1,618 @@
{
- "$ref": "#/definitions/docs",
- "definitions": {
- "docs": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "type": "object",
+ "properties": {
+ "title": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "editUrl": {
+ "default": true,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "uri"
+ },
+ {
+ "type": "boolean"
+ }
+ ]
+ },
+ "head": {
+ "default": [],
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "tag": {
+ "type": "string",
+ "enum": [
+ "title",
+ "base",
+ "link",
+ "style",
+ "meta",
+ "script",
+ "noscript",
+ "template"
+ ]
+ },
+ "attrs": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "boolean"
+ },
+ {}
+ ]
+ }
+ },
+ "content": {
+ "type": "string"
+ }
+ },
+ "required": ["tag"]
+ }
+ },
+ "tableOfContents": {
+ "anyOf": [
+ {
+ "type": "object",
+ "properties": {
+ "minHeadingLevel": {
+ "default": 2,
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 6
+ },
+ "maxHeadingLevel": {
+ "default": 3,
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 6
+ }
+ }
+ },
+ {
+ "type": "boolean"
+ }
+ ]
+ },
+ "template": {
+ "default": "doc",
+ "type": "string",
+ "enum": ["doc", "splash"]
+ },
+ "hero": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
- "description": {
+ "tagline": {
"type": "string"
},
- "editUrl": {
+ "image": {
"anyOf": [
{
- "type": "string",
- "format": "uri"
+ "type": "object",
+ "properties": {
+ "alt": {
+ "default": "",
+ "type": "string"
+ },
+ "file": {
+ "type": "string"
+ }
+ },
+ "required": ["file"]
},
{
- "type": "boolean"
+ "type": "object",
+ "properties": {
+ "alt": {
+ "default": "",
+ "type": "string"
+ },
+ "dark": {
+ "type": "string"
+ },
+ "light": {
+ "type": "string"
+ }
+ },
+ "required": ["dark", "light"]
+ },
+ {
+ "type": "object",
+ "properties": {
+ "html": {
+ "type": "string"
+ }
+ },
+ "required": ["html"]
}
- ],
- "default": true
+ ]
},
- "head": {
+ "actions": {
"type": "array",
"items": {
"type": "object",
"properties": {
- "tag": {
+ "text": {
+ "type": "string"
+ },
+ "link": {
+ "type": "string"
+ },
+ "variant": {
+ "default": "primary",
"type": "string",
- "enum": [
- "title",
- "base",
- "link",
- "style",
- "meta",
- "script",
- "noscript",
- "template"
+ "enum": ["primary", "secondary", "minimal"]
+ },
+ "icon": {
+ "anyOf": [
+ {
+ "type": "string",
+ "enum": [
+ "up-caret",
+ "down-caret",
+ "right-caret",
+ "left-caret",
+ "up-arrow",
+ "down-arrow",
+ "right-arrow",
+ "left-arrow",
+ "bars",
+ "translate",
+ "pencil",
+ "pen",
+ "document",
+ "add-document",
+ "setting",
+ "link",
+ "link-alt",
+ "external",
+ "download",
+ "cloud-download",
+ "moon",
+ "sun",
+ "clock",
+ "laptop",
+ "desktop",
+ "mobile-android",
+ "window",
+ "database",
+ "server",
+ "code-branch",
+ "open-book",
+ "notes",
+ "information",
+ "magnifier",
+ "forward-slash",
+ "close",
+ "error",
+ "warning",
+ "approve-check-circle",
+ "approve-check",
+ "question-circle",
+ "question",
+ "rocket",
+ "star",
+ "puzzle",
+ "list-format",
+ "analytics",
+ "random",
+ "padlock",
+ "comment",
+ "comment-alt",
+ "heart",
+ "github",
+ "gitlab",
+ "bitbucket",
+ "codePen",
+ "farcaster",
+ "discord",
+ "gitter",
+ "twitter",
+ "x.com",
+ "mastodon",
+ "codeberg",
+ "youtube",
+ "threads",
+ "linkedin",
+ "twitch",
+ "azureDevOps",
+ "microsoftTeams",
+ "instagram",
+ "stackOverflow",
+ "telegram",
+ "rss",
+ "facebook",
+ "email",
+ "phone",
+ "reddit",
+ "patreon",
+ "signal",
+ "slack",
+ "matrix",
+ "hackerOne",
+ "openCollective",
+ "blueSky",
+ "discourse",
+ "zulip",
+ "pinterest",
+ "tiktok",
+ "astro",
+ "solidjs",
+ "alpine",
+ "pnpm",
+ "biome",
+ "bun",
+ "mdx",
+ "apple",
+ "linux",
+ "homebrew",
+ "nix",
+ "starlight",
+ "pkl",
+ "node",
+ "cloudflare",
+ "vercel",
+ "netlify",
+ "deno",
+ "jsr",
+ "nostr",
+ "backstage",
+ "confluence",
+ "jira",
+ "storybook",
+ "vscode",
+ "jetbrains",
+ "zed",
+ "vim",
+ "figma",
+ "sketch",
+ "npm",
+ "sourcehut",
+ "substack",
+ "chrome",
+ "edge",
+ "firefox",
+ "safari",
+ "seti:folder",
+ "seti:bsl",
+ "seti:mdo",
+ "seti:salesforce",
+ "seti:asm",
+ "seti:bicep",
+ "seti:bazel",
+ "seti:c",
+ "seti:c-sharp",
+ "seti:html",
+ "seti:cpp",
+ "seti:clojure",
+ "seti:coldfusion",
+ "seti:config",
+ "seti:crystal",
+ "seti:crystal_embedded",
+ "seti:json",
+ "seti:css",
+ "seti:csv",
+ "seti:xls",
+ "seti:cu",
+ "seti:cake",
+ "seti:cake_php",
+ "seti:d",
+ "seti:word",
+ "seti:elixir",
+ "seti:elixir_script",
+ "seti:hex",
+ "seti:elm",
+ "seti:favicon",
+ "seti:f-sharp",
+ "seti:git",
+ "seti:go",
+ "seti:godot",
+ "seti:gradle",
+ "seti:grails",
+ "seti:graphql",
+ "seti:hacklang",
+ "seti:haml",
+ "seti:mustache",
+ "seti:haskell",
+ "seti:haxe",
+ "seti:jade",
+ "seti:java",
+ "seti:javascript",
+ "seti:jinja",
+ "seti:julia",
+ "seti:karma",
+ "seti:kotlin",
+ "seti:dart",
+ "seti:liquid",
+ "seti:livescript",
+ "seti:lua",
+ "seti:markdown",
+ "seti:argdown",
+ "seti:info",
+ "seti:clock",
+ "seti:maven",
+ "seti:nim",
+ "seti:github",
+ "seti:notebook",
+ "seti:nunjucks",
+ "seti:npm",
+ "seti:ocaml",
+ "seti:odata",
+ "seti:perl",
+ "seti:php",
+ "seti:pipeline",
+ "seti:pddl",
+ "seti:plan",
+ "seti:happenings",
+ "seti:powershell",
+ "seti:prisma",
+ "seti:pug",
+ "seti:puppet",
+ "seti:purescript",
+ "seti:python",
+ "seti:react",
+ "seti:rescript",
+ "seti:R",
+ "seti:ruby",
+ "seti:rust",
+ "seti:sass",
+ "seti:spring",
+ "seti:slim",
+ "seti:smarty",
+ "seti:sbt",
+ "seti:scala",
+ "seti:ethereum",
+ "seti:stylus",
+ "seti:svelte",
+ "seti:swift",
+ "seti:db",
+ "seti:terraform",
+ "seti:tex",
+ "seti:default",
+ "seti:twig",
+ "seti:typescript",
+ "seti:tsconfig",
+ "seti:vala",
+ "seti:vite",
+ "seti:vue",
+ "seti:wasm",
+ "seti:wat",
+ "seti:xml",
+ "seti:yml",
+ "seti:prolog",
+ "seti:zig",
+ "seti:zip",
+ "seti:wgt",
+ "seti:illustrator",
+ "seti:photoshop",
+ "seti:pdf",
+ "seti:font",
+ "seti:image",
+ "seti:svg",
+ "seti:sublime",
+ "seti:code-search",
+ "seti:shell",
+ "seti:video",
+ "seti:audio",
+ "seti:windows",
+ "seti:jenkins",
+ "seti:babel",
+ "seti:bower",
+ "seti:docker",
+ "seti:code-climate",
+ "seti:eslint",
+ "seti:firebase",
+ "seti:firefox",
+ "seti:gitlab",
+ "seti:grunt",
+ "seti:gulp",
+ "seti:ionic",
+ "seti:platformio",
+ "seti:rollup",
+ "seti:stylelint",
+ "seti:yarn",
+ "seti:webpack",
+ "seti:lock",
+ "seti:license",
+ "seti:makefile",
+ "seti:heroku",
+ "seti:todo",
+ "seti:ignored"
+ ]
+ },
+ {
+ "type": "string",
+ "pattern": "^ import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fadministration%2Fbackup-restore.mdx&astroContentModuleFlag=true")],
-["src/content/docs/administration/index.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fadministration%2Findex.mdx&astroContentModuleFlag=true")],
-["src/content/docs/index.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Findex.mdx&astroContentModuleFlag=true")],
["src/content/docs/administration/deployment-checklist.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fadministration%2Fdeployment-checklist.mdx&astroContentModuleFlag=true")],
-["src/content/docs/authentication/index.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fauthentication%2Findex.mdx&astroContentModuleFlag=true")],
+["src/content/docs/administration/index.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fadministration%2Findex.mdx&astroContentModuleFlag=true")],
["src/content/docs/administration/monitoring.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fadministration%2Fmonitoring.mdx&astroContentModuleFlag=true")],
-["src/content/docs/authentication/password-login.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fauthentication%2Fpassword-login.mdx&astroContentModuleFlag=true")],
["src/content/docs/administration/reverse-proxy.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fadministration%2Freverse-proxy.mdx&astroContentModuleFlag=true")],
+["src/content/docs/authentication/index.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fauthentication%2Findex.mdx&astroContentModuleFlag=true")],
+["src/content/docs/authentication/password-login.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fauthentication%2Fpassword-login.mdx&astroContentModuleFlag=true")],
["src/content/docs/authentication/roles.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fauthentication%2Froles.mdx&astroContentModuleFlag=true")],
["src/content/docs/authentication/sso.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fauthentication%2Fsso.mdx&astroContentModuleFlag=true")],
-["src/content/docs/cli/index.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fcli%2Findex.mdx&astroContentModuleFlag=true")],
-["src/content/docs/cli/commands.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fcli%2Fcommands.mdx&astroContentModuleFlag=true")],
-["src/content/docs/cli/local-setup.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fcli%2Flocal-setup.mdx&astroContentModuleFlag=true")],
-["src/content/docs/cli/docker-setup.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fcli%2Fdocker-setup.mdx&astroContentModuleFlag=true")],
-["src/content/docs/concepts/connectors.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fconcepts%2Fconnectors.mdx&astroContentModuleFlag=true")],
-["src/content/docs/concepts/architecture.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fconcepts%2Farchitecture.mdx&astroContentModuleFlag=true")],
-["src/content/docs/concepts/dashboards.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fconcepts%2Fdashboards.mdx&astroContentModuleFlag=true")],
-["src/content/docs/concepts/index.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fconcepts%2Findex.mdx&astroContentModuleFlag=true")],
-["src/content/docs/concepts/multi-tenancy.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fconcepts%2Fmulti-tenancy.mdx&astroContentModuleFlag=true")],
-["src/content/docs/concepts/parameters.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fconcepts%2Fparameters.mdx&astroContentModuleFlag=true")],
-["src/content/docs/concepts/query-safety.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fconcepts%2Fquery-safety.mdx&astroContentModuleFlag=true")],
+["src/content/docs/charts/bar.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fcharts%2Fbar.mdx&astroContentModuleFlag=true")],
["src/content/docs/charts/choropleth.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fcharts%2Fchoropleth.mdx&astroContentModuleFlag=true")],
["src/content/docs/charts/circle-packing.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fcharts%2Fcircle-packing.mdx&astroContentModuleFlag=true")],
-["src/content/docs/charts/bar.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fcharts%2Fbar.mdx&astroContentModuleFlag=true")],
-["src/content/docs/concepts/widgets.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fconcepts%2Fwidgets.mdx&astroContentModuleFlag=true")],
+["src/content/docs/charts/form.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fcharts%2Fform.mdx&astroContentModuleFlag=true")],
["src/content/docs/charts/gantt.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fcharts%2Fgantt.mdx&astroContentModuleFlag=true")],
["src/content/docs/charts/gauge.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fcharts%2Fgauge.mdx&astroContentModuleFlag=true")],
-["src/content/docs/charts/form.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fcharts%2Fform.mdx&astroContentModuleFlag=true")],
["src/content/docs/charts/graph.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fcharts%2Fgraph.mdx&astroContentModuleFlag=true")],
["src/content/docs/charts/iframe.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fcharts%2Fiframe.mdx&astroContentModuleFlag=true")],
["src/content/docs/charts/index.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fcharts%2Findex.mdx&astroContentModuleFlag=true")],
@@ -36,40 +23,53 @@ export default new Map([
["src/content/docs/charts/map.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fcharts%2Fmap.mdx&astroContentModuleFlag=true")],
["src/content/docs/charts/markdown.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fcharts%2Fmarkdown.mdx&astroContentModuleFlag=true")],
["src/content/docs/charts/param-select.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fcharts%2Fparam-select.mdx&astroContentModuleFlag=true")],
+["src/content/docs/charts/pie.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fcharts%2Fpie.mdx&astroContentModuleFlag=true")],
["src/content/docs/charts/radar.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fcharts%2Fradar.mdx&astroContentModuleFlag=true")],
["src/content/docs/charts/sankey.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fcharts%2Fsankey.mdx&astroContentModuleFlag=true")],
-["src/content/docs/charts/pie.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fcharts%2Fpie.mdx&astroContentModuleFlag=true")],
["src/content/docs/charts/single-value.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fcharts%2Fsingle-value.mdx&astroContentModuleFlag=true")],
["src/content/docs/charts/sunburst.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fcharts%2Fsunburst.mdx&astroContentModuleFlag=true")],
["src/content/docs/charts/table.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fcharts%2Ftable.mdx&astroContentModuleFlag=true")],
["src/content/docs/charts/treemap.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fcharts%2Ftreemap.mdx&astroContentModuleFlag=true")],
+["src/content/docs/cli/commands.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fcli%2Fcommands.mdx&astroContentModuleFlag=true")],
+["src/content/docs/cli/docker-setup.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fcli%2Fdocker-setup.mdx&astroContentModuleFlag=true")],
+["src/content/docs/cli/index.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fcli%2Findex.mdx&astroContentModuleFlag=true")],
+["src/content/docs/cli/local-setup.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fcli%2Flocal-setup.mdx&astroContentModuleFlag=true")],
+["src/content/docs/concepts/architecture.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fconcepts%2Farchitecture.mdx&astroContentModuleFlag=true")],
+["src/content/docs/concepts/connectors.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fconcepts%2Fconnectors.mdx&astroContentModuleFlag=true")],
+["src/content/docs/concepts/dashboards.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fconcepts%2Fdashboards.mdx&astroContentModuleFlag=true")],
+["src/content/docs/concepts/index.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fconcepts%2Findex.mdx&astroContentModuleFlag=true")],
+["src/content/docs/concepts/multi-tenancy.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fconcepts%2Fmulti-tenancy.mdx&astroContentModuleFlag=true")],
+["src/content/docs/concepts/parameters.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fconcepts%2Fparameters.mdx&astroContentModuleFlag=true")],
+["src/content/docs/concepts/query-safety.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fconcepts%2Fquery-safety.mdx&astroContentModuleFlag=true")],
+["src/content/docs/concepts/widgets.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fconcepts%2Fwidgets.mdx&astroContentModuleFlag=true")],
["src/content/docs/connections/index.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fconnections%2Findex.mdx&astroContentModuleFlag=true")],
["src/content/docs/dashboards/index.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdashboards%2Findex.mdx&astroContentModuleFlag=true")],
+["src/content/docs/developer/contributing/code-style.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdeveloper%2Fcontributing%2Fcode-style.mdx&astroContentModuleFlag=true")],
+["src/content/docs/developer/contributing/pr-workflow.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdeveloper%2Fcontributing%2Fpr-workflow.mdx&astroContentModuleFlag=true")],
+["src/content/docs/developer/contributing/setup.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdeveloper%2Fcontributing%2Fsetup.mdx&astroContentModuleFlag=true")],
+["src/content/docs/developer/contributing/testing.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdeveloper%2Fcontributing%2Ftesting.mdx&astroContentModuleFlag=true")],
+["src/content/docs/developer/extending/new-chart-plugin.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdeveloper%2Fextending%2Fnew-chart-plugin.mdx&astroContentModuleFlag=true")],
+["src/content/docs/developer/extending/new-chart-type.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdeveloper%2Fextending%2Fnew-chart-type.mdx&astroContentModuleFlag=true")],
+["src/content/docs/developer/extending/new-connector-plugin.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdeveloper%2Fextending%2Fnew-connector-plugin.mdx&astroContentModuleFlag=true")],
+["src/content/docs/developer/extending/new-connector.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdeveloper%2Fextending%2Fnew-connector.mdx&astroContentModuleFlag=true")],
+["src/content/docs/developer/extending/new-parameter-type.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdeveloper%2Fextending%2Fnew-parameter-type.mdx&astroContentModuleFlag=true")],
+["src/content/docs/developer/extending/new-widget-type.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdeveloper%2Fextending%2Fnew-widget-type.mdx&astroContentModuleFlag=true")],
["src/content/docs/developer/index.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdeveloper%2Findex.mdx&astroContentModuleFlag=true")],
-["src/content/docs/getting-started/index.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fgetting-started%2Findex.mdx&astroContentModuleFlag=true")],
+["src/content/docs/developer/plugins/community.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdeveloper%2Fplugins%2Fcommunity.mdx&astroContentModuleFlag=true")],
+["src/content/docs/developer/plugins/index.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdeveloper%2Fplugins%2Findex.mdx&astroContentModuleFlag=true")],
+["src/content/docs/developer/plugins/mongodb-connector.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdeveloper%2Fplugins%2Fmongodb-connector.mdx&astroContentModuleFlag=true")],
["src/content/docs/getting-started/configuration.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fgetting-started%2Fconfiguration.mdx&astroContentModuleFlag=true")],
+["src/content/docs/getting-started/index.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fgetting-started%2Findex.mdx&astroContentModuleFlag=true")],
["src/content/docs/getting-started/installation.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fgetting-started%2Finstallation.mdx&astroContentModuleFlag=true")],
["src/content/docs/getting-started/migration-from-neodash.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fgetting-started%2Fmigration-from-neodash.mdx&astroContentModuleFlag=true")],
["src/content/docs/getting-started/quick-start.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fgetting-started%2Fquick-start.mdx&astroContentModuleFlag=true")],
+["src/content/docs/getting-started/troubleshooting.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fgetting-started%2Ftroubleshooting.mdx&astroContentModuleFlag=true")],
["src/content/docs/guides/api-keys.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fguides%2Fapi-keys.mdx&astroContentModuleFlag=true")],
["src/content/docs/guides/connecting-databases.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fguides%2Fconnecting-databases.mdx&astroContentModuleFlag=true")],
["src/content/docs/guides/first-dashboard.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fguides%2Ffirst-dashboard.mdx&astroContentModuleFlag=true")],
["src/content/docs/guides/index.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fguides%2Findex.mdx&astroContentModuleFlag=true")],
["src/content/docs/guides/keyboard-shortcuts.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fguides%2Fkeyboard-shortcuts.mdx&astroContentModuleFlag=true")],
-["src/content/docs/getting-started/troubleshooting.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fgetting-started%2Ftroubleshooting.mdx&astroContentModuleFlag=true")],
["src/content/docs/guides/managing-users.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fguides%2Fmanaging-users.mdx&astroContentModuleFlag=true")],
["src/content/docs/guides/query-history.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fguides%2Fquery-history.mdx&astroContentModuleFlag=true")],
-["src/content/docs/developer/contributing/code-style.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdeveloper%2Fcontributing%2Fcode-style.mdx&astroContentModuleFlag=true")],
-["src/content/docs/developer/contributing/pr-workflow.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdeveloper%2Fcontributing%2Fpr-workflow.mdx&astroContentModuleFlag=true")],
-["src/content/docs/developer/contributing/setup.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdeveloper%2Fcontributing%2Fsetup.mdx&astroContentModuleFlag=true")],
-["src/content/docs/developer/contributing/testing.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdeveloper%2Fcontributing%2Ftesting.mdx&astroContentModuleFlag=true")],
-["src/content/docs/developer/extending/new-chart-type.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdeveloper%2Fextending%2Fnew-chart-type.mdx&astroContentModuleFlag=true")],
-["src/content/docs/developer/extending/new-connector-plugin.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdeveloper%2Fextending%2Fnew-connector-plugin.mdx&astroContentModuleFlag=true")],
-["src/content/docs/developer/extending/new-parameter-type.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdeveloper%2Fextending%2Fnew-parameter-type.mdx&astroContentModuleFlag=true")],
-["src/content/docs/developer/extending/new-widget-type.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdeveloper%2Fextending%2Fnew-widget-type.mdx&astroContentModuleFlag=true")],
-["src/content/docs/developer/extending/new-chart-plugin.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdeveloper%2Fextending%2Fnew-chart-plugin.mdx&astroContentModuleFlag=true")],
-["src/content/docs/developer/extending/new-connector.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdeveloper%2Fextending%2Fnew-connector.mdx&astroContentModuleFlag=true")],
-["src/content/docs/developer/plugins/community.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdeveloper%2Fplugins%2Fcommunity.mdx&astroContentModuleFlag=true")],
-["src/content/docs/developer/plugins/index.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdeveloper%2Fplugins%2Findex.mdx&astroContentModuleFlag=true")],
-["src/content/docs/developer/plugins/mongodb-connector.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdeveloper%2Fplugins%2Fmongodb-connector.mdx&astroContentModuleFlag=true")]]);
+["src/content/docs/index.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Findex.mdx&astroContentModuleFlag=true")]]);
\ No newline at end of file
diff --git a/docs/.astro/content.d.ts b/docs/.astro/content.d.ts
index faf4105a..b126ed6e 100644
--- a/docs/.astro/content.d.ts
+++ b/docs/.astro/content.d.ts
@@ -26,21 +26,13 @@ declare module 'astro:content' {
[key: string]: unknown;
};
}
-}
-declare module 'astro:content' {
type Flatten = T extends { [K: string]: infer U } ? U : never;
- export type CollectionKey = keyof AnyEntryMap;
- export type CollectionEntry = Flatten;
-
- export type ContentCollectionKey = keyof ContentEntryMap;
- export type DataCollectionKey = keyof DataEntryMap;
+ export type CollectionKey = keyof DataEntryMap;
+ export type CollectionEntry = Flatten;
type AllValuesOf = T extends any ? T[keyof T] : never;
- type ValidContentEntrySlug = AllValuesOf<
- ContentEntryMap[C]
- >['slug'];
export type ReferenceDataEntry<
C extends CollectionKey,
@@ -49,41 +41,17 @@ declare module 'astro:content' {
collection: C;
id: E;
};
- export type ReferenceContentEntry<
- C extends keyof ContentEntryMap,
- E extends ValidContentEntrySlug | (string & {}) = string,
- > = {
- collection: C;
- slug: E;
- };
+
export type ReferenceLiveEntry = {
collection: C;
id: string;
};
- /** @deprecated Use `getEntry` instead. */
- export function getEntryBySlug<
- C extends keyof ContentEntryMap,
- E extends ValidContentEntrySlug | (string & {}),
- >(
- collection: C,
- // Note that this has to accept a regular string too, for SSR
- entrySlug: E,
- ): E extends ValidContentEntrySlug
- ? Promise>
- : Promise | undefined>;
-
- /** @deprecated Use `getEntry` instead. */
- export function getDataEntryById(
- collection: C,
- entryId: E,
- ): Promise>;
-
- export function getCollection>(
+ export function getCollection>(
collection: C,
filter?: (entry: CollectionEntry) => entry is E,
): Promise;
- export function getCollection(
+ export function getCollection(
collection: C,
filter?: (entry: CollectionEntry) => unknown,
): Promise[]>;
@@ -95,14 +63,6 @@ declare module 'astro:content' {
import('astro').LiveDataCollectionResult, LiveLoaderErrorType>
>;
- export function getEntry<
- C extends keyof ContentEntryMap,
- E extends ValidContentEntrySlug | (string & {}),
- >(
- entry: ReferenceContentEntry,
- ): E extends ValidContentEntrySlug
- ? Promise>
- : Promise | undefined>;
export function getEntry<
C extends keyof DataEntryMap,
E extends keyof DataEntryMap[C] | (string & {}),
@@ -111,15 +71,6 @@ declare module 'astro:content' {
): E extends keyof DataEntryMap[C]
? Promise
: Promise | undefined>;
- export function getEntry<
- C extends keyof ContentEntryMap,
- E extends ValidContentEntrySlug | (string & {}),
- >(
- collection: C,
- slug: E,
- ): E extends ValidContentEntrySlug
- ? Promise>
- : Promise | undefined>;
export function getEntry<
C extends keyof DataEntryMap,
E extends keyof DataEntryMap[C] | (string & {}),
@@ -137,47 +88,56 @@ declare module 'astro:content' {
): Promise, LiveLoaderErrorType>>;
/** Resolve an array of entry references from the same collection */
- export function getEntries(
- entries: ReferenceContentEntry>[],
- ): Promise[]>;
export function getEntries(
entries: ReferenceDataEntry[],
): Promise[]>;
- export function render(
- entry: AnyEntryMap[C][string],
+ export function render(
+ entry: DataEntryMap[C][string],
+ ): Promise;
+
+ export function render(
+ entry: import('astro').LiveDataEntry>,
): Promise;
- export function reference(
+ export function reference<
+ C extends
+ | keyof DataEntryMap
+ // Allow generic `string` to avoid excessive type errors in the config
+ // if `dev` is not running to update as you edit.
+ // Invalid collection names will be caught at build time.
+ | (string & {}),
+ >(
collection: C,
- ): import('astro/zod').ZodEffects<
+ ): import('astro/zod').ZodPipe<
import('astro/zod').ZodString,
- C extends keyof ContentEntryMap
- ? ReferenceContentEntry>
- : ReferenceDataEntry
+ import('astro/zod').ZodTransform<
+ C extends keyof DataEntryMap
+ ? {
+ collection: C;
+ id: string;
+ }
+ : never,
+ string
+ >
>;
- // Allow generic `string` to avoid excessive type errors in the config
- // if `dev` is not running to update as you edit.
- // Invalid collection names will be caught at build time.
- export function reference(
- collection: C,
- ): import('astro/zod').ZodEffects;
type ReturnTypeOrOriginal = T extends (...args: any[]) => infer R ? R : T;
- type InferEntrySchema = import('astro/zod').infer<
+ type InferEntrySchema = import('astro/zod').infer<
ReturnTypeOrOriginal['schema']>
>;
-
- type ContentEntryMap = {
-
- };
+ type ExtractLoaderConfig = T extends { loader: infer L } ? L : never;
+ type InferLoaderSchema<
+ C extends keyof DataEntryMap,
+ L = ExtractLoaderConfig,
+ > = L extends { schema: import('astro/zod').ZodSchema }
+ ? import('astro/zod').infer
+ : any;
type DataEntryMap = {
"docs": Record;
rendered?: RenderedContent;
@@ -186,8 +146,6 @@ declare module 'astro:content' {
};
- type AnyEntryMap = ContentEntryMap & DataEntryMap;
-
type ExtractLoaderTypes = T extends import('astro/loaders').LiveLoader<
infer TData,
infer TEntryFilter,
@@ -196,10 +154,10 @@ declare module 'astro:content' {
>
? { data: TData; entryFilter: TEntryFilter; collectionFilter: TCollectionFilter; error: TError }
: { data: never; entryFilter: never; collectionFilter: never; error: never };
- type ExtractDataType = ExtractLoaderTypes['data'];
type ExtractEntryFilterType = ExtractLoaderTypes['entryFilter'];
type ExtractCollectionFilterType = ExtractLoaderTypes['collectionFilter'];
type ExtractErrorType = ExtractLoaderTypes['error'];
+ type ExtractDataType = ExtractLoaderTypes['data'];
type LiveLoaderDataType =
LiveContentConfig['collections'][C]['schema'] extends undefined
diff --git a/docs/astro.config.mjs b/docs/astro.config.mjs
index 850ab1a1..0ba9f472 100644
--- a/docs/astro.config.mjs
+++ b/docs/astro.config.mjs
@@ -1,43 +1,55 @@
import { defineConfig } from "astro/config";
import starlight from "@astrojs/starlight";
+/**
+ * Two Starlight breaking changes are handled here, both introduced between
+ * 0.31.1 and 0.41.5 (#1461):
+ *
+ * - **0.33.0** — `social` takes an array of link items, not an object.
+ * - **0.39.0** — autogenerated sidebar groups can no longer carry a `label`
+ * alongside `autogenerate`. The label now belongs to a group whose `items`
+ * contains the autogenerate config.
+ */
export default defineConfig({
integrations: [
starlight({
title: "NeoBoard",
- description:
- "Open-source dashboarding for Neo4j & PostgreSQL",
- social: {
- github: "https://github.com/alfredo1996/neoboard",
- },
+ description: "Open-source dashboarding for Neo4j & PostgreSQL",
+ social: [
+ {
+ icon: "github",
+ label: "GitHub",
+ href: "https://github.com/alfredo1996/neoboard",
+ },
+ ],
sidebar: [
{
label: "Getting Started",
- autogenerate: { directory: "getting-started" },
+ items: [{ autogenerate: { directory: "getting-started" } }],
},
{
label: "CLI",
- autogenerate: { directory: "cli" },
+ items: [{ autogenerate: { directory: "cli" } }],
},
{
label: "User Guides",
- autogenerate: { directory: "guides" },
+ items: [{ autogenerate: { directory: "guides" } }],
},
{
label: "Chart Types",
- autogenerate: { directory: "charts" },
+ items: [{ autogenerate: { directory: "charts" } }],
},
{
label: "Concepts",
- autogenerate: { directory: "concepts" },
+ items: [{ autogenerate: { directory: "concepts" } }],
},
{
label: "Administration",
- autogenerate: { directory: "administration" },
+ items: [{ autogenerate: { directory: "administration" } }],
},
{
label: "Developer Guide",
- autogenerate: { directory: "developer" },
+ items: [{ autogenerate: { directory: "developer" } }],
},
],
}),
diff --git a/docs/package-lock.json b/docs/package-lock.json
index d4c1cc87..5133bdfd 100644
--- a/docs/package-lock.json
+++ b/docs/package-lock.json
@@ -8,36 +8,230 @@
"name": "@neoboard/docs",
"version": "1.0.0",
"dependencies": {
- "@astrojs/starlight": "0.31.1",
- "astro": "5.3.0",
+ "@astrojs/starlight": "0.41.5",
+ "astro": "7.1.4",
"sharp": "^0.33.0"
+ },
+ "engines": {
+ "node": ">=20.3.0"
}
},
- "node_modules/@astrojs/compiler": {
- "version": "2.13.1",
- "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.13.1.tgz",
- "integrity": "sha512-f3FN83d2G/v32ipNClRKgYv30onQlMZX1vCeZMjPsMMPl1mDpmbl0+N5BYo4S/ofzqJyS5hvwacEo0CCVDn/Qg==",
- "license": "MIT"
+ "node_modules/@astrojs/compiler-binding": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding/-/compiler-binding-0.3.2.tgz",
+ "integrity": "sha512-8w/9CWmYrAJJ8N0SY3O43ws2BgxoW6u3QsD8u2mE140lMYAlwh+tlNoUeSBq22wVheFuiBbR212l6ixZ2IIgCQ==",
+ "license": "MIT",
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ },
+ "optionalDependencies": {
+ "@astrojs/compiler-binding-darwin-arm64": "0.3.2",
+ "@astrojs/compiler-binding-darwin-x64": "0.3.2",
+ "@astrojs/compiler-binding-linux-arm64-gnu": "0.3.2",
+ "@astrojs/compiler-binding-linux-arm64-musl": "0.3.2",
+ "@astrojs/compiler-binding-linux-x64-gnu": "0.3.2",
+ "@astrojs/compiler-binding-linux-x64-musl": "0.3.2",
+ "@astrojs/compiler-binding-wasm32-wasi": "0.3.2",
+ "@astrojs/compiler-binding-win32-arm64-msvc": "0.3.2",
+ "@astrojs/compiler-binding-win32-x64-msvc": "0.3.2"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding-darwin-arm64": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-darwin-arm64/-/compiler-binding-darwin-arm64-0.3.2.tgz",
+ "integrity": "sha512-MM8tn8CSimcfytaOla4b6acN8mKWiL/rlAA1fpT3/Wl7dNGSE4y8FjTN/zJVNnb63CsLWG5zZwCt01TXtDKh9g==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding-darwin-x64": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-darwin-x64/-/compiler-binding-darwin-x64-0.3.2.tgz",
+ "integrity": "sha512-2lXOlzf8xb7jLomRsf/aswh61/NnGusynB2OwFkK6k4pmOtpfXMYnG0PLfXrEvxXYj69NdCnmUYXtHDd+JOOag==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding-linux-arm64-gnu": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-arm64-gnu/-/compiler-binding-linux-arm64-gnu-0.3.2.tgz",
+ "integrity": "sha512-BmU3kWj7qnLrd4vzm49zFEPJ5oFnn1tCT4Vt9hZbqdU5Cmb8GZl7fn6VFsnNfe7B18a2gIFtVzbLINtYl5kBjQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding-linux-arm64-musl": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-arm64-musl/-/compiler-binding-linux-arm64-musl-0.3.2.tgz",
+ "integrity": "sha512-f0heT9ZZEseSu5bHCeb80eL2DH07ArE6U9xi1WT/PEusNjzPmEr3GJsjG1tRLo5VYUUYX7h3ScaqGmGrMOVGmw==",
+ "cpu": [
+ "arm64"
+ ],
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding-linux-x64-gnu": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-x64-gnu/-/compiler-binding-linux-x64-gnu-0.3.2.tgz",
+ "integrity": "sha512-M8fOUt0itRpqiGyoEA/ij184s8O+hqbCz3+YozRusOOM3osgGljpDThhbKAJjqh82wOo6FioQ4w8PBvU1XMD5Q==",
+ "cpu": [
+ "x64"
+ ],
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding-linux-x64-musl": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-x64-musl/-/compiler-binding-linux-x64-musl-0.3.2.tgz",
+ "integrity": "sha512-/Kebk8sO6HnLeSd691JkaAPfN7CqR9/KEXmWvyNPkaKNGmj8rTZ/lf2uXtnPu92Lan84UrKdIKVPy1fSo2encQ==",
+ "cpu": [
+ "x64"
+ ],
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding-wasm32-wasi": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-wasm32-wasi/-/compiler-binding-wasm32-wasi-0.3.2.tgz",
+ "integrity": "sha512-pUA6xbcOSB7DhfzIArB8BCAkFfAIqriiR7zl5zOStd6oU2G0kIKj+GUdGnyXyhfiv881Hffyk5tC0mR18sDjDw==",
+ "cpu": [
+ "wasm32"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@napi-rs/wasm-runtime": "^1.2.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding-win32-arm64-msvc": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-win32-arm64-msvc/-/compiler-binding-win32-arm64-msvc-0.3.2.tgz",
+ "integrity": "sha512-ESruf+6Qkl1trHUFxI6GSf6t52j8yN2kCNSzMWdzt7V/T09tFHrYzrVaJQohb2C9bJUH76pNvX6Zb51+xCQc9Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding-win32-x64-msvc": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-win32-x64-msvc/-/compiler-binding-win32-x64-msvc-0.3.2.tgz",
+ "integrity": "sha512-wzzVrEbOwbsLWOdEbocskjMRx2aZPxJ7ZbmL+jnpBamFwmigm+2M/wzuM6JWncocgYwLic1csSpalBh96kQKXA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@astrojs/compiler-rs": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-rs/-/compiler-rs-0.3.2.tgz",
+ "integrity": "sha512-xlx/T7JovIKduu4ucbTQUxQ5+Q8wxkHxhLjnZk3VlJbhbQ9RLvvuDk1p2YYFYFQ5y14dVm3FGGO4isQXa4F+Tg==",
+ "license": "MIT",
+ "dependencies": {
+ "@astrojs/compiler-binding": "0.3.2"
+ },
+ "engines": {
+ "node": ">=22.12.0"
+ }
},
"node_modules/@astrojs/internal-helpers": {
- "version": "0.7.6",
- "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.7.6.tgz",
- "integrity": "sha512-GOle7smBWKfMSP8osUIGOlB5kaHdQLV3foCsf+5Q9Wsuu+C6Fs3Ez/ttXmhjZ1HkSgsogcM1RXSjjOVieHq16Q==",
- "license": "MIT"
+ "version": "0.10.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.10.2.tgz",
+ "integrity": "sha512-yt7fMgPYqSM4Tmr+taTW6Per+hjJ8Pk6lA1PAcDyqzOt8HzJ6Kje5WzCxA2Sd+9wsUW7uhkLeoTMK0cXPwH9rQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.4",
+ "@types/mdast": "^4.0.4",
+ "js-yaml": "^4.3.0",
+ "picomatch": "^4.0.4",
+ "retext-smartypants": "^6.2.0",
+ "shiki": "^4.0.2",
+ "smol-toml": "^1.6.0",
+ "unified": "^11.0.5"
+ }
},
"node_modules/@astrojs/markdown-remark": {
- "version": "6.3.11",
- "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-6.3.11.tgz",
- "integrity": "sha512-hcaxX/5aC6lQgHeGh1i+aauvSwIT6cfyFjKWvExYSxUhZZBBdvCliOtu06gbQyhbe0pGJNoNmqNlQZ5zYUuIyQ==",
+ "version": "7.2.1",
+ "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-7.2.1.tgz",
+ "integrity": "sha512-jPVNIqTvk+yKviikszv/Y1U4jGUSKpp/Nw48QZV4qjWgp70j4Lkq3lhSDRbWwCfgKvEyO9GHuVbV1dM2WYXy1w==",
+ "extraneous": true,
"license": "MIT",
"dependencies": {
- "@astrojs/internal-helpers": "0.7.6",
- "@astrojs/prism": "3.3.0",
+ "@astrojs/internal-helpers": "0.10.1",
+ "@astrojs/prism": "4.0.2",
"github-slugger": "^2.0.0",
"hast-util-from-html": "^2.0.3",
"hast-util-to-text": "^4.0.2",
- "import-meta-resolve": "^4.2.0",
- "js-yaml": "^4.1.1",
"mdast-util-definitions": "^6.0.0",
"rehype-raw": "^7.0.0",
"rehype-stringify": "^10.0.1",
@@ -45,25 +239,54 @@
"remark-parse": "^11.0.0",
"remark-rehype": "^11.1.2",
"remark-smartypants": "^3.0.2",
- "shiki": "^3.21.0",
- "smol-toml": "^1.6.0",
"unified": "^11.0.5",
"unist-util-remove-position": "^5.0.0",
- "unist-util-visit": "^5.0.0",
+ "unist-util-visit": "^5.1.0",
"unist-util-visit-parents": "^6.0.2",
"vfile": "^6.0.3"
}
},
+ "node_modules/@astrojs/markdown-remark/node_modules/@astrojs/internal-helpers": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.10.1.tgz",
+ "integrity": "sha512-5phcroT/vmOOrYuuAxtkbPixy5hePtlz9i8K4OeDv3dNK6/UQRuXPOSRTxIOBbUY5Sonw2UaxjbuVc43Mcir6Q==",
+ "extraneous": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.4",
+ "@types/mdast": "^4.0.4",
+ "js-yaml": "^4.1.1",
+ "picomatch": "^4.0.4",
+ "retext-smartypants": "^6.2.0",
+ "shiki": "^4.0.2",
+ "smol-toml": "^1.6.0",
+ "unified": "^11.0.5"
+ }
+ },
+ "node_modules/@astrojs/markdown-satteri": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/@astrojs/markdown-satteri/-/markdown-satteri-0.3.5.tgz",
+ "integrity": "sha512-CvWVEFAbay7YO+i9SaqDJubipA5ckiVB89QWoMJ5XC0m5CtFg8JwZ7Kau6X9sYY7FZURH0w2l03ISH2jOS/RDQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@astrojs/internal-helpers": "0.10.2",
+ "@astrojs/prism": "4.0.2",
+ "github-slugger": "^2.0.0",
+ "hast-util-from-html": "^2.0.3",
+ "satteri": "^0.9.1"
+ }
+ },
"node_modules/@astrojs/mdx": {
- "version": "4.3.14",
- "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-4.3.14.tgz",
- "integrity": "sha512-FBrqJQORVm+rkRa2TS5CjU9PBA6hkhrwLVBSS9A77gN2+iehvjq1w6yya/d0YKC7osiVorKkr3Qd9wNbl0ZkGA==",
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-7.0.5.tgz",
+ "integrity": "sha512-wEM/HH1RiEntyPVagdiF+yArzfcYLKBB0C1RZspVidKZ97rRMbaqP1Nbl/GR0sJs8zwaceqxRymw8aOKKJRdYw==",
"license": "MIT",
"dependencies": {
- "@astrojs/markdown-remark": "6.3.11",
+ "@astrojs/internal-helpers": "0.10.2",
+ "@astrojs/markdown-remark": "7.2.2",
"@mdx-js/mdx": "^3.1.1",
- "acorn": "^8.15.0",
- "es-module-lexer": "^1.7.0",
+ "acorn": "^8.16.0",
+ "es-module-lexer": "^2.0.0",
"estree-util-visit": "^2.0.0",
"hast-util-to-html": "^9.0.5",
"piccolore": "^0.1.3",
@@ -71,26 +294,57 @@
"remark-gfm": "^4.0.1",
"remark-smartypants": "^3.0.2",
"source-map": "^0.7.6",
- "unist-util-visit": "^5.0.0",
+ "unist-util-visit": "^5.1.0",
"vfile": "^6.0.3"
},
"engines": {
- "node": "18.20.8 || ^20.3.0 || >=22.0.0"
+ "node": ">=22.12.0"
},
"peerDependencies": {
- "astro": "^5.0.0"
+ "@astrojs/markdown-satteri": "^0.3.1",
+ "astro": "^7.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@astrojs/markdown-satteri": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@astrojs/mdx/node_modules/@astrojs/markdown-remark": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-7.2.2.tgz",
+ "integrity": "sha512-FGfmK84zSNcrsBd0dl1gXE9JvZYElp8EXQa2jpHVAxG4deGKAp43wspxFupjADJX7MSsMRHwYCnfT6EyVmgeFQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@astrojs/internal-helpers": "0.10.2",
+ "@astrojs/prism": "4.0.2",
+ "github-slugger": "^2.0.0",
+ "hast-util-from-html": "^2.0.3",
+ "hast-util-to-text": "^4.0.2",
+ "mdast-util-definitions": "^6.0.0",
+ "rehype-raw": "^7.0.0",
+ "rehype-stringify": "^10.0.1",
+ "remark-gfm": "^4.0.1",
+ "remark-parse": "^11.0.0",
+ "remark-rehype": "^11.1.2",
+ "remark-smartypants": "^3.0.2",
+ "unified": "^11.0.5",
+ "unist-util-remove-position": "^5.0.0",
+ "unist-util-visit": "^5.1.0",
+ "unist-util-visit-parents": "^6.0.2",
+ "vfile": "^6.0.3"
}
},
"node_modules/@astrojs/prism": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.3.0.tgz",
- "integrity": "sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-4.0.2.tgz",
+ "integrity": "sha512-KTivpmnz6lDsC6o9H4+DNm2SrE/GHzw8cNAvEJwAvUT+eoaEnn/4NtbDNfRRaxaJHdp15gf+tfHAWiXR4wB3BA==",
"license": "MIT",
"dependencies": {
"prismjs": "^1.30.0"
},
"engines": {
- "node": "18.20.8 || ^20.3.0 || >=22.0.0"
+ "node": ">=22.12.0"
}
},
"node_modules/@astrojs/sitemap": {
@@ -105,83 +359,91 @@
}
},
"node_modules/@astrojs/starlight": {
- "version": "0.31.1",
- "resolved": "https://registry.npmjs.org/@astrojs/starlight/-/starlight-0.31.1.tgz",
- "integrity": "sha512-VIVkHugwgtEqJPiRH8+ouP0UqUfdmpBO9C64R+6QaQ2qmADNkI/BA3/YAJHTBZYlMQQGEEuLJwD9qpaUovi52Q==",
+ "version": "0.41.5",
+ "resolved": "https://registry.npmjs.org/@astrojs/starlight/-/starlight-0.41.5.tgz",
+ "integrity": "sha512-BNkyysByeqk9cXGNnd1fC1+kc9rrllo1Df/XD34wQg/I5HUX1Bc+F91aTktg17sapQs+mafzWSRgmURRyCNLKA==",
"license": "MIT",
"dependencies": {
- "@astrojs/mdx": "^4.0.5",
- "@astrojs/sitemap": "^3.2.1",
+ "@astrojs/markdown-satteri": "^0.3.2",
+ "@astrojs/mdx": "^7.0.0",
+ "@astrojs/sitemap": "^3.7.2",
"@pagefind/default-ui": "^1.3.0",
"@types/hast": "^3.0.4",
"@types/js-yaml": "^4.0.9",
"@types/mdast": "^4.0.4",
- "astro-expressive-code": "^0.40.0",
+ "astro-expressive-code": "^0.44.0",
"bcp-47": "^2.1.0",
- "hast-util-from-html": "^2.0.1",
- "hast-util-select": "^6.0.2",
- "hast-util-to-string": "^3.0.0",
- "hastscript": "^9.0.0",
- "i18next": "^23.11.5",
- "js-yaml": "^4.1.0",
- "mdast-util-directive": "^3.0.0",
- "mdast-util-to-markdown": "^2.1.0",
+ "hast-util-from-html": "^2.0.3",
+ "hast-util-select": "^6.0.4",
+ "hast-util-to-string": "^3.0.1",
+ "hastscript": "^9.0.1",
+ "i18next": "^26.0.7",
+ "js-yaml": "^4.1.1",
+ "klona": "^2.0.6",
+ "magic-string": "^0.30.21",
+ "mdast-util-directive": "^3.1.0",
+ "mdast-util-to-markdown": "^2.1.2",
"mdast-util-to-string": "^4.0.0",
- "pagefind": "^1.3.0",
- "rehype": "^13.0.1",
- "rehype-format": "^5.0.0",
- "remark-directive": "^3.0.0",
+ "pagefind": "^1.5.2",
+ "rehype": "^13.0.2",
+ "rehype-format": "^5.0.1",
+ "remark-directive": "^4.0.0",
+ "satteri": "^0.9.1",
+ "ultrahtml": "^1.6.0",
"unified": "^11.0.5",
- "unist-util-visit": "^5.0.0",
- "vfile": "^6.0.2"
+ "unist-util-visit": "^5.1.0",
+ "vfile": "^6.0.3"
},
"peerDependencies": {
- "astro": "^5.1.5"
+ "@astrojs/markdown-remark": "^7.2.0",
+ "astro": "^7.0.2"
+ },
+ "peerDependenciesMeta": {
+ "@astrojs/markdown-remark": {
+ "optional": true
+ }
}
},
"node_modules/@astrojs/telemetry": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.2.0.tgz",
- "integrity": "sha512-wxhSKRfKugLwLlr4OFfcqovk+LIFtKwLyGPqMsv+9/ibqqnW3Gv7tBhtKEb0gAyUAC4G9BTVQeQahqnQAhd6IQ==",
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.3.tgz",
+ "integrity": "sha512-C1TLn5sPJr0x4vk56piHWKbnqlEB8BKyte5Y45V02U+D7BGO5eMqZDH5aPjnkXQWJggvmsTXxH03QMZ9NgWLzQ==",
"license": "MIT",
"dependencies": {
- "ci-info": "^4.1.0",
- "debug": "^4.3.7",
- "dlv": "^1.1.3",
+ "ci-info": "^4.4.0",
"dset": "^3.1.4",
- "is-docker": "^3.0.0",
- "is-wsl": "^3.1.0",
- "which-pm-runs": "^1.1.0"
+ "is-docker": "^4.0.0",
+ "package-manager-detector": "^1.6.0"
},
"engines": {
- "node": "^18.17.1 || ^20.3.0 || >=22.0.0"
+ "node": "18.20.8 || ^20.3.0 || >=22.0.0"
}
},
"node_modules/@babel/helper-string-parser": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
- "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz",
+ "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==",
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
- "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz",
+ "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==",
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/parser": {
- "version": "7.29.2",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz",
- "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==",
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz",
+ "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==",
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.29.0"
+ "@babel/types": "^7.29.8"
},
"bin": {
"parser": "bin/babel-parser.js"
@@ -190,115 +452,334 @@
"node": ">=6.0.0"
}
},
- "node_modules/@babel/runtime": {
- "version": "7.29.2",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz",
- "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==",
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
"node_modules/@babel/types": {
- "version": "7.29.0",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz",
- "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==",
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz",
+ "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==",
"license": "MIT",
"dependencies": {
- "@babel/helper-string-parser": "^7.27.1",
- "@babel/helper-validator-identifier": "^7.28.5"
+ "@babel/helper-string-parser": "^7.29.7",
+ "@babel/helper-validator-identifier": "^7.29.7"
},
"engines": {
"node": ">=6.9.0"
}
},
- "node_modules/@ctrl/tinycolor": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-4.2.0.tgz",
- "integrity": "sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==",
- "license": "MIT",
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@emnapi/runtime": {
- "version": "1.9.2",
- "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.2.tgz",
- "integrity": "sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==",
+ "node_modules/@bruits/satteri-darwin-arm64": {
+ "version": "0.9.5",
+ "resolved": "https://registry.npmjs.org/@bruits/satteri-darwin-arm64/-/satteri-darwin-arm64-0.9.5.tgz",
+ "integrity": "sha512-iw4nZgx9v30lWo/MTngQqi1pI78KI0DnkSm+lVJGYdmPLgAyDNJigVhpG42/Iq55A6c1Ll8q66ljyyRiQUxwow==",
+ "cpu": [
+ "arm64"
+ ],
"license": "MIT",
"optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
+ "os": [
+ "darwin"
+ ]
},
- "node_modules/@esbuild/aix-ppc64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz",
- "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==",
+ "node_modules/@bruits/satteri-darwin-x64": {
+ "version": "0.9.5",
+ "resolved": "https://registry.npmjs.org/@bruits/satteri-darwin-x64/-/satteri-darwin-x64-0.9.5.tgz",
+ "integrity": "sha512-6T26Z5Kf3cFW2PSlk9p7zT7yVxvuBSiJvYyz9u8KjYwMTqZyIDOj2wDyNpxKV4+6yUVG7rddq2QwvG/8LJA2+Q==",
"cpu": [
- "ppc64"
+ "x64"
],
"license": "MIT",
"optional": true,
"os": [
- "aix"
- ],
- "engines": {
- "node": ">=18"
- }
+ "darwin"
+ ]
},
- "node_modules/@esbuild/android-arm": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz",
- "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==",
+ "node_modules/@bruits/satteri-linux-arm64-gnu": {
+ "version": "0.9.5",
+ "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-arm64-gnu/-/satteri-linux-arm64-gnu-0.9.5.tgz",
+ "integrity": "sha512-u51id17uJwNEMK9nBlICsq6U31c+XVqQueVBkwRIzZG+gMpS8TOJctt5h5Wz33Z8xnMdTd+adtACVz0yHgGuOA==",
"cpu": [
- "arm"
+ "arm64"
+ ],
+ "libc": [
+ "glibc"
],
"license": "MIT",
"optional": true,
"os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
+ "linux"
+ ]
},
- "node_modules/@esbuild/android-arm64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz",
- "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==",
+ "node_modules/@bruits/satteri-linux-arm64-musl": {
+ "version": "0.9.5",
+ "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-arm64-musl/-/satteri-linux-arm64-musl-0.9.5.tgz",
+ "integrity": "sha512-v39HxiwGC5Rqm01HksP6+5Y+xKLPlsuVFgIgpEAo+SiQ22c+mJVhS3u7Z6ePAKdhL5NJoK1xq70kLz3L13AhpQ==",
"cpu": [
"arm64"
],
+ "libc": [
+ "musl"
+ ],
"license": "MIT",
"optional": true,
"os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
+ "linux"
+ ]
},
- "node_modules/@esbuild/android-x64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz",
- "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==",
+ "node_modules/@bruits/satteri-linux-x64-gnu": {
+ "version": "0.9.5",
+ "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-x64-gnu/-/satteri-linux-x64-gnu-0.9.5.tgz",
+ "integrity": "sha512-F3uO8uFp3pAP5ZGXttwvh57GS7s0lL953tnNdyI2gRyP4kOOkp6pyGojNJzCjkDvWI2Cvb9iNrKok3aqQPauAw==",
"cpu": [
"x64"
],
+ "libc": [
+ "glibc"
+ ],
"license": "MIT",
"optional": true,
"os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
+ "linux"
+ ]
+ },
+ "node_modules/@bruits/satteri-linux-x64-musl": {
+ "version": "0.9.5",
+ "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-x64-musl/-/satteri-linux-x64-musl-0.9.5.tgz",
+ "integrity": "sha512-bicEqglLlz++mWyADaZoP0JY20s4vDfLjaPYgQqC+NI4zZLTOOg1T4GB8aqtc822Pqji8SQBmSrTb7CrP8i08Q==",
+ "cpu": [
+ "x64"
+ ],
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@bruits/satteri-wasm32-wasi": {
+ "version": "0.9.5",
+ "resolved": "https://registry.npmjs.org/@bruits/satteri-wasm32-wasi/-/satteri-wasm32-wasi-0.9.5.tgz",
+ "integrity": "sha512-zauAuMwfPnKPUkd4AFixRFpXdgKwP2mKgxrIIo2gJzW0/ZneF9dbHnLkojSpaBnCCp7VUL1hIi5WWZvB1CqmAQ==",
+ "cpu": [
+ "wasm32"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/core": "1.11.1",
+ "@emnapi/runtime": "1.11.1",
+ "@napi-rs/wasm-runtime": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@bruits/satteri-wasm32-wasi/node_modules/@emnapi/core": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz",
+ "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/wasi-threads": "1.2.2",
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@bruits/satteri-wasm32-wasi/node_modules/@emnapi/runtime": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz",
+ "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@bruits/satteri-wasm32-wasi/node_modules/@emnapi/wasi-threads": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz",
+ "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@bruits/satteri-win32-arm64-msvc": {
+ "version": "0.9.5",
+ "resolved": "https://registry.npmjs.org/@bruits/satteri-win32-arm64-msvc/-/satteri-win32-arm64-msvc-0.9.5.tgz",
+ "integrity": "sha512-SrfE7NEsgZjBvU3c+RR6oQRu0ToXY5uVJEbieXEF0YTctIV2zAVlbaMjWLts074QCgh3a+XHWkR/lWh2VH2LUg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@bruits/satteri-win32-x64-msvc": {
+ "version": "0.9.5",
+ "resolved": "https://registry.npmjs.org/@bruits/satteri-win32-x64-msvc/-/satteri-win32-x64-msvc-0.9.5.tgz",
+ "integrity": "sha512-5Kw9ZAtTGS8WHizyn+CJhjjfIQrw+7jcZodpmpXJjefnO15M8UexIi6JR2E5thyvsmHyhL6ZDDMUNR4bKJPd4g==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@capsizecss/unpack": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@capsizecss/unpack/-/unpack-4.0.1.tgz",
+ "integrity": "sha512-CuNiSqg7+e1cO/GjffyMOm5Tt2jUF9CWHHnvQ/UkqvtkGfHdgwEC0wpmq7fkN3gxwpRnrAN0WzO3vREKmNolMQ==",
+ "license": "MIT",
+ "dependencies": {
+ "fontkitten": "^1.0.3"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@clack/core": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/@clack/core/-/core-1.4.3.tgz",
+ "integrity": "sha512-/kr3UWNtdJfxZtPgDqUOmG2pvwlmcLGheex5yiZKdwbzZJxhV+HMNR9QNmyY5cGwTNV6LrR7Jtp+KjhUAP1qBQ==",
+ "license": "MIT",
+ "dependencies": {
+ "fast-wrap-ansi": "^0.2.0",
+ "sisteransi": "^1.0.5"
+ },
+ "engines": {
+ "node": ">= 20.12.0"
+ }
+ },
+ "node_modules/@clack/prompts": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-1.7.0.tgz",
+ "integrity": "sha512-y7/yvZ2TPAnR9+jnc00klvNNLkJiXFFrQA/hlLCcxA9a2A4zQIOimyFQ9XfwYKiGD1fb5GY8vbKIIgO8d5Tb2A==",
+ "license": "MIT",
+ "dependencies": {
+ "@clack/core": "1.4.3",
+ "fast-string-width": "^3.0.2",
+ "fast-wrap-ansi": "^0.2.0",
+ "sisteransi": "^1.0.5"
+ },
+ "engines": {
+ "node": ">= 20.12.0"
+ }
+ },
+ "node_modules/@ctrl/tinycolor": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-4.2.0.tgz",
+ "integrity": "sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@emnapi/core": {
+ "version": "1.11.3",
+ "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.3.tgz",
+ "integrity": "sha512-zLpS5asjEb7lq8jYLq37N6XKaE41DIexlY1rF/z4/tIl3wo13Sqm28fRyfIsKZD+NZ8mM5RoKkpW/rBcuoSZSg==",
+ "license": "MIT",
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "@emnapi/wasi-threads": "1.2.3",
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@emnapi/runtime": {
+ "version": "1.11.3",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.3.tgz",
+ "integrity": "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@emnapi/wasi-threads": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.3.tgz",
+ "integrity": "sha512-ELEBe8PsLvvJ6QMr0zLt8ffvOHW/dc1m3CEzNMg7aJUv3bMaoDtw2TXyDAwkYBuroxxuHEwhRTLJSe5sya547g==",
+ "license": "MIT",
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz",
+ "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz",
+ "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz",
+ "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz",
+ "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
},
"node_modules/@esbuild/darwin-arm64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz",
- "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz",
+ "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==",
"cpu": [
"arm64"
],
@@ -312,9 +793,9 @@
}
},
"node_modules/@esbuild/darwin-x64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz",
- "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz",
+ "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==",
"cpu": [
"x64"
],
@@ -328,9 +809,9 @@
}
},
"node_modules/@esbuild/freebsd-arm64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz",
- "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz",
+ "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==",
"cpu": [
"arm64"
],
@@ -344,9 +825,9 @@
}
},
"node_modules/@esbuild/freebsd-x64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz",
- "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz",
+ "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==",
"cpu": [
"x64"
],
@@ -360,9 +841,9 @@
}
},
"node_modules/@esbuild/linux-arm": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz",
- "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz",
+ "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==",
"cpu": [
"arm"
],
@@ -376,9 +857,9 @@
}
},
"node_modules/@esbuild/linux-arm64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz",
- "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz",
+ "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==",
"cpu": [
"arm64"
],
@@ -392,9 +873,9 @@
}
},
"node_modules/@esbuild/linux-ia32": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz",
- "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz",
+ "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==",
"cpu": [
"ia32"
],
@@ -408,9 +889,9 @@
}
},
"node_modules/@esbuild/linux-loong64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz",
- "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz",
+ "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==",
"cpu": [
"loong64"
],
@@ -424,9 +905,9 @@
}
},
"node_modules/@esbuild/linux-mips64el": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz",
- "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz",
+ "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==",
"cpu": [
"mips64el"
],
@@ -440,9 +921,9 @@
}
},
"node_modules/@esbuild/linux-ppc64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz",
- "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz",
+ "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==",
"cpu": [
"ppc64"
],
@@ -456,9 +937,9 @@
}
},
"node_modules/@esbuild/linux-riscv64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz",
- "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz",
+ "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==",
"cpu": [
"riscv64"
],
@@ -472,9 +953,9 @@
}
},
"node_modules/@esbuild/linux-s390x": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz",
- "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz",
+ "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==",
"cpu": [
"s390x"
],
@@ -488,9 +969,9 @@
}
},
"node_modules/@esbuild/linux-x64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz",
- "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz",
+ "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==",
"cpu": [
"x64"
],
@@ -504,9 +985,9 @@
}
},
"node_modules/@esbuild/netbsd-arm64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz",
- "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz",
+ "integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==",
"cpu": [
"arm64"
],
@@ -520,9 +1001,9 @@
}
},
"node_modules/@esbuild/netbsd-x64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz",
- "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz",
+ "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==",
"cpu": [
"x64"
],
@@ -536,9 +1017,9 @@
}
},
"node_modules/@esbuild/openbsd-arm64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz",
- "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz",
+ "integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==",
"cpu": [
"arm64"
],
@@ -552,9 +1033,9 @@
}
},
"node_modules/@esbuild/openbsd-x64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz",
- "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz",
+ "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==",
"cpu": [
"x64"
],
@@ -568,9 +1049,9 @@
}
},
"node_modules/@esbuild/openharmony-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz",
- "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz",
+ "integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==",
"cpu": [
"arm64"
],
@@ -584,9 +1065,9 @@
}
},
"node_modules/@esbuild/sunos-x64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz",
- "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz",
+ "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==",
"cpu": [
"x64"
],
@@ -600,9 +1081,9 @@
}
},
"node_modules/@esbuild/win32-arm64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz",
- "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz",
+ "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==",
"cpu": [
"arm64"
],
@@ -616,9 +1097,9 @@
}
},
"node_modules/@esbuild/win32-ia32": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz",
- "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz",
+ "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==",
"cpu": [
"ia32"
],
@@ -632,9 +1113,9 @@
}
},
"node_modules/@esbuild/win32-x64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz",
- "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz",
+ "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==",
"cpu": [
"x64"
],
@@ -648,9 +1129,9 @@
}
},
"node_modules/@expressive-code/core": {
- "version": "0.40.2",
- "resolved": "https://registry.npmjs.org/@expressive-code/core/-/core-0.40.2.tgz",
- "integrity": "sha512-gXY3v7jbgz6nWKvRpoDxK4AHUPkZRuJsM79vHX/5uhV9/qX6Qnctp/U/dMHog/LCVXcuOps+5nRmf1uxQVPb3w==",
+ "version": "0.44.1",
+ "resolved": "https://registry.npmjs.org/@expressive-code/core/-/core-0.44.1.tgz",
+ "integrity": "sha512-3dDo9N8D7hYrLNNMMWFovg3+aDUtnQm7c7z0GZc1c0LEFVBc0Q6lKG+tVT28gDadOvsgOANfCn35fgpe97Pmgg==",
"license": "MIT",
"dependencies": {
"@ctrl/tinycolor": "^4.0.4",
@@ -665,140 +1146,41 @@
}
},
"node_modules/@expressive-code/plugin-frames": {
- "version": "0.40.2",
- "resolved": "https://registry.npmjs.org/@expressive-code/plugin-frames/-/plugin-frames-0.40.2.tgz",
- "integrity": "sha512-aLw5IlDlZWb10Jo/TTDCVsmJhKfZ7FJI83Zo9VDrV0OBlmHAg7klZqw68VDz7FlftIBVAmMby53/MNXPnMjTSQ==",
+ "version": "0.44.1",
+ "resolved": "https://registry.npmjs.org/@expressive-code/plugin-frames/-/plugin-frames-0.44.1.tgz",
+ "integrity": "sha512-HC/bdRao9225ApcgO/e3jn8ZOhldKO7ob1O/Tcipvtv7Vb5nMphZhMtD9uuywpvxkPYBHJi3504WhrKg05Dwqg==",
"license": "MIT",
"dependencies": {
- "@expressive-code/core": "^0.40.2"
+ "@expressive-code/core": "^0.44.1"
}
},
"node_modules/@expressive-code/plugin-shiki": {
- "version": "0.40.2",
- "resolved": "https://registry.npmjs.org/@expressive-code/plugin-shiki/-/plugin-shiki-0.40.2.tgz",
- "integrity": "sha512-t2HMR5BO6GdDW1c1ISBTk66xO503e/Z8ecZdNcr6E4NpUfvY+MRje+LtrcvbBqMwWBBO8RpVKcam/Uy+1GxwKQ==",
- "license": "MIT",
- "dependencies": {
- "@expressive-code/core": "^0.40.2",
- "shiki": "^1.26.1"
- }
- },
- "node_modules/@expressive-code/plugin-shiki/node_modules/@shikijs/core": {
- "version": "1.29.2",
- "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.29.2.tgz",
- "integrity": "sha512-vju0lY9r27jJfOY4Z7+Rt/nIOjzJpZ3y+nYpqtUZInVoXQ/TJZcfGnNOGnKjFdVZb8qexiCuSlZRKcGfhhTTZQ==",
- "license": "MIT",
- "dependencies": {
- "@shikijs/engine-javascript": "1.29.2",
- "@shikijs/engine-oniguruma": "1.29.2",
- "@shikijs/types": "1.29.2",
- "@shikijs/vscode-textmate": "^10.0.1",
- "@types/hast": "^3.0.4",
- "hast-util-to-html": "^9.0.4"
- }
- },
- "node_modules/@expressive-code/plugin-shiki/node_modules/@shikijs/engine-javascript": {
- "version": "1.29.2",
- "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-1.29.2.tgz",
- "integrity": "sha512-iNEZv4IrLYPv64Q6k7EPpOCE/nuvGiKl7zxdq0WFuRPF5PAE9PRo2JGq/d8crLusM59BRemJ4eOqrFrC4wiQ+A==",
- "license": "MIT",
- "dependencies": {
- "@shikijs/types": "1.29.2",
- "@shikijs/vscode-textmate": "^10.0.1",
- "oniguruma-to-es": "^2.2.0"
- }
- },
- "node_modules/@expressive-code/plugin-shiki/node_modules/@shikijs/engine-oniguruma": {
- "version": "1.29.2",
- "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.29.2.tgz",
- "integrity": "sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA==",
- "license": "MIT",
- "dependencies": {
- "@shikijs/types": "1.29.2",
- "@shikijs/vscode-textmate": "^10.0.1"
- }
- },
- "node_modules/@expressive-code/plugin-shiki/node_modules/@shikijs/langs": {
- "version": "1.29.2",
- "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-1.29.2.tgz",
- "integrity": "sha512-FIBA7N3LZ+223U7cJDUYd5shmciFQlYkFXlkKVaHsCPgfVLiO+e12FmQE6Tf9vuyEsFe3dIl8qGWKXgEHL9wmQ==",
- "license": "MIT",
- "dependencies": {
- "@shikijs/types": "1.29.2"
- }
- },
- "node_modules/@expressive-code/plugin-shiki/node_modules/@shikijs/themes": {
- "version": "1.29.2",
- "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-1.29.2.tgz",
- "integrity": "sha512-i9TNZlsq4uoyqSbluIcZkmPL9Bfi3djVxRnofUHwvx/h6SRW3cwgBC5SML7vsDcWyukY0eCzVN980rqP6qNl9g==",
- "license": "MIT",
- "dependencies": {
- "@shikijs/types": "1.29.2"
- }
- },
- "node_modules/@expressive-code/plugin-shiki/node_modules/@shikijs/types": {
- "version": "1.29.2",
- "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.29.2.tgz",
- "integrity": "sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw==",
- "license": "MIT",
- "dependencies": {
- "@shikijs/vscode-textmate": "^10.0.1",
- "@types/hast": "^3.0.4"
- }
- },
- "node_modules/@expressive-code/plugin-shiki/node_modules/oniguruma-to-es": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-2.3.0.tgz",
- "integrity": "sha512-bwALDxriqfKGfUufKGGepCzu9x7nJQuoRoAFp4AnwehhC2crqrDIAP/uN2qdlsAvSMpeRC3+Yzhqc7hLmle5+g==",
- "license": "MIT",
- "dependencies": {
- "emoji-regex-xs": "^1.0.0",
- "regex": "^5.1.1",
- "regex-recursion": "^5.1.1"
- }
- },
- "node_modules/@expressive-code/plugin-shiki/node_modules/regex": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/regex/-/regex-5.1.1.tgz",
- "integrity": "sha512-dN5I359AVGPnwzJm2jN1k0W9LPZ+ePvoOeVMMfqIMFz53sSwXkxaJoxr50ptnsC771lK95BnTrVSZxq0b9yCGw==",
- "license": "MIT",
- "dependencies": {
- "regex-utilities": "^2.3.0"
- }
- },
- "node_modules/@expressive-code/plugin-shiki/node_modules/regex-recursion": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-5.1.1.tgz",
- "integrity": "sha512-ae7SBCbzVNrIjgSbh7wMznPcQel1DNlDtzensnFxpiNpXt1U2ju/bHugH422r+4LAVS1FpW1YCwilmnNsjum9w==",
+ "version": "0.44.1",
+ "resolved": "https://registry.npmjs.org/@expressive-code/plugin-shiki/-/plugin-shiki-0.44.1.tgz",
+ "integrity": "sha512-YApiZt3buUzBwL5tqj8G+sYC5NjMjRCHgQwr9bmGl69rtcHy6fE9dooWUeKYB978fJT2BuxT5FeHcF47rA3SEg==",
"license": "MIT",
"dependencies": {
- "regex": "^5.1.1",
- "regex-utilities": "^2.3.0"
+ "@expressive-code/core": "^0.44.1",
+ "shiki": "^4.0.2"
}
},
- "node_modules/@expressive-code/plugin-shiki/node_modules/shiki": {
- "version": "1.29.2",
- "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.29.2.tgz",
- "integrity": "sha512-njXuliz/cP+67jU2hukkxCNuH1yUi4QfdZZY+sMr5PPrIyXSu5iTb/qYC4BiWWB0vZ+7TbdvYUCeL23zpwCfbg==",
+ "node_modules/@expressive-code/plugin-text-markers": {
+ "version": "0.44.1",
+ "resolved": "https://registry.npmjs.org/@expressive-code/plugin-text-markers/-/plugin-text-markers-0.44.1.tgz",
+ "integrity": "sha512-B3BsJoJ8CFMlcIX9f+X9tcI3C4zPDO601+YuLi9GheSTNro7ZfqSjLptMQKBHOWZvxnAtY5zvIX7iO/qtBhNBg==",
"license": "MIT",
"dependencies": {
- "@shikijs/core": "1.29.2",
- "@shikijs/engine-javascript": "1.29.2",
- "@shikijs/engine-oniguruma": "1.29.2",
- "@shikijs/langs": "1.29.2",
- "@shikijs/themes": "1.29.2",
- "@shikijs/types": "1.29.2",
- "@shikijs/vscode-textmate": "^10.0.1",
- "@types/hast": "^3.0.4"
+ "@expressive-code/core": "^0.44.1"
}
},
- "node_modules/@expressive-code/plugin-text-markers": {
- "version": "0.40.2",
- "resolved": "https://registry.npmjs.org/@expressive-code/plugin-text-markers/-/plugin-text-markers-0.40.2.tgz",
- "integrity": "sha512-/XoLjD67K9nfM4TgDlXAExzMJp6ewFKxNpfUw4F7q5Ecy+IU3/9zQQG/O70Zy+RxYTwKGw2MA9kd7yelsxnSmw==",
+ "node_modules/@img/colour": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz",
+ "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==",
"license": "MIT",
- "dependencies": {
- "@expressive-code/core": "^0.40.2"
+ "optional": true,
+ "engines": {
+ "node": ">=18"
}
},
"node_modules/@img/sharp-darwin-arm64": {
@@ -845,6 +1227,41 @@
"@img/sharp-libvips-darwin-x64": "1.0.4"
}
},
+ "node_modules/@img/sharp-freebsd-wasm32": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-freebsd-wasm32/-/sharp-freebsd-wasm32-0.35.3.tgz",
+ "integrity": "sha512-lUxcqWIj2wMQ9BrwNjngcr1gWUr5xgaGThBRqPPalIC2n67Cqj1uPh8NnA/ZhAg8hUbKl+kVHKwgUIwe6ZYPrg==",
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "dependencies": {
+ "@img/sharp-wasm32": "0.35.3"
+ },
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-freebsd-wasm32/node_modules/@img/sharp-wasm32": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.35.3.tgz",
+ "integrity": "sha512-cZ0XkcYGpHZkqW6iCkqTcmUC0CD9DhD5d/qeZlZkfRBn6GnHniZXLUo5+9xw8Iv76YE6LQFN9YNBlKREcCG76w==",
+ "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/runtime": "^1.11.1"
+ },
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
"node_modules/@img/sharp-libvips-darwin-arm64": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz",
@@ -884,6 +1301,9 @@
"cpu": [
"arm"
],
+ "libc": [
+ "glibc"
+ ],
"license": "LGPL-3.0-or-later",
"optional": true,
"os": [
@@ -900,6 +1320,9 @@
"cpu": [
"arm64"
],
+ "libc": [
+ "glibc"
+ ],
"license": "LGPL-3.0-or-later",
"optional": true,
"os": [
@@ -909,12 +1332,15 @@
"url": "https://opencollective.com/libvips"
}
},
- "node_modules/@img/sharp-libvips-linux-s390x": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz",
- "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==",
+ "node_modules/@img/sharp-libvips-linux-ppc64": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.3.2.tgz",
+ "integrity": "sha512-3z0NHDxD6n5I9gc05U1eW1AyRm+Gznzq3naMrthPNqE6oYykcogW0l/jfpJdjYnuNl8R7yI9pNbE1XiUeyq0Aw==",
"cpu": [
- "s390x"
+ "ppc64"
+ ],
+ "libc": [
+ "glibc"
],
"license": "LGPL-3.0-or-later",
"optional": true,
@@ -925,12 +1351,15 @@
"url": "https://opencollective.com/libvips"
}
},
- "node_modules/@img/sharp-libvips-linux-x64": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz",
- "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==",
+ "node_modules/@img/sharp-libvips-linux-riscv64": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.3.2.tgz",
+ "integrity": "sha512-bsb4rI+NldGOsXuej2r8OdSS8+zXDVaCWxyWrcv6kneTOlgAHtZABRzBBCwdsPiD90J4myNJuHpg6kA20ImW/w==",
"cpu": [
- "x64"
+ "riscv64"
+ ],
+ "libc": [
+ "glibc"
],
"license": "LGPL-3.0-or-later",
"optional": true,
@@ -941,13 +1370,54 @@
"url": "https://opencollective.com/libvips"
}
},
- "node_modules/@img/sharp-libvips-linuxmusl-arm64": {
+ "node_modules/@img/sharp-libvips-linux-s390x": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz",
+ "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==",
+ "cpu": [
+ "s390x"
+ ],
+ "libc": [
+ "glibc"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-x64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz",
+ "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==",
+ "cpu": [
+ "x64"
+ ],
+ "libc": [
+ "glibc"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linuxmusl-arm64": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz",
"integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==",
"cpu": [
"arm64"
],
+ "libc": [
+ "musl"
+ ],
"license": "LGPL-3.0-or-later",
"optional": true,
"os": [
@@ -964,6 +1434,9 @@
"cpu": [
"x64"
],
+ "libc": [
+ "musl"
+ ],
"license": "LGPL-3.0-or-later",
"optional": true,
"os": [
@@ -980,6 +1453,9 @@
"cpu": [
"arm"
],
+ "libc": [
+ "glibc"
+ ],
"license": "Apache-2.0",
"optional": true,
"os": [
@@ -1002,6 +1478,9 @@
"cpu": [
"arm64"
],
+ "libc": [
+ "glibc"
+ ],
"license": "Apache-2.0",
"optional": true,
"os": [
@@ -1017,6 +1496,56 @@
"@img/sharp-libvips-linux-arm64": "1.0.4"
}
},
+ "node_modules/@img/sharp-linux-ppc64": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.35.3.tgz",
+ "integrity": "sha512-sMd8rDxmpLOwv/7N44klFjOD5DUO7FLdjiXDI0hoxYaf7Ar262dQIEkosE98bps+5HPLtp/EvNqeqQtOycP/IA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "libc": [
+ "glibc"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-ppc64": "1.3.2"
+ }
+ },
+ "node_modules/@img/sharp-linux-riscv64": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.35.3.tgz",
+ "integrity": "sha512-0Eob78yjlYPfL5vMNWAW55l3R9Y6BQS/gOfe0ZcP9mEz9ohhKSt4im1hayiknXgf8AWrFqMvJcKIdmLmEe7yeQ==",
+ "cpu": [
+ "riscv64"
+ ],
+ "libc": [
+ "glibc"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-riscv64": "1.3.2"
+ }
+ },
"node_modules/@img/sharp-linux-s390x": {
"version": "0.33.5",
"resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz",
@@ -1024,6 +1553,9 @@
"cpu": [
"s390x"
],
+ "libc": [
+ "glibc"
+ ],
"license": "Apache-2.0",
"optional": true,
"os": [
@@ -1046,6 +1578,9 @@
"cpu": [
"x64"
],
+ "libc": [
+ "glibc"
+ ],
"license": "Apache-2.0",
"optional": true,
"os": [
@@ -1068,6 +1603,9 @@
"cpu": [
"arm64"
],
+ "libc": [
+ "musl"
+ ],
"license": "Apache-2.0",
"optional": true,
"os": [
@@ -1090,6 +1628,9 @@
"cpu": [
"x64"
],
+ "libc": [
+ "musl"
+ ],
"license": "Apache-2.0",
"optional": true,
"os": [
@@ -1124,6 +1665,60 @@
"url": "https://opencollective.com/libvips"
}
},
+ "node_modules/@img/sharp-webcontainers-wasm32": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-webcontainers-wasm32/-/sharp-webcontainers-wasm32-0.35.3.tgz",
+ "integrity": "sha512-2rnq7bX3NzeR2T4YWgz8qiG4h3TSdMe+vN1iQXpJleSJ3SM5zQ8Fy2SyyXAWlbxpEZ2Y+Z4u1BePgJEYbSy80Q==",
+ "cpu": [
+ "wasm32"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "@img/sharp-wasm32": "0.35.3"
+ },
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-webcontainers-wasm32/node_modules/@img/sharp-wasm32": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.35.3.tgz",
+ "integrity": "sha512-cZ0XkcYGpHZkqW6iCkqTcmUC0CD9DhD5d/qeZlZkfRBn6GnHniZXLUo5+9xw8Iv76YE6LQFN9YNBlKREcCG76w==",
+ "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/runtime": "^1.11.1"
+ },
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-win32-arm64": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.35.3.tgz",
+ "integrity": "sha512-4bPwFdMbeC4JQ8L8LOyWp6nsHcboP5fxkp6iPOXz2Vg49R42TuMs2whkJ5OAP4/Ul035qOzy0AecOF9VOscn4w==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
"node_modules/@img/sharp-win32-ia32": {
"version": "0.33.5",
"resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz",
@@ -1205,39 +1800,25 @@
"url": "https://opencollective.com/unified"
}
},
- "node_modules/@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "node_modules/@napi-rs/wasm-runtime": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.2.tgz",
+ "integrity": "sha512-JfB4kuJQjaoHuCTseIINHtHWeJnvgEcxjwA5t/Y00ZgaOO1Crz3fjT/p8kT28zA/Caz7oiUMn3d6H2yOVCVwuw==",
"license": "MIT",
+ "optional": true,
"dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
+ "@tybys/wasm-util": "^0.10.3"
},
"engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
+ "node": "^20.19.0 || ^22.13.0 || >=23.5.0"
},
- "engines": {
- "node": ">= 8"
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Brooooooklyn"
+ },
+ "peerDependencies": {
+ "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.3",
+ "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.3"
}
},
"node_modules/@oslojs/encoding": {
@@ -1246,10 +1827,19 @@
"integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==",
"license": "MIT"
},
+ "node_modules/@oxc-project/types": {
+ "version": "0.143.0",
+ "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.143.0.tgz",
+ "integrity": "sha512-u6JZdLBTLotrNC9Vd6vPssINdzcCzleKAH6EJKImQb7GtYvX5keN2dxkoK44stCc4tffE6QQRtZTXVSzsLUlWA==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/Boshen"
+ }
+ },
"node_modules/@pagefind/darwin-arm64": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/@pagefind/darwin-arm64/-/darwin-arm64-1.4.0.tgz",
- "integrity": "sha512-2vMqkbv3lbx1Awea90gTaBsvpzgRs7MuSgKDxW0m9oV1GPZCZbZBJg/qL83GIUEN2BFlY46dtUZi54pwH+/pTQ==",
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/@pagefind/darwin-arm64/-/darwin-arm64-1.5.2.tgz",
+ "integrity": "sha512-MXpI+7HsAdPkvJ0gk9xj9g541BCqBZOBbdwj9g6lB5LCj6kSV6nqDSjzcAJwvOsfu0fjwvC8hQU+ecfhp+MpiQ==",
"cpu": [
"arm64"
],
@@ -1260,9 +1850,9 @@
]
},
"node_modules/@pagefind/darwin-x64": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/@pagefind/darwin-x64/-/darwin-x64-1.4.0.tgz",
- "integrity": "sha512-e7JPIS6L9/cJfow+/IAqknsGqEPjJnVXGjpGm25bnq+NPdoD3c/7fAwr1OXkG4Ocjx6ZGSCijXEV4ryMcH2E3A==",
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/@pagefind/darwin-x64/-/darwin-x64-1.5.2.tgz",
+ "integrity": "sha512-IojxFWMEJe0RQ7PQ3KXQsPIImNsbpPYpoZ+QUDrL8fAl/O27IX+LVLs74/UzEZy5uA2LD8Nz1AiwKr72vrkZQw==",
"cpu": [
"x64"
],
@@ -1273,15 +1863,15 @@
]
},
"node_modules/@pagefind/default-ui": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/@pagefind/default-ui/-/default-ui-1.4.0.tgz",
- "integrity": "sha512-wie82VWn3cnGEdIjh4YwNESyS1G6vRHwL6cNjy9CFgNnWW/PGRjsLq300xjVH5sfPFK3iK36UxvIBymtQIEiSQ==",
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/@pagefind/default-ui/-/default-ui-1.5.2.tgz",
+ "integrity": "sha512-pm1LMnQg8N2B3n2TnjKlhaFihpz6zTiA4HiGQ6/slKO/+8K9CAU5kcjdSSPgpuk1PMuuN4hxLipUIifnrkl3Sg==",
"license": "MIT"
},
"node_modules/@pagefind/freebsd-x64": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/@pagefind/freebsd-x64/-/freebsd-x64-1.4.0.tgz",
- "integrity": "sha512-WcJVypXSZ+9HpiqZjFXMUobfFfZZ6NzIYtkhQ9eOhZrQpeY5uQFqNWLCk7w9RkMUwBv1HAMDW3YJQl/8OqsV0Q==",
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/@pagefind/freebsd-x64/-/freebsd-x64-1.5.2.tgz",
+ "integrity": "sha512-7EVzo9+0w+2cbe671BtMj10UlNo83I+HrLVLfRxO731svHRJKUfJ/mo05gU14pe9PCfpKNQT8FS3Xc/oDN6pOA==",
"cpu": [
"x64"
],
@@ -1292,9 +1882,9 @@
]
},
"node_modules/@pagefind/linux-arm64": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/@pagefind/linux-arm64/-/linux-arm64-1.4.0.tgz",
- "integrity": "sha512-PIt8dkqt4W06KGmQjONw7EZbhDF+uXI7i0XtRLN1vjCUxM9vGPdtJc2mUyVPevjomrGz5M86M8bqTr6cgDp1Uw==",
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/@pagefind/linux-arm64/-/linux-arm64-1.5.2.tgz",
+ "integrity": "sha512-Ovt9+K35sqzn8H3ZMXGwls4TD/wMJuvRtShHIsmUQREmaxjrDEX7gHckRCrwYJ4XE1H1p6HkLz3wukrAnsfXQw==",
"cpu": [
"arm64"
],
@@ -1305,9 +1895,9 @@
]
},
"node_modules/@pagefind/linux-x64": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/@pagefind/linux-x64/-/linux-x64-1.4.0.tgz",
- "integrity": "sha512-z4oddcWwQ0UHrTHR8psLnVlz6USGJ/eOlDPTDYZ4cI8TK8PgwRUPQZp9D2iJPNIPcS6Qx/E4TebjuGJOyK8Mmg==",
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/@pagefind/linux-x64/-/linux-x64-1.5.2.tgz",
+ "integrity": "sha512-V+tFqHKXhQKq/WqPBD67AFy7scn1/aZID00ws4fSDd+1daSi5UHR9VVlRrOUYKxn3VuFQYRD7lYXdZK1WED1YA==",
"cpu": [
"x64"
],
@@ -1317,12 +1907,12 @@
"linux"
]
},
- "node_modules/@pagefind/windows-x64": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/@pagefind/windows-x64/-/windows-x64-1.4.0.tgz",
- "integrity": "sha512-NkT+YAdgS2FPCn8mIA9bQhiBs+xmniMGq1LFPDhcFn0+2yIUEiIG06t7bsZlhdjknEQRTSdT7YitP6fC5qwP0g==",
+ "node_modules/@pagefind/windows-arm64": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/@pagefind/windows-arm64/-/windows-arm64-1.5.2.tgz",
+ "integrity": "sha512-hN9Nh90fNW61nNRCW9ZyQrAj/mD0eRvmJ8NlTUzkbuW8kIzGJUi3cxjFkEcMZ5h/8FsKWD/VcouZl4yo1F7B6g==",
"cpu": [
- "x64"
+ "arm64"
],
"license": "MIT",
"optional": true,
@@ -1330,51 +1920,23 @@
"win32"
]
},
- "node_modules/@rollup/pluginutils": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz",
- "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==",
- "license": "MIT",
- "dependencies": {
- "@types/estree": "^1.0.0",
- "estree-walker": "^2.0.2",
- "picomatch": "^4.0.2"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "peerDependencies": {
- "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
- },
- "peerDependenciesMeta": {
- "rollup": {
- "optional": true
- }
- }
- },
- "node_modules/@rollup/pluginutils/node_modules/estree-walker": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
- "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
- "license": "MIT"
- },
- "node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.60.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.1.tgz",
- "integrity": "sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==",
+ "node_modules/@pagefind/windows-x64": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/@pagefind/windows-x64/-/windows-x64-1.5.2.tgz",
+ "integrity": "sha512-Fa2Iyw7kaDRzGMfNYNUXNW2zbL5FQVDgSOcbDHdzBrDEdpqOqg8TcZ68F22ol6NJ9IGzvUdmeyZypLW5dyhqsg==",
"cpu": [
- "arm"
+ "x64"
],
"license": "MIT",
"optional": true,
"os": [
- "android"
+ "win32"
]
},
- "node_modules/@rollup/rollup-android-arm64": {
- "version": "4.60.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.1.tgz",
- "integrity": "sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==",
+ "node_modules/@rolldown/binding-android-arm64": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.3.tgz",
+ "integrity": "sha512-zrJtHDcaZJ1Fp7xf4hNl+7seH9Cn/N5TwLYkhgXREtBwAd/jaqW3uqeHxpDugJLVICWg4eW44kOQEGJ1r6jCGw==",
"cpu": [
"arm64"
],
@@ -1382,12 +1944,15 @@
"optional": true,
"os": [
"android"
- ]
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
},
- "node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.60.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.1.tgz",
- "integrity": "sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==",
+ "node_modules/@rolldown/binding-darwin-arm64": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.3.tgz",
+ "integrity": "sha512-ieIiibVCp0tX7TLu2cafoNPv8wJyYi01ekXpbf8q2j7F4rGAhhXb/eQh7ge9DRBY78GwmRQtvjZDux7EDbA8kA==",
"cpu": [
"arm64"
],
@@ -1395,12 +1960,15 @@
"optional": true,
"os": [
"darwin"
- ]
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
},
- "node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.60.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.1.tgz",
- "integrity": "sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==",
+ "node_modules/@rolldown/binding-darwin-x64": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.3.tgz",
+ "integrity": "sha512-Zh9tCon19eDXJoihx0rqKhMUlMYqzwj3aPsSuHmI4RWZh62dWUL+DJN4C5YQya5TcQBJU/Fe8+rY0jhXTQITqA==",
"cpu": [
"x64"
],
@@ -1408,25 +1976,15 @@
"optional": true,
"os": [
"darwin"
- ]
- },
- "node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.60.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.1.tgz",
- "integrity": "sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==",
- "cpu": [
- "arm64"
],
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
},
- "node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.60.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.1.tgz",
- "integrity": "sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==",
+ "node_modules/@rolldown/binding-freebsd-x64": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.3.tgz",
+ "integrity": "sha512-nGbJWewA1wrXXZiQhjAT5rhibGfns5ZNkDVqxsO6zJ3f3YvpoDNNmGMSbbhLuXKjNScaBJVOAboztAWVespQMg==",
"cpu": [
"x64"
],
@@ -1434,25 +1992,15 @@
"optional": true,
"os": [
"freebsd"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.60.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.1.tgz",
- "integrity": "sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==",
- "cpu": [
- "arm"
],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
},
- "node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.60.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.1.tgz",
- "integrity": "sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==",
+ "node_modules/@rolldown/binding-linux-arm-gnueabihf": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.3.tgz",
+ "integrity": "sha512-QNniJr5Kml0kDEB98jiDOJjXNroxIIi0IXIbdYzY26Xt1pVbeP62+KnoIZLwirOymX/0jDk/2gI/bNUv7A7OIw==",
"cpu": [
"arm"
],
@@ -1460,181 +2008,145 @@
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
},
- "node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.60.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.1.tgz",
- "integrity": "sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==",
+ "node_modules/@rolldown/binding-linux-arm64-gnu": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.3.tgz",
+ "integrity": "sha512-TkqEAcmmvH3I/q4114NB4RVt6241Dao48pF45uLcFGrwAaIn0iITgTAKP/dLjbN0R4buJjGb91+UHSoFmpgIWw==",
"cpu": [
"arm64"
],
+ "libc": [
+ "glibc"
+ ],
"license": "MIT",
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
},
- "node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.60.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.1.tgz",
- "integrity": "sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==",
+ "node_modules/@rolldown/binding-linux-arm64-musl": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.3.tgz",
+ "integrity": "sha512-NHqjnxpsndf4MPymxteFAWHHfkTL8HjWh1KB7z23ofZ6QO2euONuxDXjat69dKZRALnGypg8k8SsK8vZJoXv1Q==",
"cpu": [
"arm64"
],
+ "libc": [
+ "musl"
+ ],
"license": "MIT",
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
},
- "node_modules/@rollup/rollup-linux-loong64-gnu": {
- "version": "4.60.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.1.tgz",
- "integrity": "sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==",
+ "node_modules/@rolldown/binding-linux-ppc64-gnu": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.3.tgz",
+ "integrity": "sha512-6tbrbwfz5GB9DQ4Jwo6hy9v+vR31xZlvzZ6n5Xut6Hhx5PvrA9q/HsK8KMaYQp063iqZGXwNvZtYNLD7EM/x0w==",
"cpu": [
- "loong64"
+ "ppc64"
+ ],
+ "libc": [
+ "glibc"
],
"license": "MIT",
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
},
- "node_modules/@rollup/rollup-linux-loong64-musl": {
- "version": "4.60.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.1.tgz",
- "integrity": "sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==",
+ "node_modules/@rolldown/binding-linux-s390x-gnu": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.3.tgz",
+ "integrity": "sha512-oyuXxXmoZHjXC917IAPFAAv4wWAa0cM9afk8nx1+9/jNNOX1uPf8yDA6p7G0RypOfw/X0PQt5IfoquY1um+zSg==",
"cpu": [
- "loong64"
+ "s390x"
+ ],
+ "libc": [
+ "glibc"
],
"license": "MIT",
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
},
- "node_modules/@rollup/rollup-linux-ppc64-gnu": {
- "version": "4.60.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.1.tgz",
- "integrity": "sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==",
+ "node_modules/@rolldown/binding-linux-x64-gnu": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.3.tgz",
+ "integrity": "sha512-TytMwF2KVGqP2tgd0I1OY0PAv78dZRAYcF5ssDzjM34SUXCED3uXvSd5+lHoC0bTD6eEdFz7LdQNCO1y0oVk9w==",
"cpu": [
- "ppc64"
+ "x64"
+ ],
+ "libc": [
+ "glibc"
],
"license": "MIT",
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
},
- "node_modules/@rollup/rollup-linux-ppc64-musl": {
- "version": "4.60.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.1.tgz",
- "integrity": "sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==",
+ "node_modules/@rolldown/binding-linux-x64-musl": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.3.tgz",
+ "integrity": "sha512-/E9m3qstrJFVPoULV25mVQblSNExY2+kBsYe4sy0Tn0yOOgJ8wZbZt3KnRbF/XeU2Gl1STKUQnDNTqhIE5MD4A==",
"cpu": [
- "ppc64"
+ "x64"
+ ],
+ "libc": [
+ "musl"
],
"license": "MIT",
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
},
- "node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.60.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.1.tgz",
- "integrity": "sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==",
+ "node_modules/@rolldown/binding-openharmony-arm64": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.3.tgz",
+ "integrity": "sha512-Kr0OcsoQI816i6HOl3vFHpd1K0eZyh76zgfj4c1nTyaTsd5r2Mj1lwM4R90y/qaCfmTn9eHy0SKwi98eitRxug==",
"cpu": [
- "riscv64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-riscv64-musl": {
- "version": "4.60.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.1.tgz",
- "integrity": "sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==",
- "cpu": [
- "riscv64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.60.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.1.tgz",
- "integrity": "sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==",
- "cpu": [
- "s390x"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.60.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.1.tgz",
- "integrity": "sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.60.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.1.tgz",
- "integrity": "sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-openbsd-x64": {
- "version": "4.60.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.1.tgz",
- "integrity": "sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ]
- },
- "node_modules/@rollup/rollup-openharmony-arm64": {
- "version": "4.60.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.1.tgz",
- "integrity": "sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==",
- "cpu": [
- "arm64"
+ "arm64"
],
"license": "MIT",
"optional": true,
"os": [
"openharmony"
- ]
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
},
- "node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.60.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.1.tgz",
- "integrity": "sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==",
+ "node_modules/@rolldown/binding-win32-arm64-msvc": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.3.tgz",
+ "integrity": "sha512-hOtMwTqnME+/gJcH/PCZ0wn0zPUjiWOgkHpxbSJpfGKMezHltx1S7/k1SitzVa7Ww2cqrDDaFbZEhcJZO8o+Jw==",
"cpu": [
"arm64"
],
@@ -1642,25 +2154,15 @@
"optional": true,
"os": [
"win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.60.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.1.tgz",
- "integrity": "sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==",
- "cpu": [
- "ia32"
],
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
},
- "node_modules/@rollup/rollup-win32-x64-gnu": {
- "version": "4.60.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.1.tgz",
- "integrity": "sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==",
+ "node_modules/@rolldown/binding-win32-x64-msvc": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.3.tgz",
+ "integrity": "sha512-ekcqMMkI2PlhYnfzQnB/cEdYUVVJViWvoUyLrbzgDoi3Snfc1mVBwdnc306ufA5ejy8JSPjT2RlW1nQSjW7efg==",
"cpu": [
"x64"
],
@@ -1668,80 +2170,137 @@
"optional": true,
"os": [
"win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.60.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.1.tgz",
- "integrity": "sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==",
- "cpu": [
- "x64"
],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/pluginutils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz",
+ "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==",
+ "license": "MIT"
+ },
+ "node_modules/@rollup/pluginutils": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.4.0.tgz",
+ "integrity": "sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==",
"license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "estree-walker": "^2.0.2",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/pluginutils/node_modules/estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "license": "MIT"
},
"node_modules/@shikijs/core": {
- "version": "3.23.0",
- "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.23.0.tgz",
- "integrity": "sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==",
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-4.4.2.tgz",
+ "integrity": "sha512-StyzbAyxg2/tBGf78gwbBkGyeQ73lf8UiJArFaQhTQIDqQOCKPCQFanvrs4/Yv3Yfyc+ONInJM6K+FMIf+P+kA==",
"license": "MIT",
"dependencies": {
- "@shikijs/types": "3.23.0",
+ "@shikijs/primitive": "4.4.2",
+ "@shikijs/types": "4.4.2",
"@shikijs/vscode-textmate": "^10.0.2",
- "@types/hast": "^3.0.4",
+ "@types/hast": "^3.0.5",
"hast-util-to-html": "^9.0.5"
+ },
+ "engines": {
+ "node": ">=20"
}
},
"node_modules/@shikijs/engine-javascript": {
- "version": "3.23.0",
- "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.23.0.tgz",
- "integrity": "sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA==",
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-4.4.2.tgz",
+ "integrity": "sha512-MnIkeqWdVPUWsxlx8gKLVCJFTsqrQJgpTPBPpQwaFeJ56lOnJxj5aN2LUFnfxUEcvOQuNocmbaMnVrCEln6rkw==",
"license": "MIT",
"dependencies": {
- "@shikijs/types": "3.23.0",
+ "@shikijs/types": "4.4.2",
"@shikijs/vscode-textmate": "^10.0.2",
- "oniguruma-to-es": "^4.3.4"
+ "oniguruma-to-es": "^4.3.6"
+ },
+ "engines": {
+ "node": ">=20"
}
},
"node_modules/@shikijs/engine-oniguruma": {
- "version": "3.23.0",
- "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.23.0.tgz",
- "integrity": "sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==",
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-4.4.2.tgz",
+ "integrity": "sha512-GLhowz1+jixjz+wiZ3wMnOn1jTxiFCGl2PkXufivbnwPHKuyw1AYqu5/hbWhZZ2oAb0NP05WUJhYeigY14drnw==",
"license": "MIT",
"dependencies": {
- "@shikijs/types": "3.23.0",
+ "@shikijs/types": "4.4.2",
"@shikijs/vscode-textmate": "^10.0.2"
+ },
+ "engines": {
+ "node": ">=20"
}
},
"node_modules/@shikijs/langs": {
- "version": "3.23.0",
- "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.23.0.tgz",
- "integrity": "sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==",
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-4.4.2.tgz",
+ "integrity": "sha512-8DfeusD+Zdv/eYIDdXyJTUnSMHt+aAWjAOCXV20HNGAHRlInXpG8wh421v6B91WOm9TFwRLN+b/LG5F2NAIojg==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "4.4.2"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/@shikijs/primitive": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/primitive/-/primitive-4.4.2.tgz",
+ "integrity": "sha512-l6fQQKsOMlz72n38fztmSgZ76MO6KSWuw8o+GJ+FhmqrpC9pIOJNQNXGgbb5yX2AwpzlEHwsaLPnk/8o4Fm+rA==",
"license": "MIT",
"dependencies": {
- "@shikijs/types": "3.23.0"
+ "@shikijs/types": "4.4.2",
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "@types/hast": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=20"
}
},
"node_modules/@shikijs/themes": {
- "version": "3.23.0",
- "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.23.0.tgz",
- "integrity": "sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==",
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-4.4.2.tgz",
+ "integrity": "sha512-H0CFoL07ddDC2Dd6EdrPYNkRhUR6YCkJlnuYFceYYUJJA5TIm2b5B33qqiDYryBExgbKMndFJPb2u1gTuqO37g==",
"license": "MIT",
"dependencies": {
- "@shikijs/types": "3.23.0"
+ "@shikijs/types": "4.4.2"
+ },
+ "engines": {
+ "node": ">=20"
}
},
"node_modules/@shikijs/types": {
- "version": "3.23.0",
- "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.23.0.tgz",
- "integrity": "sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==",
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-4.4.2.tgz",
+ "integrity": "sha512-PFYitV4vpDr/iPCIhnHp+Q4ftic5N5VeNJ3KQ1O8gn3h2ar8qgwMAXF7tq4m1CWaMS60fV4VqF6vfnWH4F7vqQ==",
"license": "MIT",
"dependencies": {
"@shikijs/vscode-textmate": "^10.0.2",
- "@types/hast": "^3.0.4"
+ "@types/hast": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=20"
}
},
"node_modules/@shikijs/vscode-textmate": {
@@ -1750,11 +2309,15 @@
"integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==",
"license": "MIT"
},
- "node_modules/@types/cookie": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
- "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==",
- "license": "MIT"
+ "node_modules/@tybys/wasm-util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz",
+ "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
},
"node_modules/@types/debug": {
"version": "4.1.13",
@@ -1766,9 +2329,9 @@
}
},
"node_modules/@types/estree": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
- "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz",
+ "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==",
"license": "MIT"
},
"node_modules/@types/estree-jsx": {
@@ -1781,9 +2344,9 @@
}
},
"node_modules/@types/hast": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
- "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.5.tgz",
+ "integrity": "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==",
"license": "MIT",
"dependencies": {
"@types/unist": "*"
@@ -1805,9 +2368,9 @@
}
},
"node_modules/@types/mdx": {
- "version": "2.0.13",
- "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz",
- "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==",
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.14.tgz",
+ "integrity": "sha512-T48PeuJtvLosNTPVhfnIp3i/n3a4g4Bad7YCq5k64D4u7NwDrAotikQ+5+sjtUvBmxCMlbo3dVL+C2dP0rWHzg==",
"license": "MIT"
},
"node_modules/@types/ms": {
@@ -1826,12 +2389,12 @@
}
},
"node_modules/@types/node": {
- "version": "25.5.2",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.2.tgz",
- "integrity": "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-26.2.0.tgz",
+ "integrity": "sha512-5IviulTZeRNp2vAJ514cc/HUlY5nZ9fCbq9DMyC52BrhFZACo3nI0R7qBxhQmo/d27NFe96ur/b7Wwxklda+kg==",
"license": "MIT",
"dependencies": {
- "undici-types": "~7.18.0"
+ "undici-types": "~8.3.0"
}
},
"node_modules/@types/sax": {
@@ -1850,15 +2413,15 @@
"license": "MIT"
},
"node_modules/@ungap/structured-clone": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz",
- "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==",
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.3.tgz",
+ "integrity": "sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==",
"license": "ISC"
},
"node_modules/acorn": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz",
- "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
+ "version": "8.18.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz",
+ "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==",
"license": "MIT",
"bin": {
"acorn": "bin/acorn"
@@ -1876,78 +2439,16 @@
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
}
},
- "node_modules/ansi-align": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz",
- "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==",
- "license": "ISC",
- "dependencies": {
- "string-width": "^4.1.0"
- }
- },
- "node_modules/ansi-align/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ansi-align/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "license": "MIT"
- },
- "node_modules/ansi-align/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "license": "MIT",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ansi-align/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "node_modules/am-i-vibing": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/am-i-vibing/-/am-i-vibing-0.4.0.tgz",
+ "integrity": "sha512-MxT4XZL7pzLHpuvhDKdMaQHMGGkJDLluKBLsbstn+8wv9sWcFT6h+0ve9qkml95amVTZtZV83gQe2hY+ojgHLg==",
"license": "MIT",
"dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ansi-regex": {
- "version": "6.2.2",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
- "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
- }
- },
- "node_modules/ansi-styles": {
- "version": "6.2.3",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
- "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
+ "process-ancestry": "^0.1.0"
},
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "bin": {
+ "am-i-vibing": "dist/cli.mjs"
}
},
"node_modules/anymatch": {
@@ -2016,76 +2517,70 @@
}
},
"node_modules/astro": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/astro/-/astro-5.3.0.tgz",
- "integrity": "sha512-e88l/Yk/6enR/ZDddLbqtM+oblBFk5mneNSmNesyVYGL/6Dj4UA67GPAZOk79VxT5dbLlclZSyyw/wlxN1aj3A==",
+ "version": "7.1.4",
+ "resolved": "https://registry.npmjs.org/astro/-/astro-7.1.4.tgz",
+ "integrity": "sha512-e0gkBReJECAZuuTgpEB5JMUc6J4mM6boD6wuVE1pBf/fMywG47f8qm9XQoA6kZB1RWHiHmUlLuQ2jd9Q5+72HQ==",
"license": "MIT",
"dependencies": {
- "@astrojs/compiler": "^2.10.3",
- "@astrojs/internal-helpers": "0.5.1",
- "@astrojs/markdown-remark": "6.1.0",
- "@astrojs/telemetry": "3.2.0",
+ "@astrojs/compiler-rs": "^0.3.1",
+ "@astrojs/internal-helpers": "0.10.1",
+ "@astrojs/markdown-satteri": "0.3.4",
+ "@astrojs/telemetry": "3.3.3",
+ "@capsizecss/unpack": "^4.0.0",
+ "@clack/prompts": "^1.1.0",
"@oslojs/encoding": "^1.1.0",
- "@rollup/pluginutils": "^5.1.4",
- "@types/cookie": "^0.6.0",
- "acorn": "^8.14.0",
+ "@rollup/pluginutils": "^5.3.0",
+ "am-i-vibing": "^0.4.0",
"aria-query": "^5.3.2",
"axobject-query": "^4.1.0",
- "boxen": "8.0.1",
- "ci-info": "^4.1.0",
+ "ci-info": "^4.4.0",
"clsx": "^2.1.1",
- "common-ancestor-path": "^1.0.1",
- "cookie": "^0.7.2",
- "cssesc": "^3.0.0",
- "debug": "^4.4.0",
- "deterministic-object-hash": "^2.0.2",
- "devalue": "^5.1.1",
- "diff": "^5.2.0",
- "dlv": "^1.1.3",
+ "common-ancestor-path": "^2.0.0",
+ "cookie": "^2.0.1",
+ "devalue": "^5.8.1",
+ "diff": "^8.0.3",
"dset": "^3.1.4",
- "es-module-lexer": "^1.6.0",
- "esbuild": "^0.24.2",
- "estree-walker": "^3.0.3",
- "fast-glob": "^3.3.3",
+ "es-module-lexer": "^2.0.0",
+ "esbuild": "^0.28.0",
"flattie": "^1.1.1",
+ "fontace": "~0.4.1",
+ "get-tsconfig": "5.0.0-beta.4",
"github-slugger": "^2.0.0",
"html-escaper": "3.0.3",
- "http-cache-semantics": "^4.1.1",
- "js-yaml": "^4.1.0",
- "kleur": "^4.1.5",
- "magic-string": "^0.30.17",
- "magicast": "^0.3.5",
- "micromatch": "^4.0.8",
- "mrmime": "^2.0.0",
- "neotraverse": "^0.6.18",
- "p-limit": "^6.2.0",
- "p-queue": "^8.1.0",
- "preferred-pm": "^4.1.1",
- "prompts": "^2.4.2",
- "rehype": "^13.0.2",
- "semver": "^7.7.1",
- "shiki": "^1.29.2",
- "tinyexec": "^0.3.2",
- "tsconfck": "^3.1.4",
- "ultrahtml": "^1.5.3",
- "unist-util-visit": "^5.0.0",
- "unstorage": "^1.14.4",
- "vfile": "^6.0.3",
- "vite": "^6.0.11",
- "vitefu": "^1.0.5",
- "which-pm": "^3.0.1",
+ "http-cache-semantics": "^4.2.0",
+ "js-yaml": "^4.1.1",
+ "jsonc-parser": "^3.3.1",
+ "magic-string": "^1.0.0",
+ "magicast": "^0.5.2",
+ "mrmime": "^2.0.1",
+ "neotraverse": "^1.0.1",
+ "obug": "^2.1.1",
+ "p-limit": "^7.3.0",
+ "p-queue": "^9.1.0",
+ "package-manager-detector": "^1.6.0",
+ "piccolore": "^0.1.3",
+ "picomatch": "^4.0.4",
+ "semver": "^7.7.4",
+ "shiki": "^4.0.2",
+ "smol-toml": "^1.6.0",
+ "svgo": "^4.0.1",
+ "tinyclip": "^0.1.12",
+ "tinyexec": "^1.0.4",
+ "tinyglobby": "^0.2.15",
+ "ultrahtml": "^1.6.0",
+ "unifont": "~0.7.4",
+ "unstorage": "^1.17.5",
+ "vite": "^8.0.13",
+ "vitefu": "^1.1.2",
"xxhash-wasm": "^1.1.0",
- "yargs-parser": "^21.1.1",
- "yocto-spinner": "^0.2.0",
- "zod": "^3.24.1",
- "zod-to-json-schema": "^3.24.1",
- "zod-to-ts": "^1.2.0"
+ "yargs-parser": "^22.0.0",
+ "zod": "^4.3.6"
},
"bin": {
- "astro": "astro.js"
+ "astro": "bin/astro.mjs"
},
"engines": {
- "node": "^18.17.1 || ^20.3.0 || >=22.0.0",
+ "node": ">=22.12.0",
"npm": ">=9.6.5",
"pnpm": ">=7.1.0"
},
@@ -2094,174 +2589,503 @@
"url": "https://opencollective.com/astrodotbuild"
},
"optionalDependencies": {
- "sharp": "^0.33.3"
+ "sharp": "^0.34.0 || ^0.35.0"
+ },
+ "peerDependencies": {
+ "@astrojs/markdown-remark": "7.2.1"
+ },
+ "peerDependenciesMeta": {
+ "@astrojs/markdown-remark": {
+ "optional": true
+ }
}
},
"node_modules/astro-expressive-code": {
- "version": "0.40.2",
- "resolved": "https://registry.npmjs.org/astro-expressive-code/-/astro-expressive-code-0.40.2.tgz",
- "integrity": "sha512-yJMQId0yXSAbW9I6yqvJ3FcjKzJ8zRL7elbJbllkv1ZJPlsI0NI83Pxn1YL1IapEM347EvOOkSW2GL+2+NO61w==",
+ "version": "0.44.1",
+ "resolved": "https://registry.npmjs.org/astro-expressive-code/-/astro-expressive-code-0.44.1.tgz",
+ "integrity": "sha512-DT1LnCqbHasBKlvzJ3m6LR4VI94wwx3W9EV/YbP1te4rqjOHsvsezHYuqb5MeLWLftXms/1FA9QBbwCo43DnJQ==",
"license": "MIT",
"dependencies": {
- "rehype-expressive-code": "^0.40.2"
+ "rehype-expressive-code": "^0.44.1",
+ "url-extras": "^0.1.0"
},
"peerDependencies": {
- "astro": "^4.0.0-beta || ^5.0.0-beta || ^3.3.0"
+ "astro": "^4.0.0-beta || ^5.0.0-beta || ^3.3.0 || ^6.0.0-beta || ^7.0.0"
}
},
"node_modules/astro/node_modules/@astrojs/internal-helpers": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.5.1.tgz",
- "integrity": "sha512-M7rAge1n2+aOSxNvKUFa0u/KFn0W+sZy7EW91KOSERotm2Ti8qs+1K0xx3zbOxtAVrmJb5/J98eohVvvEqtNkw==",
- "license": "MIT"
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.10.1.tgz",
+ "integrity": "sha512-5phcroT/vmOOrYuuAxtkbPixy5hePtlz9i8K4OeDv3dNK6/UQRuXPOSRTxIOBbUY5Sonw2UaxjbuVc43Mcir6Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.4",
+ "@types/mdast": "^4.0.4",
+ "js-yaml": "^4.1.1",
+ "picomatch": "^4.0.4",
+ "retext-smartypants": "^6.2.0",
+ "shiki": "^4.0.2",
+ "smol-toml": "^1.6.0",
+ "unified": "^11.0.5"
+ }
},
- "node_modules/astro/node_modules/@astrojs/markdown-remark": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-6.1.0.tgz",
- "integrity": "sha512-emZNNSTPGgPc3V399Cazpp5+snogjaF04ocOSQn9vy3Kw/eIC4vTQjXOrWDEoSEy+AwPDZX9bQ4wd3bxhpmGgQ==",
+ "node_modules/astro/node_modules/@astrojs/markdown-satteri": {
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/@astrojs/markdown-satteri/-/markdown-satteri-0.3.4.tgz",
+ "integrity": "sha512-6Lvt/bQZEBW+zzdhPblvfZEy5PGEYJaUsUqaCgwHeRPxZJL1gc9I+DRLKWJjjYTWDzVUTzXlMq4WwSK+X34CVw==",
"license": "MIT",
"dependencies": {
- "@astrojs/prism": "3.2.0",
+ "@astrojs/internal-helpers": "0.10.1",
+ "@astrojs/prism": "4.0.2",
"github-slugger": "^2.0.0",
"hast-util-from-html": "^2.0.3",
- "hast-util-to-text": "^4.0.2",
- "import-meta-resolve": "^4.1.0",
- "js-yaml": "^4.1.0",
- "mdast-util-definitions": "^6.0.0",
- "rehype-raw": "^7.0.0",
- "rehype-stringify": "^10.0.1",
- "remark-gfm": "^4.0.0",
- "remark-parse": "^11.0.0",
- "remark-rehype": "^11.1.1",
- "remark-smartypants": "^3.0.2",
- "shiki": "^1.29.1",
- "smol-toml": "^1.3.1",
- "unified": "^11.0.5",
- "unist-util-remove-position": "^5.0.0",
- "unist-util-visit": "^5.0.0",
- "unist-util-visit-parents": "^6.0.1",
- "vfile": "^6.0.3"
+ "satteri": "^0.9.1"
}
},
- "node_modules/astro/node_modules/@astrojs/prism": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.2.0.tgz",
- "integrity": "sha512-GilTHKGCW6HMq7y3BUv9Ac7GMe/MO9gi9GW62GzKtth0SwukCu/qp2wLiGpEujhY+VVhaG9v7kv/5vFzvf4NYw==",
- "license": "MIT",
- "dependencies": {
- "prismjs": "^1.29.0"
- },
+ "node_modules/astro/node_modules/@img/sharp-darwin-arm64": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.35.3.tgz",
+ "integrity": "sha512-RMnFX7YQsMoh7lWfcM4NEHHymBX/rLuKNPVM84XE9ONPcaSCDgE7CHIHpSgPcO2xcRthgBy1HfNO319mwhIAkg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
"engines": {
- "node": "^18.17.1 || ^20.3.0 || >=22.0.0"
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-darwin-arm64": "1.3.2"
}
},
- "node_modules/astro/node_modules/@shikijs/core": {
- "version": "1.29.2",
- "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.29.2.tgz",
- "integrity": "sha512-vju0lY9r27jJfOY4Z7+Rt/nIOjzJpZ3y+nYpqtUZInVoXQ/TJZcfGnNOGnKjFdVZb8qexiCuSlZRKcGfhhTTZQ==",
- "license": "MIT",
- "dependencies": {
- "@shikijs/engine-javascript": "1.29.2",
- "@shikijs/engine-oniguruma": "1.29.2",
- "@shikijs/types": "1.29.2",
- "@shikijs/vscode-textmate": "^10.0.1",
- "@types/hast": "^3.0.4",
- "hast-util-to-html": "^9.0.4"
+ "node_modules/astro/node_modules/@img/sharp-darwin-x64": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.35.3.tgz",
+ "integrity": "sha512-Xo+5uFBtLN0BKqieTxiFzFPQAUlBbbH5iBKyRX/z1JrbnYsHTfKJnUfL8+p2TPXr1pXqao4eeL4Rl144uDpK9w==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-darwin-x64": "1.3.2"
}
},
- "node_modules/astro/node_modules/@shikijs/engine-javascript": {
- "version": "1.29.2",
- "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-1.29.2.tgz",
- "integrity": "sha512-iNEZv4IrLYPv64Q6k7EPpOCE/nuvGiKl7zxdq0WFuRPF5PAE9PRo2JGq/d8crLusM59BRemJ4eOqrFrC4wiQ+A==",
- "license": "MIT",
- "dependencies": {
- "@shikijs/types": "1.29.2",
- "@shikijs/vscode-textmate": "^10.0.1",
- "oniguruma-to-es": "^2.2.0"
+ "node_modules/astro/node_modules/@img/sharp-libvips-darwin-arm64": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.3.2.tgz",
+ "integrity": "sha512-9J6ypZFpQBj4YnePGoq/S38w6nz+vqg5WZLrLGY4YuSemdMq47GMLBPO42MzwdGwpg/agZ7xzZcFHa48xlywfg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
}
},
- "node_modules/astro/node_modules/@shikijs/engine-oniguruma": {
- "version": "1.29.2",
- "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.29.2.tgz",
- "integrity": "sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA==",
- "license": "MIT",
- "dependencies": {
- "@shikijs/types": "1.29.2",
- "@shikijs/vscode-textmate": "^10.0.1"
- }
+ "node_modules/astro/node_modules/@img/sharp-libvips-darwin-x64": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.3.2.tgz",
+ "integrity": "sha512-m2pW1n6cns9VaubNwsZ+c3CRYjxNQWgJ5gPlnL1nbBcpkBvFm6SCFN5o0psFHI8w9n11NKhFkeEDns98tiqbEw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
},
- "node_modules/astro/node_modules/@shikijs/langs": {
- "version": "1.29.2",
- "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-1.29.2.tgz",
- "integrity": "sha512-FIBA7N3LZ+223U7cJDUYd5shmciFQlYkFXlkKVaHsCPgfVLiO+e12FmQE6Tf9vuyEsFe3dIl8qGWKXgEHL9wmQ==",
- "license": "MIT",
- "dependencies": {
- "@shikijs/types": "1.29.2"
+ "node_modules/astro/node_modules/@img/sharp-libvips-linux-arm": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.3.2.tgz",
+ "integrity": "sha512-1eMLzy92I4J6rmi4mAT8yC3HxOtniyGELlzGbNMLLeqe052ahFQ0h6LFq+lh5DsDIdYViIDst08abvSbcEdLXQ==",
+ "cpu": [
+ "arm"
+ ],
+ "libc": [
+ "glibc"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
}
},
- "node_modules/astro/node_modules/@shikijs/themes": {
- "version": "1.29.2",
- "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-1.29.2.tgz",
- "integrity": "sha512-i9TNZlsq4uoyqSbluIcZkmPL9Bfi3djVxRnofUHwvx/h6SRW3cwgBC5SML7vsDcWyukY0eCzVN980rqP6qNl9g==",
- "license": "MIT",
- "dependencies": {
- "@shikijs/types": "1.29.2"
+ "node_modules/astro/node_modules/@img/sharp-libvips-linux-arm64": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.3.2.tgz",
+ "integrity": "sha512-dqVSFynCox4C/J8kT16V7SIFAns0IjgLwkvYT7p8LQVmJ5OS5b6tI9IGflxTeuBS//zXeFIUbwt5dwxyZ17cnA==",
+ "cpu": [
+ "arm64"
+ ],
+ "libc": [
+ "glibc"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
}
},
- "node_modules/astro/node_modules/@shikijs/types": {
- "version": "1.29.2",
- "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.29.2.tgz",
- "integrity": "sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw==",
- "license": "MIT",
- "dependencies": {
- "@shikijs/vscode-textmate": "^10.0.1",
- "@types/hast": "^3.0.4"
+ "node_modules/astro/node_modules/@img/sharp-libvips-linux-s390x": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.3.2.tgz",
+ "integrity": "sha512-/ABshyj8gCpyIrNXnHn4LorDJ0HHm1VhXPBlxZ8zAtfVPAaSafXPGn+sUSIRiwaSBy0mmFjSjiXI5mkcwdChKQ==",
+ "cpu": [
+ "s390x"
+ ],
+ "libc": [
+ "glibc"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
}
},
- "node_modules/astro/node_modules/oniguruma-to-es": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-2.3.0.tgz",
- "integrity": "sha512-bwALDxriqfKGfUufKGGepCzu9x7nJQuoRoAFp4AnwehhC2crqrDIAP/uN2qdlsAvSMpeRC3+Yzhqc7hLmle5+g==",
- "license": "MIT",
- "dependencies": {
- "emoji-regex-xs": "^1.0.0",
- "regex": "^5.1.1",
- "regex-recursion": "^5.1.1"
+ "node_modules/astro/node_modules/@img/sharp-libvips-linux-x64": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.3.2.tgz",
+ "integrity": "sha512-ITPEtgffGJ0S6G9dRyw/366tJQqFRcHWPHhC+Stpg3Z8AEMrDrTr2lhdz4f/Y/HMbRh//7Z5mBzEpVdi62Oc3w==",
+ "cpu": [
+ "x64"
+ ],
+ "libc": [
+ "glibc"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
}
},
- "node_modules/astro/node_modules/regex": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/regex/-/regex-5.1.1.tgz",
- "integrity": "sha512-dN5I359AVGPnwzJm2jN1k0W9LPZ+ePvoOeVMMfqIMFz53sSwXkxaJoxr50ptnsC771lK95BnTrVSZxq0b9yCGw==",
+ "node_modules/astro/node_modules/@img/sharp-libvips-linuxmusl-arm64": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.3.2.tgz",
+ "integrity": "sha512-zE9EdiUzUmg5mDT5a1rk5fYJ6GWPloTwWBYDS14naqHsL+EaMpDj1AWnpLgh3u0YCORv2Tt50wrcrpYqkP97Kw==",
+ "cpu": [
+ "arm64"
+ ],
+ "libc": [
+ "musl"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/astro/node_modules/@img/sharp-libvips-linuxmusl-x64": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.3.2.tgz",
+ "integrity": "sha512-m0lrLiUt+lBYnCFr8qV/65yMR4E/c7/wf78I5eKTdkEakFAlZ9QlzEM3QIhhAwVeUhLAHLcCq7a7Vszq/oFNZQ==",
+ "cpu": [
+ "x64"
+ ],
+ "libc": [
+ "musl"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/astro/node_modules/@img/sharp-linux-arm": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.35.3.tgz",
+ "integrity": "sha512-affVWCTLooy8TSxbDx2qkzuDeaWLNVBA+P//FNBirHsXpP2fuBhk5AuboYUnrDnzoXes8GFjpTx0SBFOCRg+FA==",
+ "cpu": [
+ "arm"
+ ],
+ "libc": [
+ "glibc"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-arm": "1.3.2"
+ }
+ },
+ "node_modules/astro/node_modules/@img/sharp-linux-arm64": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.35.3.tgz",
+ "integrity": "sha512-QgKDspHPnrU+GQ55XPhGwyhC8acLVOOSyAvo1oVfFmrIXLkDNmGWzAfDZ4xK8oSA1qBQrALcHX0G5UZni/SuFQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "libc": [
+ "glibc"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-arm64": "1.3.2"
+ }
+ },
+ "node_modules/astro/node_modules/@img/sharp-linux-s390x": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.35.3.tgz",
+ "integrity": "sha512-KgAxQ0DxpNOq1rG2t5cgTgShJFGSuU7XO45cqC+1NVOuZnP6tlgZRuSYOfNupGkHID0o3cJOsw4DVeJpMovcGw==",
+ "cpu": [
+ "s390x"
+ ],
+ "libc": [
+ "glibc"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-s390x": "1.3.2"
+ }
+ },
+ "node_modules/astro/node_modules/@img/sharp-linux-x64": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.35.3.tgz",
+ "integrity": "sha512-8pqvxubL2PGdhlPy6GLqzDYMUjyRmKAwKHYKixpdJYBUK7PJ0C029XdsnpFIdgRZG68fZiGdHVWcKPvtiPB4cA==",
+ "cpu": [
+ "x64"
+ ],
+ "libc": [
+ "glibc"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-x64": "1.3.2"
+ }
+ },
+ "node_modules/astro/node_modules/@img/sharp-linuxmusl-arm64": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.35.3.tgz",
+ "integrity": "sha512-Vz0iQjzzcSX3HCbfwFfCSG/9SCIqyO0mH2sXyiHaAYfBk0cRsCWXRyQYX0ovCK/PAQBbTzQ0dsPQHh5MAFL59w==",
+ "cpu": [
+ "arm64"
+ ],
+ "libc": [
+ "musl"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linuxmusl-arm64": "1.3.2"
+ }
+ },
+ "node_modules/astro/node_modules/@img/sharp-linuxmusl-x64": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.35.3.tgz",
+ "integrity": "sha512-6O1NPKcDVj9QEdg7Hx549EX8U0rp6yXQERqru6yRN7fGBn32UvIRJUlWnk+8xDCiG76hXVBbX82NZ/ZKr0euIg==",
+ "cpu": [
+ "x64"
+ ],
+ "libc": [
+ "musl"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linuxmusl-x64": "1.3.2"
+ }
+ },
+ "node_modules/astro/node_modules/@img/sharp-win32-ia32": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.35.3.tgz",
+ "integrity": "sha512-r53mXsBN6lFUDiST764SvgwUdHAqM4rPAiDzAmf4fLoB6X/rkfyTrLCg6+g17wJJiCmB3JYgHuUldCWUIRFSXw==",
+ "cpu": [
+ "ia32"
+ ],
+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/astro/node_modules/@img/sharp-win32-x64": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.35.3.tgz",
+ "integrity": "sha512-D4y1vNeZrIIJCN+uHaWVtH86B+aCrdMYYjicy9pXHvbGZeGYLLSd3wdVuC37FxVXlU1ARsk84eKWfWMXGYEqvA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/astro/node_modules/magic-string": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-1.1.0.tgz",
+ "integrity": "sha512-kS3VHe0nEPST2saQV4Rbkchcd3UBRkVTQHo1D3h/ZTwFDhai/mfKkmtPAtD129EOI7K3HlHIsFOt0WrI2/oU9g==",
"license": "MIT",
"dependencies": {
- "regex-utilities": "^2.3.0"
+ "@jridgewell/sourcemap-codec": "^1.5.5"
}
},
- "node_modules/astro/node_modules/regex-recursion": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-5.1.1.tgz",
- "integrity": "sha512-ae7SBCbzVNrIjgSbh7wMznPcQel1DNlDtzensnFxpiNpXt1U2ju/bHugH422r+4LAVS1FpW1YCwilmnNsjum9w==",
- "license": "MIT",
+ "node_modules/astro/node_modules/sharp": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.35.3.tgz",
+ "integrity": "sha512-ej0zVHuZGHCiABXcNxeYhpRnPNPAcvbG8RMdBAhDAxLKkCRVSpK3Iyu7qbqw3JMzoj0REeM6f3tJLtVwl0023Q==",
+ "license": "Apache-2.0",
+ "optional": true,
"dependencies": {
- "regex": "^5.1.1",
- "regex-utilities": "^2.3.0"
+ "@img/colour": "^1.1.0",
+ "detect-libc": "^2.1.2",
+ "semver": "^7.8.5"
+ },
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-darwin-arm64": "0.35.3",
+ "@img/sharp-darwin-x64": "0.35.3",
+ "@img/sharp-freebsd-wasm32": "0.35.3",
+ "@img/sharp-libvips-darwin-arm64": "1.3.2",
+ "@img/sharp-libvips-darwin-x64": "1.3.2",
+ "@img/sharp-libvips-linux-arm": "1.3.2",
+ "@img/sharp-libvips-linux-arm64": "1.3.2",
+ "@img/sharp-libvips-linux-ppc64": "1.3.2",
+ "@img/sharp-libvips-linux-riscv64": "1.3.2",
+ "@img/sharp-libvips-linux-s390x": "1.3.2",
+ "@img/sharp-libvips-linux-x64": "1.3.2",
+ "@img/sharp-libvips-linuxmusl-arm64": "1.3.2",
+ "@img/sharp-libvips-linuxmusl-x64": "1.3.2",
+ "@img/sharp-linux-arm": "0.35.3",
+ "@img/sharp-linux-arm64": "0.35.3",
+ "@img/sharp-linux-ppc64": "0.35.3",
+ "@img/sharp-linux-riscv64": "0.35.3",
+ "@img/sharp-linux-s390x": "0.35.3",
+ "@img/sharp-linux-x64": "0.35.3",
+ "@img/sharp-linuxmusl-arm64": "0.35.3",
+ "@img/sharp-linuxmusl-x64": "0.35.3",
+ "@img/sharp-webcontainers-wasm32": "0.35.3",
+ "@img/sharp-win32-arm64": "0.35.3",
+ "@img/sharp-win32-ia32": "0.35.3",
+ "@img/sharp-win32-x64": "0.35.3"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ }
}
},
- "node_modules/astro/node_modules/shiki": {
- "version": "1.29.2",
- "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.29.2.tgz",
- "integrity": "sha512-njXuliz/cP+67jU2hukkxCNuH1yUi4QfdZZY+sMr5PPrIyXSu5iTb/qYC4BiWWB0vZ+7TbdvYUCeL23zpwCfbg==",
+ "node_modules/astro/node_modules/zod": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz",
+ "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==",
"license": "MIT",
- "dependencies": {
- "@shikijs/core": "1.29.2",
- "@shikijs/engine-javascript": "1.29.2",
- "@shikijs/engine-oniguruma": "1.29.2",
- "@shikijs/langs": "1.29.2",
- "@shikijs/themes": "1.29.2",
- "@shikijs/types": "1.29.2",
- "@shikijs/vscode-textmate": "^10.0.1",
- "@types/hast": "^3.0.4"
+ "funding": {
+ "url": "https://github.com/sponsors/colinhacks"
}
},
"node_modules/axobject-query": {
@@ -2283,16 +3107,10 @@
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/base-64": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz",
- "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==",
- "license": "MIT"
- },
"node_modules/bcp-47": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/bcp-47/-/bcp-47-2.1.0.tgz",
- "integrity": "sha512-9IIS3UPrvIa1Ej+lVDdDwO7zLehjqsaByECw0bu2RRGP73jALm6FYbzI5gWbgHLvNdkvfXB5YrSbocZdOS0c0w==",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/bcp-47/-/bcp-47-2.1.1.tgz",
+ "integrity": "sha512-KLw+H/gd2p4zly1X7Yh/qziuyae5/w/QFnvTng9eZL5fvszL7Whl3MBoWF8yxL7ksUjBfOD+OxkytiqbBpG+Fw==",
"license": "MIT",
"dependencies": {
"is-alphabetical": "^2.0.0",
@@ -2320,74 +3138,16 @@
"integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
"license": "ISC"
},
- "node_modules/boxen": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz",
- "integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==",
- "license": "MIT",
- "dependencies": {
- "ansi-align": "^3.0.1",
- "camelcase": "^8.0.0",
- "chalk": "^5.3.0",
- "cli-boxes": "^3.0.0",
- "string-width": "^7.2.0",
- "type-fest": "^4.21.0",
- "widest-line": "^5.0.0",
- "wrap-ansi": "^9.0.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/braces": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
- "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
- "license": "MIT",
- "dependencies": {
- "fill-range": "^7.1.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/camelcase": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz",
- "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==",
- "license": "MIT",
- "engines": {
- "node": ">=16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/ccount": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
- "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
+ "node_modules/ccount": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
+ "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/chalk": {
- "version": "5.6.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz",
- "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==",
- "license": "MIT",
- "engines": {
- "node": "^12.17.0 || ^14.13 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
"node_modules/character-entities": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz",
@@ -2458,18 +3218,6 @@
"node": ">=8"
}
},
- "node_modules/cli-boxes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz",
- "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==",
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/clsx": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
@@ -2540,19 +3288,35 @@
"url": "https://github.com/sponsors/wooorm"
}
},
+ "node_modules/commander": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz",
+ "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=16"
+ }
+ },
"node_modules/common-ancestor-path": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz",
- "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==",
- "license": "ISC"
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-2.0.0.tgz",
+ "integrity": "sha512-dnN3ibLeoRf2HNC+OlCiNc5d2zxbLJXOtiZUudNFSXZrNSydxcCsSpRzXwfu7BBWCIfHPw+xTayeBvJCP/D8Ng==",
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">= 18"
+ }
},
"node_modules/cookie": {
- "version": "0.7.2",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
- "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-2.0.1.tgz",
+ "integrity": "sha512-yuToqVvRrj6pfDXREyQAAv8SkAEk/8GS3jQRTiUMm66TVtBYmqQeoEjL2Lmq8Rpo6271vH76InTChTitEAm65w==",
"license": "MIT",
"engines": {
- "node": ">= 0.6"
+ "node": ">=22"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
}
},
"node_modules/cookie-es": {
@@ -2570,6 +3334,22 @@
"uncrypto": "^0.1.3"
}
},
+ "node_modules/css-select": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz",
+ "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "boolbase": "^1.0.0",
+ "css-what": "^6.1.0",
+ "domhandler": "^5.0.2",
+ "domutils": "^3.0.1",
+ "nth-check": "^2.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
"node_modules/css-selector-parser": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-3.3.0.tgz",
@@ -2586,6 +3366,31 @@
],
"license": "MIT"
},
+ "node_modules/css-tree": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz",
+ "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==",
+ "license": "MIT",
+ "dependencies": {
+ "mdn-data": "2.27.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
+ }
+ },
+ "node_modules/css-what": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz",
+ "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">= 6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
"node_modules/cssesc": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
@@ -2598,6 +3403,39 @@
"node": ">=4"
}
},
+ "node_modules/csso": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
+ "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
+ "license": "MIT",
+ "dependencies": {
+ "css-tree": "~2.2.0"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/csso/node_modules/css-tree": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz",
+ "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
+ "license": "MIT",
+ "dependencies": {
+ "mdn-data": "2.0.28",
+ "source-map-js": "^1.0.1"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/csso/node_modules/mdn-data": {
+ "version": "2.0.28",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz",
+ "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
+ "license": "CC0-1.0"
+ },
"node_modules/debug": {
"version": "4.4.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
@@ -2629,9 +3467,9 @@
}
},
"node_modules/defu": {
- "version": "6.1.6",
- "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.6.tgz",
- "integrity": "sha512-f8mefEW4WIVg4LckePx3mALjQSPQgFlg9U8yaPdlsbdYcHQyj9n2zL2LJEA52smeYxOvmd/nB7TpMtHGMTHcug==",
+ "version": "6.1.7",
+ "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz",
+ "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==",
"license": "MIT"
},
"node_modules/dequal": {
@@ -2658,22 +3496,10 @@
"node": ">=8"
}
},
- "node_modules/deterministic-object-hash": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/deterministic-object-hash/-/deterministic-object-hash-2.0.2.tgz",
- "integrity": "sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==",
- "license": "MIT",
- "dependencies": {
- "base-64": "^1.0.0"
- },
- "engines": {
- "node": ">=18"
- }
- },
"node_modules/devalue": {
- "version": "5.6.4",
- "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.6.4.tgz",
- "integrity": "sha512-Gp6rDldRsFh/7XuouDbxMH3Mx8GMCcgzIb1pDTvNyn8pZGQ22u+Wa+lGV9dQCltFQ7uVw0MhRyb8XDskNFOReA==",
+ "version": "5.9.0",
+ "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.9.0.tgz",
+ "integrity": "sha512-RWrqdArjvPbsATEhOPUo6Wndc/iWnkWKlhIrdlF3zMMYo/c3CVtoaVAyLtWxz5h8nSlkHzxnzV2uLydPXmtF+A==",
"license": "MIT"
},
"node_modules/devlop": {
@@ -2690,9 +3516,9 @@
}
},
"node_modules/diff": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.2.tgz",
- "integrity": "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==",
+ "version": "8.0.4",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.4.tgz",
+ "integrity": "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==",
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.3.1"
@@ -2711,11 +3537,72 @@
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/dlv": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
- "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
- "license": "MIT"
+ "node_modules/dom-serializer": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
+ "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
+ "license": "MIT",
+ "dependencies": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.2",
+ "entities": "^4.2.0"
+ },
+ "funding": {
+ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+ }
+ },
+ "node_modules/dom-serializer/node_modules/entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/domelementtype": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
+ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fb55"
+ }
+ ],
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/domhandler": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
+ "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "domelementtype": "^2.3.0"
+ },
+ "engines": {
+ "node": ">= 4"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domhandler?sponsor=1"
+ }
+ },
+ "node_modules/domutils": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz",
+ "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "dom-serializer": "^2.0.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domutils?sponsor=1"
+ }
},
"node_modules/dset": {
"version": "3.1.4",
@@ -2726,18 +3613,6 @@
"node": ">=4"
}
},
- "node_modules/emoji-regex": {
- "version": "10.6.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz",
- "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==",
- "license": "MIT"
- },
- "node_modules/emoji-regex-xs": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz",
- "integrity": "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==",
- "license": "MIT"
- },
"node_modules/entities": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
@@ -2751,9 +3626,9 @@
}
},
"node_modules/es-module-lexer": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz",
- "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==",
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.1.tgz",
+ "integrity": "sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==",
"license": "MIT"
},
"node_modules/esast-util-from-estree": {
@@ -2789,9 +3664,9 @@
}
},
"node_modules/esbuild": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz",
- "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz",
+ "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==",
"hasInstallScript": true,
"license": "MIT",
"bin": {
@@ -2801,31 +3676,32 @@
"node": ">=18"
},
"optionalDependencies": {
- "@esbuild/aix-ppc64": "0.24.2",
- "@esbuild/android-arm": "0.24.2",
- "@esbuild/android-arm64": "0.24.2",
- "@esbuild/android-x64": "0.24.2",
- "@esbuild/darwin-arm64": "0.24.2",
- "@esbuild/darwin-x64": "0.24.2",
- "@esbuild/freebsd-arm64": "0.24.2",
- "@esbuild/freebsd-x64": "0.24.2",
- "@esbuild/linux-arm": "0.24.2",
- "@esbuild/linux-arm64": "0.24.2",
- "@esbuild/linux-ia32": "0.24.2",
- "@esbuild/linux-loong64": "0.24.2",
- "@esbuild/linux-mips64el": "0.24.2",
- "@esbuild/linux-ppc64": "0.24.2",
- "@esbuild/linux-riscv64": "0.24.2",
- "@esbuild/linux-s390x": "0.24.2",
- "@esbuild/linux-x64": "0.24.2",
- "@esbuild/netbsd-arm64": "0.24.2",
- "@esbuild/netbsd-x64": "0.24.2",
- "@esbuild/openbsd-arm64": "0.24.2",
- "@esbuild/openbsd-x64": "0.24.2",
- "@esbuild/sunos-x64": "0.24.2",
- "@esbuild/win32-arm64": "0.24.2",
- "@esbuild/win32-ia32": "0.24.2",
- "@esbuild/win32-x64": "0.24.2"
+ "@esbuild/aix-ppc64": "0.28.2",
+ "@esbuild/android-arm": "0.28.2",
+ "@esbuild/android-arm64": "0.28.2",
+ "@esbuild/android-x64": "0.28.2",
+ "@esbuild/darwin-arm64": "0.28.2",
+ "@esbuild/darwin-x64": "0.28.2",
+ "@esbuild/freebsd-arm64": "0.28.2",
+ "@esbuild/freebsd-x64": "0.28.2",
+ "@esbuild/linux-arm": "0.28.2",
+ "@esbuild/linux-arm64": "0.28.2",
+ "@esbuild/linux-ia32": "0.28.2",
+ "@esbuild/linux-loong64": "0.28.2",
+ "@esbuild/linux-mips64el": "0.28.2",
+ "@esbuild/linux-ppc64": "0.28.2",
+ "@esbuild/linux-riscv64": "0.28.2",
+ "@esbuild/linux-s390x": "0.28.2",
+ "@esbuild/linux-x64": "0.28.2",
+ "@esbuild/netbsd-arm64": "0.28.2",
+ "@esbuild/netbsd-x64": "0.28.2",
+ "@esbuild/openbsd-arm64": "0.28.2",
+ "@esbuild/openbsd-x64": "0.28.2",
+ "@esbuild/openharmony-arm64": "0.28.2",
+ "@esbuild/sunos-x64": "0.28.2",
+ "@esbuild/win32-arm64": "0.28.2",
+ "@esbuild/win32-ia32": "0.28.2",
+ "@esbuild/win32-x64": "0.28.2"
}
},
"node_modules/escape-string-regexp": {
@@ -2840,19 +3716,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "license": "BSD-2-Clause",
- "bin": {
- "esparse": "bin/esparse.js",
- "esvalidate": "bin/esvalidate.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/estree-util-attach-comments": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz",
@@ -2951,15 +3814,15 @@
"license": "MIT"
},
"node_modules/expressive-code": {
- "version": "0.40.2",
- "resolved": "https://registry.npmjs.org/expressive-code/-/expressive-code-0.40.2.tgz",
- "integrity": "sha512-1zIda2rB0qiDZACawzw2rbdBQiWHBT56uBctS+ezFe5XMAaFaHLnnSYND/Kd+dVzO9HfCXRDpzH3d+3fvOWRcw==",
+ "version": "0.44.1",
+ "resolved": "https://registry.npmjs.org/expressive-code/-/expressive-code-0.44.1.tgz",
+ "integrity": "sha512-GakidxhapWDzpKLqEaFQ8wGk6gAqEtPQibu8+yPBfnDLgev5Vdsh1pasTxnrXL/mzIknyqeTwhMHTghdaiUrTg==",
"license": "MIT",
"dependencies": {
- "@expressive-code/core": "^0.40.2",
- "@expressive-code/plugin-frames": "^0.40.2",
- "@expressive-code/plugin-shiki": "^0.40.2",
- "@expressive-code/plugin-text-markers": "^0.40.2"
+ "@expressive-code/core": "^0.44.1",
+ "@expressive-code/plugin-frames": "^0.44.1",
+ "@expressive-code/plugin-shiki": "^0.44.1",
+ "@expressive-code/plugin-text-markers": "^0.44.1"
}
},
"node_modules/extend": {
@@ -2968,29 +3831,28 @@
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
"license": "MIT"
},
- "node_modules/fast-glob": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
- "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
+ "node_modules/fast-string-truncated-width": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/fast-string-truncated-width/-/fast-string-truncated-width-3.0.3.tgz",
+ "integrity": "sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==",
+ "license": "MIT"
+ },
+ "node_modules/fast-string-width": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/fast-string-width/-/fast-string-width-3.0.2.tgz",
+ "integrity": "sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==",
"license": "MIT",
"dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.8"
- },
- "engines": {
- "node": ">=8.6.0"
+ "fast-string-truncated-width": "^3.0.2"
}
},
- "node_modules/fastq": {
- "version": "1.20.1",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz",
- "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==",
- "license": "ISC",
+ "node_modules/fast-wrap-ansi": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/fast-wrap-ansi/-/fast-wrap-ansi-0.2.2.tgz",
+ "integrity": "sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==",
+ "license": "MIT",
"dependencies": {
- "reusify": "^1.0.4"
+ "fast-string-width": "^3.0.2"
}
},
"node_modules/fdir": {
@@ -3010,60 +3872,34 @@
}
}
},
- "node_modules/fill-range": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
- "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "node_modules/flattie": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz",
+ "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==",
"license": "MIT",
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
"engines": {
"node": ">=8"
}
},
- "node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "node_modules/fontace": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/fontace/-/fontace-0.4.1.tgz",
+ "integrity": "sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw==",
"license": "MIT",
"dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
+ "fontkitten": "^1.0.2"
}
},
- "node_modules/find-up-simple": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz",
- "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==",
+ "node_modules/fontkitten": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/fontkitten/-/fontkitten-1.0.3.tgz",
+ "integrity": "sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw==",
"license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/find-yarn-workspace-root2": {
- "version": "1.2.16",
- "resolved": "https://registry.npmjs.org/find-yarn-workspace-root2/-/find-yarn-workspace-root2-1.2.16.tgz",
- "integrity": "sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==",
- "license": "Apache-2.0",
"dependencies": {
- "micromatch": "^4.0.2",
- "pkg-dir": "^4.2.0"
- }
- },
- "node_modules/flattie": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz",
- "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==",
- "license": "MIT",
+ "tiny-inflate": "^1.0.3"
+ },
"engines": {
- "node": ">=8"
+ "node": ">=20"
}
},
"node_modules/fsevents": {
@@ -3080,16 +3916,19 @@
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
- "node_modules/get-east-asian-width": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz",
- "integrity": "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==",
+ "node_modules/get-tsconfig": {
+ "version": "5.0.0-beta.4",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-5.0.0-beta.4.tgz",
+ "integrity": "sha512-7nF7C9fIPFEMHgEMEfgIlO9wDdZ8CyHw27rWciFZfHvHDReIiPhsYuzPRXsfvBCqFy1l8RRyyWV7QLM+ZhUJsQ==",
"license": "MIT",
+ "dependencies": {
+ "resolve-pkg-maps": "^1.0.0"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=20.20.0"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
}
},
"node_modules/github-slugger": {
@@ -3098,24 +3937,6 @@
"integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==",
"license": "ISC"
},
- "node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "license": "ISC",
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/graceful-fs": {
- "version": "4.2.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
- "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
- "license": "ISC"
- },
"node_modules/h3": {
"version": "1.15.11",
"resolved": "https://registry.npmjs.org/h3/-/h3-1.15.11.tgz",
@@ -3531,36 +4352,31 @@
"license": "BSD-2-Clause"
},
"node_modules/i18next": {
- "version": "23.16.8",
- "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.16.8.tgz",
- "integrity": "sha512-06r/TitrM88Mg5FdUXAKL96dJMzgqLE5dv3ryBAra4KCwD9mJ4ndOTS95ZuymIGoE+2hzfdaMak2X11/es7ZWg==",
+ "version": "26.3.6",
+ "resolved": "https://registry.npmjs.org/i18next/-/i18next-26.3.6.tgz",
+ "integrity": "sha512-Bu5Z2nAXgfVyM8xvW3jk9EKRIuX37PudsrBViThNFx7CR7aaYTpP01cxNB/E4c4UUzTDiAZRstEhsRfPOL/8xA==",
"funding": [
{
"type": "individual",
- "url": "https://locize.com"
+ "url": "https://www.locize.com/i18next"
},
{
"type": "individual",
- "url": "https://locize.com/i18next.html"
+ "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project"
},
{
"type": "individual",
- "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project"
+ "url": "https://www.locize.com"
}
],
"license": "MIT",
- "dependencies": {
- "@babel/runtime": "^7.23.2"
- }
- },
- "node_modules/import-meta-resolve": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz",
- "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==",
- "license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
+ "peerDependencies": {
+ "typescript": "^5 || ^6 || ^7"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
}
},
"node_modules/inline-style-parser": {
@@ -3619,50 +4435,20 @@
}
},
"node_modules/is-docker": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
- "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-4.0.0.tgz",
+ "integrity": "sha512-LHE+wROyG/Y/0ZnbktRCoTix2c1RhgWaZraMZ8o1Q7zCh0VSrICJQO5oqIIISrcSBtrXv0o233w1IYwsWCjTzA==",
"license": "MIT",
"bin": {
"is-docker": "cli.js"
},
"engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ "node": ">=20"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "license": "MIT",
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/is-hexadecimal": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz",
@@ -3673,128 +4459,314 @@
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/is-inside-container": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
- "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
+ "node_modules/is-plain-obj": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+ "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
"license": "MIT",
- "dependencies": {
- "is-docker": "^3.0.0"
- },
- "bin": {
- "is-inside-container": "cli.js"
- },
"engines": {
- "node": ">=14.16"
+ "node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "node_modules/js-yaml": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz",
+ "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/puzrin"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/nodeca"
+ }
+ ],
"license": "MIT",
- "engines": {
- "node": ">=0.12.0"
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
}
},
- "node_modules/is-plain-obj": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
- "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
+ "node_modules/jsonc-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz",
+ "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==",
+ "license": "MIT"
+ },
+ "node_modules/klona": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz",
+ "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==",
"license": "MIT",
"engines": {
- "node": ">=12"
+ "node": ">= 8"
+ }
+ },
+ "node_modules/lightningcss": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz",
+ "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==",
+ "license": "MPL-2.0",
+ "dependencies": {
+ "detect-libc": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 12.0.0"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ },
+ "optionalDependencies": {
+ "lightningcss-android-arm64": "1.33.0",
+ "lightningcss-darwin-arm64": "1.33.0",
+ "lightningcss-darwin-x64": "1.33.0",
+ "lightningcss-freebsd-x64": "1.33.0",
+ "lightningcss-linux-arm-gnueabihf": "1.33.0",
+ "lightningcss-linux-arm64-gnu": "1.33.0",
+ "lightningcss-linux-arm64-musl": "1.33.0",
+ "lightningcss-linux-x64-gnu": "1.33.0",
+ "lightningcss-linux-x64-musl": "1.33.0",
+ "lightningcss-win32-arm64-msvc": "1.33.0",
+ "lightningcss-win32-x64-msvc": "1.33.0"
+ }
+ },
+ "node_modules/lightningcss-android-arm64": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz",
+ "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "node_modules/is-wsl": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz",
- "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==",
- "license": "MIT",
- "dependencies": {
- "is-inside-container": "^1.0.0"
+ "node_modules/lightningcss-darwin-arm64": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz",
+ "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
},
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-darwin-x64": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz",
+ "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
"engines": {
- "node": ">=16"
+ "node": ">= 12.0.0"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "node_modules/js-yaml": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
- "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
- "license": "MIT",
- "dependencies": {
- "argparse": "^2.0.1"
+ "node_modules/lightningcss-freebsd-x64": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz",
+ "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
},
- "bin": {
- "js-yaml": "bin/js-yaml.js"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "node_modules/kleur": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
- "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
- "license": "MIT",
+ "node_modules/lightningcss-linux-arm-gnueabihf": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz",
+ "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">=6"
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "node_modules/load-yaml-file": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/load-yaml-file/-/load-yaml-file-0.2.0.tgz",
- "integrity": "sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==",
- "license": "MIT",
- "dependencies": {
- "graceful-fs": "^4.1.5",
- "js-yaml": "^3.13.0",
- "pify": "^4.0.1",
- "strip-bom": "^3.0.0"
+ "node_modules/lightningcss-linux-arm64-gnu": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz",
+ "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==",
+ "cpu": [
+ "arm64"
+ ],
+ "libc": [
+ "glibc"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
},
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-arm64-musl": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz",
+ "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "libc": [
+ "musl"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">=6"
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "node_modules/load-yaml-file/node_modules/argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "license": "MIT",
- "dependencies": {
- "sprintf-js": "~1.0.2"
+ "node_modules/lightningcss-linux-x64-gnu": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz",
+ "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==",
+ "cpu": [
+ "x64"
+ ],
+ "libc": [
+ "glibc"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "node_modules/load-yaml-file/node_modules/js-yaml": {
- "version": "3.14.2",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz",
- "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==",
- "license": "MIT",
- "dependencies": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
+ "node_modules/lightningcss-linux-x64-musl": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz",
+ "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==",
+ "cpu": [
+ "x64"
+ ],
+ "libc": [
+ "musl"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
},
- "bin": {
- "js-yaml": "bin/js-yaml.js"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "license": "MIT",
- "dependencies": {
- "p-locate": "^4.1.0"
+ "node_modules/lightningcss-win32-arm64-msvc": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz",
+ "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
},
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-win32-x64-msvc": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz",
+ "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
"engines": {
- "node": ">=8"
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
"node_modules/longest-streak": {
@@ -3808,9 +4780,9 @@
}
},
"node_modules/lru-cache": {
- "version": "11.2.7",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz",
- "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==",
+ "version": "11.5.2",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz",
+ "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==",
"license": "BlueOak-1.0.0",
"engines": {
"node": "20 || >=22"
@@ -3826,14 +4798,14 @@
}
},
"node_modules/magicast": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz",
- "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==",
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.4.tgz",
+ "integrity": "sha512-llBEhWm1SacoRwgHUoQJYtwp4PBLF4faQi5TCpIGyGs9n4y5+juI0tDgyKIfpqxckRHaHzouUEph3THklWh03w==",
"license": "MIT",
"dependencies": {
- "@babel/parser": "^7.25.4",
- "@babel/types": "^7.25.4",
- "source-map-js": "^1.2.0"
+ "@babel/parser": "^7.29.7",
+ "@babel/types": "^7.29.7",
+ "source-map-js": "^1.2.1"
}
},
"node_modules/markdown-extensions": {
@@ -4181,14 +5153,11 @@
"url": "https://opencollective.com/unified"
}
},
- "node_modules/merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
+ "node_modules/mdn-data": {
+ "version": "2.27.1",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz",
+ "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==",
+ "license": "CC0-1.0"
},
"node_modules/micromark": {
"version": "4.0.2",
@@ -4260,9 +5229,9 @@
}
},
"node_modules/micromark-extension-directive": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz",
- "integrity": "sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-4.0.0.tgz",
+ "integrity": "sha512-/C2nqVmXXmiseSSuCdItCMho7ybwwop6RrrRPk0KbOHW21JKoCldC+8rFOaundDoRBUWBnJJcxeA/Kvi34WQXg==",
"license": "MIT",
"dependencies": {
"devlop": "^1.0.0",
@@ -4926,31 +5895,6 @@
],
"license": "MIT"
},
- "node_modules/micromatch": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
- "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
- "license": "MIT",
- "dependencies": {
- "braces": "^3.0.3",
- "picomatch": "^2.3.1"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/micromatch/node_modules/picomatch": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
- "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
- "license": "MIT",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
"node_modules/mrmime": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz",
@@ -4967,9 +5911,9 @@
"license": "MIT"
},
"node_modules/nanoid": {
- "version": "3.3.11",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
- "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+ "version": "3.3.18",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz",
+ "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==",
"funding": [
{
"type": "github",
@@ -4985,9 +5929,9 @@
}
},
"node_modules/neotraverse": {
- "version": "0.6.18",
- "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz",
- "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-1.0.1.tgz",
+ "integrity": "sha512-WmmLty1YWwJl9yZi77v2dVIV6X2kuYV8YYBI/G3LWGKdGHmHUvL1z7FW0iDvEvGAwNEoc5x1tOOOyDnf5jJw/w==",
"license": "MIT",
"engines": {
"node": ">= 10"
@@ -5013,9 +5957,9 @@
"license": "MIT"
},
"node_modules/node-mock-http": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.4.tgz",
- "integrity": "sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.5.tgz",
+ "integrity": "sha512-KQyt/wLjG3TAc7DOUhpqWzgd4ERxR80JOlTK5VE5R1S12IaPVN5qkj4klBce9HPG1Njuup4Sb5bljaT34lIyjw==",
"license": "MIT"
},
"node_modules/normalize-path": {
@@ -5039,6 +5983,19 @@
"url": "https://github.com/fb55/nth-check?sponsor=1"
}
},
+ "node_modules/obug": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.4.tgz",
+ "integrity": "sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==",
+ "funding": [
+ "https://github.com/sponsors/sxzz",
+ "https://opencollective.com/debug"
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.20.0"
+ }
+ },
"node_modules/ofetch": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.5.1.tgz",
@@ -5050,117 +6007,94 @@
"ufo": "^1.6.1"
}
},
+ "node_modules/ohash": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz",
+ "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==",
+ "license": "MIT"
+ },
"node_modules/oniguruma-parser": {
- "version": "0.12.1",
- "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz",
- "integrity": "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==",
+ "version": "0.12.2",
+ "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.2.tgz",
+ "integrity": "sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==",
"license": "MIT"
},
"node_modules/oniguruma-to-es": {
- "version": "4.3.5",
- "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.5.tgz",
- "integrity": "sha512-Zjygswjpsewa0NLTsiizVuMQZbp0MDyM6lIt66OxsF21npUDlzpHi1Mgb/qhQdkb+dWFTzJmFbEWdvZgRho8eQ==",
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.6.tgz",
+ "integrity": "sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==",
"license": "MIT",
"dependencies": {
- "oniguruma-parser": "^0.12.1",
+ "oniguruma-parser": "^0.12.2",
"regex": "^6.1.0",
"regex-recursion": "^6.0.2"
}
},
"node_modules/p-limit": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-6.2.0.tgz",
- "integrity": "sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==",
- "license": "MIT",
- "dependencies": {
- "yocto-queue": "^1.1.1"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "license": "MIT",
- "dependencies": {
- "p-limit": "^2.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/p-locate/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-7.3.1.tgz",
+ "integrity": "sha512-0trZaiG7Y7kN/Egy9a8j47t9osC0Tch4PaIWd9yGF6bvmlk7muExRvGNYb8sXBwEKMoNKsbNN9P8EefuQekE4Q==",
"license": "MIT",
"dependencies": {
- "p-try": "^2.0.0"
+ "yocto-queue": "^1.2.1"
},
"engines": {
- "node": ">=6"
+ "node": ">=20"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/p-queue": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.1.1.tgz",
- "integrity": "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==",
+ "version": "9.3.3",
+ "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.3.3.tgz",
+ "integrity": "sha512-NXAOdnEe5FsZJfT4oK84lE1Y5cFFdWlRuOo5tww8DyNMxyRXwn39fIkUtNLKppcPC+UYU/bXujNCUGDv01y7CA==",
"license": "MIT",
"dependencies": {
- "eventemitter3": "^5.0.1",
- "p-timeout": "^6.1.2"
+ "eventemitter3": "^5.0.4",
+ "p-timeout": "^7.0.0"
},
"engines": {
- "node": ">=18"
+ "node": ">=20"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/p-timeout": {
- "version": "6.1.4",
- "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz",
- "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==",
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-7.0.1.tgz",
+ "integrity": "sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==",
"license": "MIT",
"engines": {
- "node": ">=14.16"
+ "node": ">=20"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
+ "node_modules/package-manager-detector": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.8.0.tgz",
+ "integrity": "sha512-yQA4H19AmPEoMUeavPMDIe1higySl/gH/yaQrkT/s07Qp+7pp2hYz30N3z2l5BkjVkF9Ow6o0wjJamm2y7Sn0A==",
+ "license": "MIT"
},
"node_modules/pagefind": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/pagefind/-/pagefind-1.4.0.tgz",
- "integrity": "sha512-z2kY1mQlL4J8q5EIsQkLzQjilovKzfNVhX8De6oyE6uHpfFtyBaqUpcl/XzJC/4fjD8vBDyh1zolimIcVrCn9g==",
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/pagefind/-/pagefind-1.5.2.tgz",
+ "integrity": "sha512-XTUaK0hXMCu2jszWE584JGQT7y284TmMV9l/HX3rnG5uo3rHI/uHU56XTyyyPFjeWEBxECbAi0CaFDJOONtG0Q==",
"license": "MIT",
"bin": {
"pagefind": "lib/runner/bin.cjs"
},
"optionalDependencies": {
- "@pagefind/darwin-arm64": "1.4.0",
- "@pagefind/darwin-x64": "1.4.0",
- "@pagefind/freebsd-x64": "1.4.0",
- "@pagefind/linux-arm64": "1.4.0",
- "@pagefind/linux-x64": "1.4.0",
- "@pagefind/windows-x64": "1.4.0"
+ "@pagefind/darwin-arm64": "1.5.2",
+ "@pagefind/darwin-x64": "1.5.2",
+ "@pagefind/freebsd-x64": "1.5.2",
+ "@pagefind/linux-arm64": "1.5.2",
+ "@pagefind/linux-x64": "1.5.2",
+ "@pagefind/windows-arm64": "1.5.2",
+ "@pagefind/windows-x64": "1.5.2"
}
},
"node_modules/parse-entities": {
@@ -5218,15 +6152,6 @@
"url": "https://github.com/inikulin/parse5?sponsor=1"
}
},
- "node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/piccolore": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/piccolore/-/piccolore-0.1.3.tgz",
@@ -5240,9 +6165,9 @@
"license": "ISC"
},
"node_modules/picomatch": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
- "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz",
+ "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==",
"license": "MIT",
"engines": {
"node": ">=12"
@@ -5251,31 +6176,10 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
- "node_modules/pify": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
- "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "license": "MIT",
- "dependencies": {
- "find-up": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/postcss": {
- "version": "8.5.8",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz",
- "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==",
+ "version": "8.5.26",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz",
+ "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==",
"funding": [
{
"type": "opencollective",
@@ -5292,7 +6196,7 @@
],
"license": "MIT",
"dependencies": {
- "nanoid": "^3.3.11",
+ "nanoid": "^3.3.17",
"picocolors": "^1.1.1",
"source-map-js": "^1.2.1"
},
@@ -5326,9 +6230,9 @@
}
},
"node_modules/postcss-selector-parser": {
- "version": "6.1.2",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
- "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
+ "version": "6.1.4",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.4.tgz",
+ "integrity": "sha512-bIoJLOmjCO1S9XdY/DcnR5hJxvrDir1PbGChrzXG3vw0/FOliy/fA3dmdhQ441kah4gKv+TwckGzex6wNS5cnQ==",
"license": "MIT",
"dependencies": {
"cssesc": "^3.0.0",
@@ -5338,20 +6242,6 @@
"node": ">=4"
}
},
- "node_modules/preferred-pm": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/preferred-pm/-/preferred-pm-4.1.1.tgz",
- "integrity": "sha512-rU+ZAv1Ur9jAUZtGPebQVQPzdGhNzaEiQ7VL9+cjsAWPHFYOccNXPNiev1CCDSOg/2j7UujM7ojNhpkuILEVNQ==",
- "license": "MIT",
- "dependencies": {
- "find-up-simple": "^1.0.0",
- "find-yarn-workspace-root2": "1.2.16",
- "which-pm": "^3.0.1"
- },
- "engines": {
- "node": ">=18.12"
- }
- },
"node_modules/prismjs": {
"version": "1.30.0",
"resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz",
@@ -5361,58 +6251,25 @@
"node": ">=6"
}
},
- "node_modules/prompts": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
- "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
- "license": "MIT",
- "dependencies": {
- "kleur": "^3.0.3",
- "sisteransi": "^1.0.5"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/prompts/node_modules/kleur": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
- "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
+ "node_modules/process-ancestry": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/process-ancestry/-/process-ancestry-0.1.0.tgz",
+ "integrity": "sha512-tGqJW/UnclpYASFcM6Xh8D8l/BMtaQ9+CSG0vlJSJTcdMM4lDRv4c6H0Pdcsfted+bVczdYSfk2fdukg2gQkZg==",
"license": "MIT",
"engines": {
- "node": ">=6"
+ "node": ">=18.0.0"
}
},
"node_modules/property-information": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz",
- "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz",
+ "integrity": "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
"node_modules/radix3": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz",
@@ -5420,9 +6277,9 @@
"license": "MIT"
},
"node_modules/readdirp": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz",
- "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.1.1.tgz",
+ "integrity": "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==",
"license": "MIT",
"engines": {
"node": ">= 20.19.0"
@@ -5540,12 +6397,12 @@
}
},
"node_modules/rehype-expressive-code": {
- "version": "0.40.2",
- "resolved": "https://registry.npmjs.org/rehype-expressive-code/-/rehype-expressive-code-0.40.2.tgz",
- "integrity": "sha512-+kn+AMGCrGzvtH8Q5lC6Y5lnmTV/r33fdmi5QU/IH1KPHKobKr5UnLwJuqHv5jBTSN/0v2wLDS7RTM73FVzqmQ==",
+ "version": "0.44.1",
+ "resolved": "https://registry.npmjs.org/rehype-expressive-code/-/rehype-expressive-code-0.44.1.tgz",
+ "integrity": "sha512-+VZgs7Evw4LXRN3owpoBNSTpYuW6GeOdjqcUT1TuY8o/4MGPtbd0EU7Bgrju7X8KrQ6SslOBAuGWJ5fV5TriJQ==",
"license": "MIT",
"dependencies": {
- "expressive-code": "^0.40.2"
+ "expressive-code": "^0.44.1"
}
},
"node_modules/rehype-format": {
@@ -5623,14 +6480,14 @@
}
},
"node_modules/remark-directive": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/remark-directive/-/remark-directive-3.0.1.tgz",
- "integrity": "sha512-gwglrEQEZcZYgVyG1tQuA+h58EZfq5CSULw7J90AFuCTyib1thgHPoqQ+h9iFvU6R+vnZ5oNFQR5QKgGpk741A==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/remark-directive/-/remark-directive-4.0.0.tgz",
+ "integrity": "sha512-7sxn4RfF1o3izevPV1DheyGDD6X4c9hrGpfdUpm7uC++dqrnJxIZVkk7CoKqcLm0VUMAuOol7Mno3m6g8cfMuA==",
"license": "MIT",
"dependencies": {
"@types/mdast": "^4.0.0",
"mdast-util-directive": "^3.0.0",
- "micromark-extension-directive": "^3.0.0",
+ "micromark-extension-directive": "^4.0.0",
"unified": "^11.0.0"
},
"funding": {
@@ -5704,9 +6561,9 @@
}
},
"node_modules/remark-smartypants": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-3.0.2.tgz",
- "integrity": "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-3.0.3.tgz",
+ "integrity": "sha512-gCaK+ndZ0hYezlqFegHFCVh2CQemsi0Npdh1qVM9bxlUFknjkbP6VmojWhddOCrbK0PbbacmYLWfTULRiT1eWA==",
"license": "MIT",
"dependencies": {
"retext": "^9.0.0",
@@ -5733,6 +6590,15 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/resolve-pkg-maps": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
+ }
+ },
"node_modules/retext": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/retext/-/retext-9.0.0.tgz",
@@ -5794,96 +6660,74 @@
"url": "https://opencollective.com/unified"
}
},
- "node_modules/reusify": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
- "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
- "license": "MIT",
- "engines": {
- "iojs": ">=1.0.0",
- "node": ">=0.10.0"
- }
- },
- "node_modules/rollup": {
- "version": "4.60.1",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.1.tgz",
- "integrity": "sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==",
+ "node_modules/rolldown": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.3.tgz",
+ "integrity": "sha512-rn9wpmxplLf7NLNyCk9FyWh3FM43DbY8jOzCdEPzH7uflhTftRbCEpqi6Ly2osgoU8OwObtmavMbWLaWy4LX7A==",
"license": "MIT",
"dependencies": {
- "@types/estree": "1.0.8"
+ "@oxc-project/types": "=0.143.0",
+ "@rolldown/pluginutils": "^1.0.0"
},
"bin": {
- "rollup": "dist/bin/rollup"
+ "rolldown": "bin/cli.mjs"
},
"engines": {
- "node": ">=18.0.0",
- "npm": ">=8.0.0"
+ "node": "^20.19.0 || >=22.12.0"
},
"optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.60.1",
- "@rollup/rollup-android-arm64": "4.60.1",
- "@rollup/rollup-darwin-arm64": "4.60.1",
- "@rollup/rollup-darwin-x64": "4.60.1",
- "@rollup/rollup-freebsd-arm64": "4.60.1",
- "@rollup/rollup-freebsd-x64": "4.60.1",
- "@rollup/rollup-linux-arm-gnueabihf": "4.60.1",
- "@rollup/rollup-linux-arm-musleabihf": "4.60.1",
- "@rollup/rollup-linux-arm64-gnu": "4.60.1",
- "@rollup/rollup-linux-arm64-musl": "4.60.1",
- "@rollup/rollup-linux-loong64-gnu": "4.60.1",
- "@rollup/rollup-linux-loong64-musl": "4.60.1",
- "@rollup/rollup-linux-ppc64-gnu": "4.60.1",
- "@rollup/rollup-linux-ppc64-musl": "4.60.1",
- "@rollup/rollup-linux-riscv64-gnu": "4.60.1",
- "@rollup/rollup-linux-riscv64-musl": "4.60.1",
- "@rollup/rollup-linux-s390x-gnu": "4.60.1",
- "@rollup/rollup-linux-x64-gnu": "4.60.1",
- "@rollup/rollup-linux-x64-musl": "4.60.1",
- "@rollup/rollup-openbsd-x64": "4.60.1",
- "@rollup/rollup-openharmony-arm64": "4.60.1",
- "@rollup/rollup-win32-arm64-msvc": "4.60.1",
- "@rollup/rollup-win32-ia32-msvc": "4.60.1",
- "@rollup/rollup-win32-x64-gnu": "4.60.1",
- "@rollup/rollup-win32-x64-msvc": "4.60.1",
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "queue-microtask": "^1.2.2"
+ "@rolldown/binding-android-arm64": "1.2.3",
+ "@rolldown/binding-darwin-arm64": "1.2.3",
+ "@rolldown/binding-darwin-x64": "1.2.3",
+ "@rolldown/binding-freebsd-x64": "1.2.3",
+ "@rolldown/binding-linux-arm-gnueabihf": "1.2.3",
+ "@rolldown/binding-linux-arm64-gnu": "1.2.3",
+ "@rolldown/binding-linux-arm64-musl": "1.2.3",
+ "@rolldown/binding-linux-ppc64-gnu": "1.2.3",
+ "@rolldown/binding-linux-s390x-gnu": "1.2.3",
+ "@rolldown/binding-linux-x64-gnu": "1.2.3",
+ "@rolldown/binding-linux-x64-musl": "1.2.3",
+ "@rolldown/binding-openharmony-arm64": "1.2.3",
+ "@rolldown/binding-win32-arm64-msvc": "1.2.3",
+ "@rolldown/binding-win32-x64-msvc": "1.2.3"
+ }
+ },
+ "node_modules/satteri": {
+ "version": "0.9.5",
+ "resolved": "https://registry.npmjs.org/satteri/-/satteri-0.9.5.tgz",
+ "integrity": "sha512-ZuWVl+vnM64y+/TtX8Kosv2c00W+hLQiiwnEL6H0UKVVrxFqMw4D2CJHHQaouVd89OAhtBBfjWLqhKi3TVUV4w==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.5",
+ "@types/hast": "^3.0.4",
+ "@types/mdast": "^4.0.4",
+ "@types/unist": "^3.0.3"
+ },
+ "optionalDependencies": {
+ "@bruits/satteri-darwin-arm64": "0.9.5",
+ "@bruits/satteri-darwin-x64": "0.9.5",
+ "@bruits/satteri-linux-arm64-gnu": "0.9.5",
+ "@bruits/satteri-linux-arm64-musl": "0.9.5",
+ "@bruits/satteri-linux-x64-gnu": "0.9.5",
+ "@bruits/satteri-linux-x64-musl": "0.9.5",
+ "@bruits/satteri-wasm32-wasi": "0.9.5",
+ "@bruits/satteri-win32-arm64-msvc": "0.9.5",
+ "@bruits/satteri-win32-x64-msvc": "0.9.5"
}
},
"node_modules/sax": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz",
- "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==",
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.1.tgz",
+ "integrity": "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==",
"license": "BlueOak-1.0.0",
"engines": {
"node": ">=11.0.0"
}
},
"node_modules/semver": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
- "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
+ "version": "7.8.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz",
+ "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==",
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
@@ -5932,19 +6776,22 @@
}
},
"node_modules/shiki": {
- "version": "3.23.0",
- "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.23.0.tgz",
- "integrity": "sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA==",
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/shiki/-/shiki-4.4.2.tgz",
+ "integrity": "sha512-P8F/dFhRevaw2uSdeIYlq/5SXZNY85DPtmXQ947gD1Zj2JqO5AkNvVVBar0Me9JkFx3uzVud/qOtP5ek9NEQGA==",
"license": "MIT",
"dependencies": {
- "@shikijs/core": "3.23.0",
- "@shikijs/engine-javascript": "3.23.0",
- "@shikijs/engine-oniguruma": "3.23.0",
- "@shikijs/langs": "3.23.0",
- "@shikijs/themes": "3.23.0",
- "@shikijs/types": "3.23.0",
+ "@shikijs/core": "4.4.2",
+ "@shikijs/engine-javascript": "4.4.2",
+ "@shikijs/engine-oniguruma": "4.4.2",
+ "@shikijs/langs": "4.4.2",
+ "@shikijs/themes": "4.4.2",
+ "@shikijs/types": "4.4.2",
"@shikijs/vscode-textmate": "^10.0.2",
- "@types/hast": "^3.0.4"
+ "@types/hast": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=20"
}
},
"node_modules/simple-swizzle": {
@@ -5988,9 +6835,9 @@
"license": "MIT"
},
"node_modules/smol-toml": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.6.1.tgz",
- "integrity": "sha512-dWUG8F5sIIARXih1DTaQAX4SsiTXhInKf1buxdY9DIg4ZYPZK5nGM1VRIYmEbDbsHt7USo99xSLFu5Q1IqTmsg==",
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.7.1.tgz",
+ "integrity": "sha512-PPlsspAZ4jbMBu5DMFhfUGDQLu/vrL4SyBROVS37x8ynnVmFIs1VPBz1Co8Xks3TvpIaZXmU85y4DrQ+UyVFoQ==",
"license": "BSD-3-Clause",
"engines": {
"node": ">= 18"
@@ -6027,35 +6874,12 @@
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
- "license": "BSD-3-Clause"
- },
"node_modules/stream-replace-string": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/stream-replace-string/-/stream-replace-string-2.0.0.tgz",
"integrity": "sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==",
"license": "MIT"
},
- "node_modules/string-width": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
- "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
- "license": "MIT",
- "dependencies": {
- "emoji-regex": "^10.3.0",
- "get-east-asian-width": "^1.0.0",
- "strip-ansi": "^7.1.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/stringify-entities": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz",
@@ -6070,30 +6894,6 @@
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/strip-ansi": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
- "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^6.2.2"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
- }
- },
- "node_modules/strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/style-to-js": {
"version": "1.1.21",
"resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.21.tgz",
@@ -6112,38 +6912,69 @@
"inline-style-parser": "0.2.7"
}
},
- "node_modules/tinyexec": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz",
- "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==",
- "license": "MIT"
- },
- "node_modules/tinyglobby": {
- "version": "0.2.15",
- "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
- "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
+ "node_modules/svgo": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.2.tgz",
+ "integrity": "sha512-ekx94z1rRc5LDi6oSUaeRnYhd0UOJxdtQCL2rF8xpWxD3TPAsISWOrxezqGovqS38GRZOdpDfvQe3ts6F7nsng==",
"license": "MIT",
"dependencies": {
- "fdir": "^6.5.0",
- "picomatch": "^4.0.3"
+ "commander": "^11.1.0",
+ "css-select": "^5.1.0",
+ "css-tree": "^3.0.1",
+ "css-what": "^6.1.0",
+ "csso": "^5.0.5",
+ "picocolors": "^1.1.1",
+ "sax": "^1.5.0"
+ },
+ "bin": {
+ "svgo": "bin/svgo.js"
},
"engines": {
- "node": ">=12.0.0"
+ "node": ">=16"
},
"funding": {
- "url": "https://github.com/sponsors/SuperchupuDev"
+ "type": "opencollective",
+ "url": "https://opencollective.com/svgo"
}
},
- "node_modules/to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "node_modules/tiny-inflate": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz",
+ "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==",
+ "license": "MIT"
+ },
+ "node_modules/tinyclip": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/tinyclip/-/tinyclip-0.1.15.tgz",
+ "integrity": "sha512-uo33abH+Ays0xYaDysoBt494Hb3hsEczMpcC0MwFl773pazORx4fmvKhclhR1wonUbB6vvpRsvVMwnhfqeMc+A==",
+ "license": "MIT",
+ "engines": {
+ "node": "^16.14.0 || >= 17.3.0"
+ }
+ },
+ "node_modules/tinyexec": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.3.0.tgz",
+ "integrity": "sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tinyglobby": {
+ "version": "0.2.17",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz",
+ "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==",
"license": "MIT",
"dependencies": {
- "is-number": "^7.0.0"
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.4"
},
"engines": {
- "node": ">=8.0"
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
}
},
"node_modules/trim-lines": {
@@ -6166,26 +6997,6 @@
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/tsconfck": {
- "version": "3.1.6",
- "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.6.tgz",
- "integrity": "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==",
- "license": "MIT",
- "bin": {
- "tsconfck": "bin/tsconfck.js"
- },
- "engines": {
- "node": "^18 || >=20"
- },
- "peerDependencies": {
- "typescript": "^5.0.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
"node_modules/tslib": {
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
@@ -6193,42 +7004,16 @@
"license": "0BSD",
"optional": true
},
- "node_modules/type-fest": {
- "version": "4.41.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz",
- "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==",
- "license": "(MIT OR CC0-1.0)",
- "engines": {
- "node": ">=16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/typescript": {
- "version": "5.9.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
- "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
- "license": "Apache-2.0",
- "peer": true,
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=14.17"
- }
- },
"node_modules/ufo": {
- "version": "1.6.3",
- "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.3.tgz",
- "integrity": "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==",
+ "version": "1.6.4",
+ "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.4.tgz",
+ "integrity": "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==",
"license": "MIT"
},
"node_modules/ultrahtml": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.6.0.tgz",
- "integrity": "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==",
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.7.0.tgz",
+ "integrity": "sha512-2xRd0VHoAQE4M+vF/DvFFB7pUV0ZxTW1TLi7lHQWnF/Sb5TPeEUV/l+hxcNnGO00ZXGnR0voCMmYRKQf+rvJ2g==",
"license": "MIT"
},
"node_modules/uncrypto": {
@@ -6238,9 +7023,9 @@
"license": "MIT"
},
"node_modules/undici-types": {
- "version": "7.18.2",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz",
- "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==",
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.3.0.tgz",
+ "integrity": "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==",
"license": "MIT"
},
"node_modules/unified": {
@@ -6262,6 +7047,17 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/unifont": {
+ "version": "0.7.4",
+ "resolved": "https://registry.npmjs.org/unifont/-/unifont-0.7.4.tgz",
+ "integrity": "sha512-oHeis4/xl42HUIeHuNZRGEvxj5AaIKR+bHPNegRq5LV1gdc3jundpONbjglKpihmJf+dswygdMJn3eftGIMemg==",
+ "license": "MIT",
+ "dependencies": {
+ "css-tree": "^3.1.0",
+ "ofetch": "^1.5.1",
+ "ohash": "^2.0.11"
+ }
+ },
"node_modules/unist-util-find-after": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz",
@@ -6435,626 +7231,200 @@
"uploadthing": "^7.4.4"
},
"peerDependenciesMeta": {
- "@azure/app-configuration": {
- "optional": true
- },
- "@azure/cosmos": {
- "optional": true
- },
- "@azure/data-tables": {
- "optional": true
- },
- "@azure/identity": {
- "optional": true
- },
- "@azure/keyvault-secrets": {
- "optional": true
- },
- "@azure/storage-blob": {
- "optional": true
- },
- "@capacitor/preferences": {
- "optional": true
- },
- "@deno/kv": {
- "optional": true
- },
- "@netlify/blobs": {
- "optional": true
- },
- "@planetscale/database": {
- "optional": true
- },
- "@upstash/redis": {
- "optional": true
- },
- "@vercel/blob": {
- "optional": true
- },
- "@vercel/functions": {
- "optional": true
- },
- "@vercel/kv": {
- "optional": true
- },
- "aws4fetch": {
- "optional": true
- },
- "db0": {
- "optional": true
- },
- "idb-keyval": {
- "optional": true
- },
- "ioredis": {
- "optional": true
- },
- "uploadthing": {
- "optional": true
- }
- }
- },
- "node_modules/util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
- "license": "MIT"
- },
- "node_modules/vfile": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz",
- "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^3.0.0",
- "vfile-message": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/vfile-location": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz",
- "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^3.0.0",
- "vfile": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/vfile-message": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz",
- "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^3.0.0",
- "unist-util-stringify-position": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/vite": {
- "version": "6.4.1",
- "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz",
- "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==",
- "license": "MIT",
- "dependencies": {
- "esbuild": "^0.25.0",
- "fdir": "^6.4.4",
- "picomatch": "^4.0.2",
- "postcss": "^8.5.3",
- "rollup": "^4.34.9",
- "tinyglobby": "^0.2.13"
- },
- "bin": {
- "vite": "bin/vite.js"
- },
- "engines": {
- "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
- },
- "funding": {
- "url": "https://github.com/vitejs/vite?sponsor=1"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.3"
- },
- "peerDependencies": {
- "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
- "jiti": ">=1.21.0",
- "less": "*",
- "lightningcss": "^1.21.0",
- "sass": "*",
- "sass-embedded": "*",
- "stylus": "*",
- "sugarss": "*",
- "terser": "^5.16.0",
- "tsx": "^4.8.1",
- "yaml": "^2.4.2"
- },
- "peerDependenciesMeta": {
- "@types/node": {
- "optional": true
- },
- "jiti": {
- "optional": true
- },
- "less": {
- "optional": true
- },
- "lightningcss": {
- "optional": true
- },
- "sass": {
- "optional": true
- },
- "sass-embedded": {
- "optional": true
- },
- "stylus": {
- "optional": true
- },
- "sugarss": {
- "optional": true
- },
- "terser": {
- "optional": true
- },
- "tsx": {
- "optional": true
- },
- "yaml": {
- "optional": true
- }
- }
- },
- "node_modules/vite/node_modules/@esbuild/aix-ppc64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz",
- "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==",
- "cpu": [
- "ppc64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "aix"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/android-arm": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz",
- "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==",
- "cpu": [
- "arm"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/android-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz",
- "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/android-x64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz",
- "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/darwin-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz",
- "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/darwin-x64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz",
- "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/freebsd-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz",
- "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/freebsd-x64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz",
- "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/linux-arm": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz",
- "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==",
- "cpu": [
- "arm"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/linux-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz",
- "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/linux-ia32": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz",
- "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==",
- "cpu": [
- "ia32"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/linux-loong64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz",
- "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==",
- "cpu": [
- "loong64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/linux-mips64el": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz",
- "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==",
- "cpu": [
- "mips64el"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/linux-ppc64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz",
- "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==",
- "cpu": [
- "ppc64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/linux-riscv64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz",
- "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==",
- "cpu": [
- "riscv64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/linux-s390x": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz",
- "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==",
- "cpu": [
- "s390x"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/linux-x64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz",
- "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/netbsd-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz",
- "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/netbsd-x64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz",
- "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/vite/node_modules/@esbuild/openbsd-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz",
- "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=18"
+ "@azure/app-configuration": {
+ "optional": true
+ },
+ "@azure/cosmos": {
+ "optional": true
+ },
+ "@azure/data-tables": {
+ "optional": true
+ },
+ "@azure/identity": {
+ "optional": true
+ },
+ "@azure/keyvault-secrets": {
+ "optional": true
+ },
+ "@azure/storage-blob": {
+ "optional": true
+ },
+ "@capacitor/preferences": {
+ "optional": true
+ },
+ "@deno/kv": {
+ "optional": true
+ },
+ "@netlify/blobs": {
+ "optional": true
+ },
+ "@planetscale/database": {
+ "optional": true
+ },
+ "@upstash/redis": {
+ "optional": true
+ },
+ "@vercel/blob": {
+ "optional": true
+ },
+ "@vercel/functions": {
+ "optional": true
+ },
+ "@vercel/kv": {
+ "optional": true
+ },
+ "aws4fetch": {
+ "optional": true
+ },
+ "db0": {
+ "optional": true
+ },
+ "idb-keyval": {
+ "optional": true
+ },
+ "ioredis": {
+ "optional": true
+ },
+ "uploadthing": {
+ "optional": true
+ }
}
},
- "node_modules/vite/node_modules/@esbuild/openbsd-x64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz",
- "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==",
- "cpu": [
- "x64"
- ],
+ "node_modules/url-extras": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/url-extras/-/url-extras-0.1.0.tgz",
+ "integrity": "sha512-8tzwTeXFPuX/5PHuCDQE5Dd9Ts4rwoq2t9aIT+HS4iAVpmj5l4Ao7Q+BuuFjvWRqrLswBhQDk8O96ZicgCqQqw==",
"license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
"engines": {
- "node": ">=18"
+ "node": ">=20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/vite/node_modules/@esbuild/sunos-x64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz",
- "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "sunos"
- ],
- "engines": {
- "node": ">=18"
- }
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "license": "MIT"
},
- "node_modules/vite/node_modules/@esbuild/win32-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz",
- "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==",
- "cpu": [
- "arm64"
- ],
+ "node_modules/vfile": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz",
+ "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==",
"license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "node_modules/vite/node_modules/@esbuild/win32-ia32": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz",
- "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==",
- "cpu": [
- "ia32"
- ],
+ "node_modules/vfile-location": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz",
+ "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==",
"license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "node_modules/vite/node_modules/@esbuild/win32-x64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz",
- "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==",
- "cpu": [
- "x64"
- ],
+ "node_modules/vfile-message": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz",
+ "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==",
"license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-stringify-position": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "node_modules/vite/node_modules/esbuild": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz",
- "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==",
- "hasInstallScript": true,
+ "node_modules/vite": {
+ "version": "8.2.1",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-8.2.1.tgz",
+ "integrity": "sha512-EU/eS7BH3XROHh2YnBefjM6DBKA6ZeMZEYQbj7NLWg5wHYlhB8B/Mayd5XsgWq+NFYccDOTemRpdETWR6Ka/lw==",
"license": "MIT",
+ "dependencies": {
+ "lightningcss": "^1.33.0",
+ "picomatch": "^4.0.5",
+ "postcss": "^8.5.25",
+ "rolldown": "~1.2.1",
+ "tinyglobby": "^0.2.17"
+ },
"bin": {
- "esbuild": "bin/esbuild"
+ "vite": "bin/vite.js"
},
"engines": {
- "node": ">=18"
+ "node": "^20.19.0 || >=22.12.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
},
"optionalDependencies": {
- "@esbuild/aix-ppc64": "0.25.12",
- "@esbuild/android-arm": "0.25.12",
- "@esbuild/android-arm64": "0.25.12",
- "@esbuild/android-x64": "0.25.12",
- "@esbuild/darwin-arm64": "0.25.12",
- "@esbuild/darwin-x64": "0.25.12",
- "@esbuild/freebsd-arm64": "0.25.12",
- "@esbuild/freebsd-x64": "0.25.12",
- "@esbuild/linux-arm": "0.25.12",
- "@esbuild/linux-arm64": "0.25.12",
- "@esbuild/linux-ia32": "0.25.12",
- "@esbuild/linux-loong64": "0.25.12",
- "@esbuild/linux-mips64el": "0.25.12",
- "@esbuild/linux-ppc64": "0.25.12",
- "@esbuild/linux-riscv64": "0.25.12",
- "@esbuild/linux-s390x": "0.25.12",
- "@esbuild/linux-x64": "0.25.12",
- "@esbuild/netbsd-arm64": "0.25.12",
- "@esbuild/netbsd-x64": "0.25.12",
- "@esbuild/openbsd-arm64": "0.25.12",
- "@esbuild/openbsd-x64": "0.25.12",
- "@esbuild/openharmony-arm64": "0.25.12",
- "@esbuild/sunos-x64": "0.25.12",
- "@esbuild/win32-arm64": "0.25.12",
- "@esbuild/win32-ia32": "0.25.12",
- "@esbuild/win32-x64": "0.25.12"
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^20.19.0 || >=22.12.0",
+ "@vitejs/devtools": "^0.4.0",
+ "esbuild": "^0.27.0 || ^0.28.0",
+ "jiti": ">=1.21.0",
+ "less": "^4.0.0",
+ "sass": "^1.70.0",
+ "sass-embedded": "^1.70.0",
+ "stylus": ">=0.54.8",
+ "sugarss": "^5.0.0",
+ "terser": "^5.16.0",
+ "tsx": "^4.8.1",
+ "yaml": "^2.4.2"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "@vitejs/devtools": {
+ "optional": true
+ },
+ "esbuild": {
+ "optional": true
+ },
+ "jiti": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "sass-embedded": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ },
+ "tsx": {
+ "optional": true
+ },
+ "yaml": {
+ "optional": true
+ }
}
},
"node_modules/vitefu": {
@@ -7086,59 +7456,6 @@
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/which-pm": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/which-pm/-/which-pm-3.0.1.tgz",
- "integrity": "sha512-v2JrMq0waAI4ju1xU5x3blsxBBMgdgZve580iYMN5frDaLGjbA24fok7wKCsya8KLVO19Ju4XDc5+zTZCJkQfg==",
- "license": "MIT",
- "dependencies": {
- "load-yaml-file": "^0.2.0"
- },
- "engines": {
- "node": ">=18.12"
- }
- },
- "node_modules/which-pm-runs": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz",
- "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==",
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/widest-line": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz",
- "integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==",
- "license": "MIT",
- "dependencies": {
- "string-width": "^7.0.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/wrap-ansi": {
- "version": "9.0.2",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz",
- "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==",
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^6.2.1",
- "string-width": "^7.0.0",
- "strip-ansi": "^7.1.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
"node_modules/xxhash-wasm": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz",
@@ -7146,12 +7463,12 @@
"license": "MIT"
},
"node_modules/yargs-parser": {
- "version": "21.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
- "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "version": "22.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz",
+ "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==",
"license": "ISC",
"engines": {
- "node": ">=12"
+ "node": "^20.19.0 || ^22.12.0 || >=23"
}
},
"node_modules/yocto-queue": {
@@ -7166,33 +7483,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/yocto-spinner": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/yocto-spinner/-/yocto-spinner-0.2.3.tgz",
- "integrity": "sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ==",
- "license": "MIT",
- "dependencies": {
- "yoctocolors": "^2.1.1"
- },
- "engines": {
- "node": ">=18.19"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/yoctocolors": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz",
- "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/zod": {
"version": "3.25.76",
"resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
@@ -7202,24 +7492,6 @@
"url": "https://github.com/sponsors/colinhacks"
}
},
- "node_modules/zod-to-json-schema": {
- "version": "3.25.2",
- "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz",
- "integrity": "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==",
- "license": "ISC",
- "peerDependencies": {
- "zod": "^3.25.28 || ^4"
- }
- },
- "node_modules/zod-to-ts": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/zod-to-ts/-/zod-to-ts-1.2.0.tgz",
- "integrity": "sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA==",
- "peerDependencies": {
- "typescript": "^4.9.4 || ^5.0.2",
- "zod": "^3"
- }
- },
"node_modules/zwitch": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
diff --git a/docs/package.json b/docs/package.json
index 83327266..816dacc1 100644
--- a/docs/package.json
+++ b/docs/package.json
@@ -12,8 +12,8 @@
"check": "astro check"
},
"dependencies": {
- "@astrojs/starlight": "0.31.1",
- "astro": "5.3.0",
+ "@astrojs/starlight": "0.41.5",
+ "astro": "7.1.4",
"sharp": "^0.33.0"
},
"overrides": {
diff --git a/docs/src/content.config.ts b/docs/src/content.config.ts
index 4f92c312..0bffff6e 100644
--- a/docs/src/content.config.ts
+++ b/docs/src/content.config.ts
@@ -1,6 +1,14 @@
+import { docsLoader } from "@astrojs/starlight/loaders";
import { docsSchema } from "@astrojs/starlight/schema";
import { defineCollection } from "astro:content";
+/**
+ * The `loader` is required from Astro 5 onward (#1461). Without it the `docs`
+ * collection resolves empty and `astro build` still **exits 0** — it just emits
+ * a single 404 page and warns "The collection "docs" does not exist or is
+ * empty" in passing. A green build is not evidence the site has any content;
+ * check the page count.
+ */
export const collections = {
- docs: defineCollection({ schema: docsSchema() }),
+ docs: defineCollection({ loader: docsLoader(), schema: docsSchema() }),
};
diff --git a/docs/src/content/docs/charts/single-value.mdx b/docs/src/content/docs/charts/single-value.mdx
index 91c4d228..74dce9aa 100644
--- a/docs/src/content/docs/charts/single-value.mdx
+++ b/docs/src/content/docs/charts/single-value.mdx
@@ -43,7 +43,7 @@ ORDER BY total DESC
| Suffix | text | (empty) | Text appended to the value (e.g., "%", " items") |
| Decimal Places | number | -1 (auto) | Fixed decimal places (0-6). -1 for automatic |
| Font Size | select | lg | Size of the displayed value: Small, Medium, Large, Extra Large |
-| Number Format | select | plain | Plain, Comma (1,234), Compact (1.2k), or Percent |
+| Number Format | select | plain | Plain, Comma (1,234), Compact (1.2k), or Percent. Percent expects a **ratio** and scales it — return 0.42 to render 42% |
| Show Trend Indicator | boolean | false | Show a trend arrow comparing current to previous period (requires 2 rows) |
## Tips
@@ -51,3 +51,4 @@ ORDER BY total DESC
- Combine Prefix and Number Format for currency displays: set Prefix to "$" and Number Format to "Comma" for values like "$1,234,567".
- Enable Show Trend Indicator and return two rows to add an up/down arrow showing period-over-period change.
- Use Compact number format for large numbers that would otherwise be hard to read at a glance.
+- Percent takes the ratio, not the percentage. `SELECT delivered::float / total AS value` with Number Format set to Percent renders 42%; pre-multiplying by 100 in the query renders 4,200%.
diff --git a/scripts/demo/chart-reference.json b/scripts/demo/chart-reference.json
index 3ac537c8..830768b9 100644
--- a/scripts/demo/chart-reference.json
+++ b/scripts/demo/chart-reference.json
@@ -64,7 +64,7 @@
"id": "page-bar-v-4",
"chartType": "bar",
"connectionId": "conn_postgres_read",
- "query": "SELECT parent.name AS category, o.status AS series, SUM(oi.qty * oi.price)::float AS revenue FROM neoboard_demo_public.order_items oi JOIN neoboard_demo_public.products p ON p.id = oi.product_id JOIN neoboard_demo_public.categories sub ON sub.id = p.category_id JOIN neoboard_demo_public.categories parent ON parent.id = sub.parent_id JOIN neoboard_demo_public.orders o ON o.id = oi.order_id WHERE o.status IN ('delivered','shipped','pending') GROUP BY parent.name, o.status ORDER BY parent.name",
+ "query": "SELECT parent.name AS category, SUM(oi.qty * oi.price) FILTER (WHERE o.status = 'delivered')::float AS delivered, SUM(oi.qty * oi.price) FILTER (WHERE o.status = 'shipped')::float AS shipped, SUM(oi.qty * oi.price) FILTER (WHERE o.status = 'pending')::float AS pending FROM neoboard_demo_public.order_items oi JOIN neoboard_demo_public.products p ON p.id = oi.product_id JOIN neoboard_demo_public.categories sub ON sub.id = p.category_id JOIN neoboard_demo_public.categories parent ON parent.id = sub.parent_id JOIN neoboard_demo_public.orders o ON o.id = oi.order_id WHERE o.status IN ('delivered','shipped','pending') GROUP BY parent.name ORDER BY parent.name",
"settings": {
"title": "stackMode = stacked",
"chartOptions": {
@@ -76,7 +76,7 @@
"id": "page-bar-v-5",
"chartType": "bar",
"connectionId": "conn_postgres_read",
- "query": "SELECT parent.name AS category, o.status AS series, SUM(oi.qty * oi.price)::float AS revenue FROM neoboard_demo_public.order_items oi JOIN neoboard_demo_public.products p ON p.id = oi.product_id JOIN neoboard_demo_public.categories sub ON sub.id = p.category_id JOIN neoboard_demo_public.categories parent ON parent.id = sub.parent_id JOIN neoboard_demo_public.orders o ON o.id = oi.order_id WHERE o.status IN ('delivered','shipped','pending') GROUP BY parent.name, o.status ORDER BY parent.name",
+ "query": "SELECT parent.name AS category, SUM(oi.qty * oi.price) FILTER (WHERE o.status = 'delivered')::float AS delivered, SUM(oi.qty * oi.price) FILTER (WHERE o.status = 'shipped')::float AS shipped, SUM(oi.qty * oi.price) FILTER (WHERE o.status = 'pending')::float AS pending FROM neoboard_demo_public.order_items oi JOIN neoboard_demo_public.products p ON p.id = oi.product_id JOIN neoboard_demo_public.categories sub ON sub.id = p.category_id JOIN neoboard_demo_public.categories parent ON parent.id = sub.parent_id JOIN neoboard_demo_public.orders o ON o.id = oi.order_id WHERE o.status IN ('delivered','shipped','pending') GROUP BY parent.name ORDER BY parent.name",
"settings": {
"title": "stackMode = percent",
"chartOptions": {
@@ -100,7 +100,7 @@
"id": "page-bar-v-7",
"chartType": "bar",
"connectionId": "conn_postgres_read",
- "query": "SELECT parent.name AS category, o.status AS series, SUM(oi.qty * oi.price)::float AS revenue FROM neoboard_demo_public.order_items oi JOIN neoboard_demo_public.products p ON p.id = oi.product_id JOIN neoboard_demo_public.categories sub ON sub.id = p.category_id JOIN neoboard_demo_public.categories parent ON parent.id = sub.parent_id JOIN neoboard_demo_public.orders o ON o.id = oi.order_id WHERE o.status IN ('delivered','shipped','pending') GROUP BY parent.name, o.status ORDER BY parent.name",
+ "query": "SELECT parent.name AS category, SUM(oi.qty * oi.price) FILTER (WHERE o.status = 'delivered')::float AS delivered, SUM(oi.qty * oi.price) FILTER (WHERE o.status = 'shipped')::float AS shipped, SUM(oi.qty * oi.price) FILTER (WHERE o.status = 'pending')::float AS pending FROM neoboard_demo_public.order_items oi JOIN neoboard_demo_public.products p ON p.id = oi.product_id JOIN neoboard_demo_public.categories sub ON sub.id = p.category_id JOIN neoboard_demo_public.categories parent ON parent.id = sub.parent_id JOIN neoboard_demo_public.orders o ON o.id = oi.order_id WHERE o.status IN ('delivered','shipped','pending') GROUP BY parent.name ORDER BY parent.name",
"settings": {
"title": "showLegend = false",
"chartOptions": {
@@ -125,7 +125,7 @@
"id": "page-bar-v-9",
"chartType": "bar",
"connectionId": "conn_postgres_read",
- "query": "SELECT parent.name AS category, o.status AS series, SUM(oi.qty * oi.price)::float AS revenue FROM neoboard_demo_public.order_items oi JOIN neoboard_demo_public.products p ON p.id = oi.product_id JOIN neoboard_demo_public.categories sub ON sub.id = p.category_id JOIN neoboard_demo_public.categories parent ON parent.id = sub.parent_id JOIN neoboard_demo_public.orders o ON o.id = oi.order_id WHERE o.status IN ('delivered','shipped','pending') GROUP BY parent.name, o.status ORDER BY parent.name",
+ "query": "SELECT parent.name AS category, SUM(oi.qty * oi.price) FILTER (WHERE o.status = 'delivered')::float AS delivered, SUM(oi.qty * oi.price) FILTER (WHERE o.status = 'shipped')::float AS shipped, SUM(oi.qty * oi.price) FILTER (WHERE o.status = 'pending')::float AS pending FROM neoboard_demo_public.order_items oi JOIN neoboard_demo_public.products p ON p.id = oi.product_id JOIN neoboard_demo_public.categories sub ON sub.id = p.category_id JOIN neoboard_demo_public.categories parent ON parent.id = sub.parent_id JOIN neoboard_demo_public.orders o ON o.id = oi.order_id WHERE o.status IN ('delivered','shipped','pending') GROUP BY parent.name ORDER BY parent.name",
"settings": {
"title": "barGap = 80%",
"chartOptions": {
@@ -214,7 +214,7 @@
"id": "page-bar-v-16",
"chartType": "bar",
"connectionId": "conn_postgres_read",
- "query": "SELECT parent.name AS category, o.status AS series, SUM(oi.qty * oi.price)::float AS revenue FROM neoboard_demo_public.order_items oi JOIN neoboard_demo_public.products p ON p.id = oi.product_id JOIN neoboard_demo_public.categories sub ON sub.id = p.category_id JOIN neoboard_demo_public.categories parent ON parent.id = sub.parent_id JOIN neoboard_demo_public.orders o ON o.id = oi.order_id WHERE o.status IN ('delivered','shipped','pending') GROUP BY parent.name, o.status ORDER BY parent.name",
+ "query": "SELECT parent.name AS category, SUM(oi.qty * oi.price) FILTER (WHERE o.status = 'delivered')::float AS delivered, SUM(oi.qty * oi.price) FILTER (WHERE o.status = 'shipped')::float AS shipped, SUM(oi.qty * oi.price) FILTER (WHERE o.status = 'pending')::float AS pending FROM neoboard_demo_public.order_items oi JOIN neoboard_demo_public.products p ON p.id = oi.product_id JOIN neoboard_demo_public.categories sub ON sub.id = p.category_id JOIN neoboard_demo_public.categories parent ON parent.id = sub.parent_id JOIN neoboard_demo_public.orders o ON o.id = oi.order_id WHERE o.status IN ('delivered','shipped','pending') GROUP BY parent.name ORDER BY parent.name",
"settings": {
"title": "colorblindMode = true",
"chartOptions": {
@@ -489,7 +489,7 @@
"id": "page-line-v-26",
"chartType": "line",
"connectionId": "conn_postgres_read",
- "query": "SELECT to_char(date_trunc('week', created_at), 'YYYY-MM-DD') AS week, status AS series, SUM(total)::float AS revenue FROM neoboard_demo_public.orders WHERE status IN ('delivered','shipped') GROUP BY 1, status ORDER BY 1 LIMIT 24",
+ "query": "SELECT to_char(date_trunc('week', created_at), 'YYYY-MM-DD') AS week, SUM(total) FILTER (WHERE status = 'delivered')::float AS delivered, SUM(total) FILTER (WHERE status = 'shipped')::float AS shipped FROM neoboard_demo_public.orders WHERE status IN ('delivered','shipped') GROUP BY 1 ORDER BY 1 LIMIT 24",
"settings": {
"title": "endLabel = true (multi-series)",
"chartOptions": {
@@ -514,7 +514,7 @@
"id": "page-line-v-28",
"chartType": "line",
"connectionId": "conn_postgres_read",
- "query": "SELECT to_char(date_trunc('week', created_at), 'YYYY-MM-DD') AS week, status AS series, SUM(total)::float AS revenue FROM neoboard_demo_public.orders WHERE status IN ('delivered','shipped') GROUP BY 1, status ORDER BY 1 LIMIT 24",
+ "query": "SELECT to_char(date_trunc('week', created_at), 'YYYY-MM-DD') AS week, SUM(total) FILTER (WHERE status = 'delivered')::float AS delivered, SUM(total) FILTER (WHERE status = 'shipped')::float AS shipped FROM neoboard_demo_public.orders WHERE status IN ('delivered','shipped') GROUP BY 1 ORDER BY 1 LIMIT 24",
"settings": {
"title": "right Y-axis series",
"chartOptions": {
@@ -527,7 +527,7 @@
"id": "page-line-v-29",
"chartType": "line",
"connectionId": "conn_postgres_read",
- "query": "SELECT to_char(date_trunc('week', created_at), 'YYYY-MM-DD') AS week, status AS series, SUM(total)::float AS revenue FROM neoboard_demo_public.orders WHERE status IN ('delivered','shipped') GROUP BY 1, status ORDER BY 1 LIMIT 24",
+ "query": "SELECT to_char(date_trunc('week', created_at), 'YYYY-MM-DD') AS week, SUM(total) FILTER (WHERE status = 'delivered')::float AS delivered, SUM(total) FILTER (WHERE status = 'shipped')::float AS shipped FROM neoboard_demo_public.orders WHERE status IN ('delivered','shipped') GROUP BY 1 ORDER BY 1 LIMIT 24",
"settings": {
"title": "showLegend = false",
"chartOptions": {
@@ -589,7 +589,7 @@
"id": "page-line-v-34",
"chartType": "line",
"connectionId": "conn_postgres_read",
- "query": "SELECT to_char(date_trunc('week', created_at), 'YYYY-MM-DD') AS week, status AS series, SUM(total)::float AS revenue FROM neoboard_demo_public.orders WHERE status IN ('delivered','shipped') GROUP BY 1, status ORDER BY 1 LIMIT 24",
+ "query": "SELECT to_char(date_trunc('week', created_at), 'YYYY-MM-DD') AS week, SUM(total) FILTER (WHERE status = 'delivered')::float AS delivered, SUM(total) FILTER (WHERE status = 'shipped')::float AS shipped FROM neoboard_demo_public.orders WHERE status IN ('delivered','shipped') GROUP BY 1 ORDER BY 1 LIMIT 24",
"settings": {
"title": "palette = warm",
"chartOptions": {
@@ -601,7 +601,7 @@
"id": "page-line-v-35",
"chartType": "line",
"connectionId": "conn_postgres_read",
- "query": "SELECT to_char(date_trunc('week', created_at), 'YYYY-MM-DD') AS week, status AS series, SUM(total)::float AS revenue FROM neoboard_demo_public.orders WHERE status IN ('delivered','shipped') GROUP BY 1, status ORDER BY 1 LIMIT 24",
+ "query": "SELECT to_char(date_trunc('week', created_at), 'YYYY-MM-DD') AS week, SUM(total) FILTER (WHERE status = 'delivered')::float AS delivered, SUM(total) FILTER (WHERE status = 'shipped')::float AS shipped FROM neoboard_demo_public.orders WHERE status IN ('delivered','shipped') GROUP BY 1 ORDER BY 1 LIMIT 24",
"settings": {
"title": "palette = observable",
"chartOptions": {
@@ -613,7 +613,7 @@
"id": "page-line-v-36",
"chartType": "line",
"connectionId": "conn_postgres_read",
- "query": "SELECT to_char(date_trunc('week', created_at), 'YYYY-MM-DD') AS week, status AS series, SUM(total)::float AS revenue FROM neoboard_demo_public.orders WHERE status IN ('delivered','shipped') GROUP BY 1, status ORDER BY 1 LIMIT 24",
+ "query": "SELECT to_char(date_trunc('week', created_at), 'YYYY-MM-DD') AS week, SUM(total) FILTER (WHERE status = 'delivered')::float AS delivered, SUM(total) FILTER (WHERE status = 'shipped')::float AS shipped FROM neoboard_demo_public.orders WHERE status IN ('delivered','shipped') GROUP BY 1 ORDER BY 1 LIMIT 24",
"settings": {
"title": "colorblindMode = true",
"chartOptions": {
@@ -1519,7 +1519,7 @@
"connectionId": "conn_postgres_read",
"query": "SELECT (COUNT(*) FILTER (WHERE status='delivered') * 1.0 / NULLIF(COUNT(*),0))::float AS value FROM neoboard_demo_public.orders",
"settings": {
- "title": "numberFormat = percent (0.42)",
+ "title": "numberFormat = percent (ratio 0.42 → 42.0%)",
"chartOptions": {
"numberFormat": "percent",
"decimalPlaces": 1