diff --git a/.changeset/README.md b/.changeset/README.md index 042fc7a8..9ab5c86d 100644 --- a/.changeset/README.md +++ b/.changeset/README.md @@ -6,6 +6,6 @@ Add a changeset for every user-visible package change: pnpm changeset ``` -All eleven public Charts packages release as one fixed version. Documentation, +All twelve public Charts packages release as one fixed version. Documentation, tests, benchmarks, and build-only changes do not need a changeset unless they change the published package contract. diff --git a/.changeset/config.json b/.changeset/config.json index 73e3ddd2..60f4275e 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -17,6 +17,7 @@ "@tanstack/charts", "@tanstack/charts-scales", "@tanstack/react-charts", + "@tanstack/react-native-charts", "@tanstack/octane-charts", "@tanstack/preact-charts", "@tanstack/vue-charts", diff --git a/.changeset/native-svg-host.md b/.changeset/native-svg-host.md new file mode 100644 index 00000000..9b7b1cd4 --- /dev/null +++ b/.changeset/native-svg-host.md @@ -0,0 +1,8 @@ +--- +'@tanstack/react-native-charts': minor +--- + +Add the experimental React Native SVG host with responsive scene rendering, +focus, selection, accessibility actions, and an optional native tooltip entry. +Ship compiled ESM and declarations, and verify the packed package in bare React +Native and Expo Metro consumers. diff --git a/.github/workflows/chart-library-benchmarks.yml b/.github/workflows/chart-library-benchmarks.yml index a6ca01db..8ba83a4e 100644 --- a/.github/workflows/chart-library-benchmarks.yml +++ b/.github/workflows/chart-library-benchmarks.yml @@ -41,6 +41,9 @@ jobs: - name: Run cached validation graph run: pnpm run validate + - name: Check React Native POC types + run: pnpm react-native:poc:types + - name: Upload production catalog if: github.event_name == 'push' && github.ref == 'refs/heads/main' uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 diff --git a/.gitignore b/.gitignore index 075a9272..0c18d993 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ dist .benchmark-output .catalog-artifact .release-artifacts +.expo/ .nx/cache .nx/workspace-data coverage diff --git a/API-FRICTION.md b/API-FRICTION.md index f942b5a4..119cf02f 100644 --- a/API-FRICTION.md +++ b/API-FRICTION.md @@ -5,7 +5,7 @@ observed difficulty from examples, production migrations, tests, and agent evaluations so later API, documentation, and TanStack Intent skill work is based on evidence. -Last updated: 2026-07-31 +Last updated: 2026-08-01 ## Triage rule @@ -202,6 +202,14 @@ Each entry records: | F-164 | Sankey widths required a custom scene renderer | API | resolved | | F-165 | Incidental D3 utilities leaked into core paths | API/Tooling | resolved | | F-166 | Grouped tooltip order diverged from mark position | API | resolved | +| F-167 | D3 declarations require a browser image global | Tooling | monitoring | +| F-168 | Native interaction copied DOM-renderer policy | API | monitoring | +| F-169 | CSS theme defaults reach the native scene compiler | API | monitoring | +| F-170 | Text measurement omits native typography | API | monitoring | +| F-171 | Packed declarations assume one platform global set | Tooling | resolved | +| F-172 | Metro skipped the fixture-owned Babel runtime | Tooling | resolved | +| F-173 | Metro retained the complete universal barrel | API/Tooling | monitoring | +| F-174 | OIDC release cannot claim a new npm package name | Tooling | monitoring | ## Findings @@ -3178,7 +3186,9 @@ Each entry records: widths. The cross-library fixtures now configure tooltip, keyboard, focus, and animation on each definition through the typed `defineChart` overload; a typed host-options boundary prevents behavior from drifting back to - adapter props. + adapter props. The React Native `/universal` fixture keeps behavior on its + directly authored one-argument definition; the two-argument form remains + reserved for decorating an existing definition. ### F-131 — Stable identity repeated inferable key channels @@ -3712,21 +3722,22 @@ Each entry records: `@tanstack/charts/universal` for common authoring/runtime values plus `@tanstack/charts/types` for universal contracts. The name describes the supported cross-runtime surface while the browser-first root remains the - normal web entry. DOM surface, renderer, host, and render-context types now - live behind an internal module while retaining their existing root - re-exports. Definition inputs retain DOM-free extension token contracts while - the generic tooltip and portal token interfaces are exported for host-adapter - authors. Typed DOM tooltip and portal lifecycles remain in the DOM module. Do - not conditionally change the root until a native host can test one coherent - platform contract. -- Verification: root typechecking and 61 focused core tests pass. The packed - package gate resolves both new entries from `dist`, compiles their + normal web entry. `/portable` was an early pre-1.0 name and is intentionally + not restored; `/universal` is the sole cross-runtime barrel. DOM surface, + renderer, host, and render-context types now live behind an internal module + while retaining their existing root re-exports. Definition inputs retain + DOM-free extension token contracts while the generic tooltip and portal token + interfaces are exported for host-adapter authors. Typed DOM tooltip and + portal lifecycles remain in the DOM module. Do not conditionally change the + root until a native host can test one coherent platform contract. +- Verification: root typechecking and focused core tests pass. The packed + package gate resolves `/universal` and `/types` from `dist` and compiles their declarations, including tooltip definition inputs and direct generic-token imports, with Web Worker rather than DOM globals. Type regressions reject swapping tooltip and portal tokens. The packed bundle proof excludes the root, adapters, Canvas, DOM host/text, browser export, reconciliation, renderer, and SVG surface modules. That full - universal barrel measures 53.95 kB minified and 16.60 kB gzip; granular + universal barrel measures 84.30 kB minified and 26.55 kB gzip; granular subpaths remain the bundle-sensitive option. ### F-155 — Optional tooltip code burdened every chart consumer @@ -3735,7 +3746,7 @@ Each entry records: - Severity: high - Owner: API - Observed in: reducing the representative React line consumer from 25.11 KiB - to 13.89 KiB gzip + to 13.89 KiB gzip and restacking the React Native host proof - Friction: the renderer statically owned native tooltip DOM, formatting, placement, pinning, portal transport, and observers. React's base entries also statically owned `react-dom` portal composition and the default rich @@ -3747,13 +3758,22 @@ Each entry records: portal extension. Move React rich-body composition to drop-in Chart, CanvasChart, and RendererChart exports from `@tanstack/react-charts/tooltip`. Base entries export only erased extension - types and never import those runtime modules. + types and never import those runtime modules. Apply the same boundary to the + native host: its branded renderer token and implementation live at + `@tanstack/react-native-charts/tooltip`, while the base package imports only + the erased native extension contract. A string host brand accepts duplicate + package copies and custom native renderers without accepting the DOM token. - Verification: the representative compact React line is 14,227 gzip bytes. Native tooltip adds 3,381 bytes; portal adds 806 more. Retained-output graph checks prove base renderer and React entries contain none of the tooltip, - portal, or React rich-body modules. Core, Lit, React, export, declaration, - packed-package, and lifecycle tests cover creation, update, disable, - transport switching, custom bodies, and cleanup. + portal, or React rich-body modules. The React Native base host is 10,468 gzip + bytes and adding its tooltip subpath costs 1,990 bytes; retained-input checks + prove both the base host and line consumer omit `Tooltip.tsx`, all native + entries omit web tooltip and portal code, and the base host retains no D3 + runtime. Core, Lit, + React, native, export, declaration, packed-package, and lifecycle tests cover + creation, update, disable, host ownership, transport switching, custom + bodies, and cleanup. ### F-156 — Releases stranded manual Unreleased migration notes @@ -4001,3 +4021,207 @@ Each entry records: `color-domain`, `focus`, and custom comparators as explicit policies. - Verification: runtime tests cover both axes with input and color-domain order opposed to the rendered mark order. + +### F-167 — D3 declarations require a browser image global + +- Status: monitoring +- Severity: medium +- Owner: Tooling +- Observed in: strict DOM-free React Native consumer typecheck +- Friction: after Charts' DOM types were removed from the selected declaration + graph, `skipLibCheck: false` with native libraries still failed in + `@types/d3-array`. Its `blurImage` signature references the browser global + `ImageData`, even though the chart consumer does not import or call that API. +- Current decision: keep the strict configuration as a sentinel. Do not add a + fake `ImageData` declaration, enable DOM libraries, or weaken the package's + runtime boundary to conceal an upstream declaration issue. The normal + React Native configuration passes. +- Verification: the native type gate accepts only the two known + `@types/d3-array` diagnostics or a clean result after the upstream + declaration is fixed. It rejects every other diagnostic. + +### F-168 — Native interaction copied DOM-renderer policy + +- Status: monitoring +- Severity: high +- Owner: API +- Observed in: restacking the React Native focus, selection, and tooltip proof + after tooltip rendering moved behind an extension token +- Friction: focus preset resolution, stable-point restoration, navigation + order, tooltip content construction, anchor resolution, and placement math + are pure behavior but remain private across the DOM renderer and tooltip + implementation. The native proof reproduced them to exercise realistic + interaction. The + extension split also made configured tooltip options require a host-owned + token; importing the web token would pull DOM implementation into Metro. + Restacking onto 0.3.0 also required the duplicate native resolver to learn + the new per-axis anchors and focus-aware custom-anchor context before its + strict type gate passed again. The scene compiler now also emits authored or + default focus layers and inline mark-state metadata. Rendering those groups + directly made inactive focus marks permanently visible in the native scene. + The duplicate tooltip path also sorted display rows before choosing its + primary point, so a non-first focused series changed formatter and anchor + context. Scene restoration compared only semantic point identity, leaving + overlays, tooltips, and external callbacks attached to old point objects + after responsive geometry changed. Callback prop identity could also + retrigger restoration and incorrectly change the focus source. + Restacking onto the visual grouped-tooltip ordering change then exposed the + same drift again: the DOM host defaulted to visual order while the native + copy still used color-domain order. +- Current decision: keep the duplication confined to the private proof. The + native adapter exports a branded extension from its optional `/tooltip` + subpath, accepts duplicate package copies and custom native implementations, + and rejects tokens owned by another host. The environment-neutral `/types` + entry exposes the generic token contract so an adapter does not need a hidden + core import. That generic contract means the wrong host token is rejected at + native render time rather than by the shared definition type; production + typing may need a host-refined definition. A definition becomes host-specific + when decorated with a tooltip token, while applications can still share the + chart spec and options before that platform step. A supported native package + still requires extracting renderer-neutral interaction and tooltip state, + with the DOM and native hosts consuming the same implementation. The proof + omits shared focus-layer groups from its base scene and uses a generic native + overlay; authored focus marks and inline mark states remain unsupported until + scene-state resolution is shared. It now preserves the original primary and + focus group independently from sorted tooltip rows, refreshes restored point + objects and callbacks, and keeps callback refs out of restoration effect + dependencies. +- Verification: focused native tests cover strategy selection, grouping, + restoration, navigation, axis and custom anchors, supported default content, + placement, and extension ownership. The native type and Metro gates use the + native token without web tooltip modules, and retained-input gates prove the + base native entry does not include the optional tooltip implementation. + Browser portal tokens fail explicitly instead of being ignored. The default + native tooltip still lacks the complete `items` formatting contract. A + regression verifies inactive focus-layer paint is absent from the native + scene. Component regressions cover a primary point that sorts after another + series, restored coordinates and callbacks after resize, and stable focus + source when only callback props change. A grouped-tooltip regression now + verifies visual default order and explicit color-domain order in both hosts. + +### F-169 — CSS theme defaults reach the native scene compiler + +- Status: monitoring +- Severity: high +- Owner: API +- Observed in: React Native paint resolution +- Friction: the shared default theme contains `currentColor`, system CSS names, + and CSS custom properties. The native proof can resolve final paint strings + and their fallbacks, but a dynamic chart builder still receives the web + default theme before the host sees the scene. +- Current decision: the private host resolves final paints explicitly and + never evaluates application CSS. Before release, runtime construction needs + an additive platform-default-theme option used both by dynamic build context + and final theme merging. Structured paint references may be warranted if + more host semantics appear. +- Verification: native paint and full-scene tests contain no unresolved CSS + variable or `currentColor` output. Device themes and dynamic native-theme + builders remain unverified. + +### F-170 — Text measurement omits native typography + +- Status: monitoring +- Severity: high +- Owner: API +- Observed in: React Native SVG labels and automatic guide layout +- Friction: `ChartTextMeasureOptions` carries size and weight but not font + family, style, stretch, letter spacing, direction, locale, or font-scale + policy. The native painter accepts a `fontFamily`, while the shared layout + cannot ask a native measurer for the same font. +- Current decision: expose the existing injected measurer in the proof and do + not claim text parity. Production work must complete the typography contract + and decide how native asynchronous measurement feeds deterministic scene + layout without hidden mounted views. +- Verification: injected-measurer core tests pass. No iOS or Android font-scale + and clipping matrix has been run. + +### F-171 — Packed declarations assume one platform global set + +- Status: resolved +- Severity: medium +- Owner: Tooling +- Observed in: making the React Native package publishable +- Friction: the existing packed fixture compiles web packages under DOM + libraries. Loading React Native declarations in that same TypeScript program + introduces incompatible duplicate globals. Removing DOM libraries makes the + web contracts invalid and also exposes F-167. +- Decision: build and pack the native adapter in the release artifact matrix, + but keep its declarations and consumers outside the DOM fixture's TypeScript + program. The package publishes compiled ESM and declarations with `types`, + `react-native`, and `import` conditions. A native-specific gate deploys clean + bare React Native and Expo dependency trees, installs the packed core and + adapter tarballs, and runs each platform's normal Metro configuration. +- Verification: the staged package emits both root and optional-tooltip + declarations, contains no source or tests, and retains no `workspace:` + ranges. Node resolution selects the import build normally and the native + shims under `--conditions=react-native`. Bare React Native 0.86.2 with + `react-native-svg` 15.15.5 and Expo 57 with Expo's 15.15.4 build both + typecheck and produce iOS and Android bundles. All four source maps resolve + the adapter and `/universal` from installed `dist`, include the native + conditional entries, exclude workspace source and guarded browser modules, + and retain only F-167's two known strict dependency diagnostics. Separately, + the workspace Expo 57 fixture boots in Expo Go on an iOS simulator and + renders its chart under Hermes; the packed artifact has not been run on that + simulator. + +### F-172 — Metro skipped the fixture-owned Babel runtime + +- Status: resolved +- Severity: medium +- Owner: Tooling +- Observed in: rebuilding the React Native POC after removing redundant root + dependencies +- Friction: the example correctly declared `@babel/runtime`, but Metro resolved + React Native from pnpm's physical store path and searched that path's + ancestors instead of the example's `node_modules`. Production bundling + failed on `@babel/runtime/helpers/interopRequireDefault` unless the dependency + was duplicated at the workspace root. +- Decision: configure Metro's `resolver.nodeModulesPaths` with the example and + workspace module roots. Keep Babel ownership in the example rather than + masking the monorepo resolution boundary with a root dependency. +- Verification: all ten blank, RNSVG, core, granular full-chart, and universal + full-chart production bundles complete for iOS and Android. The universal + variants require `/universal`, and source-map checks exclude every guarded + browser implementation module. + +### F-173 — Metro retained the complete universal barrel + +- Status: monitoring +- Severity: medium +- Owner: API/Tooling +- Observed in: measuring the documented React Native minimum usage through + `@tanstack/charts/universal` +- Friction: Metro 0.84 retained every runtime module re-exported by the broad + barrel, even though the fixture imported only `defineChart` and `lineY`. The + result included unused marks, data-transform families, and the + environment-neutral static SVG string serializer. Against the same granular + full-chart fixture, `/universal` added 119.06 KiB minified and 28.91 KiB gzip + on both iOS and Android, plus 102 modules per platform. +- Current decision: keep `/universal` as the ergonomic cross-runtime authoring + entry and make the full-chart Metro proof exercise it. Keep the native host's + own imports granular, publish granular entries as the bundle-sensitive path, + and do not describe the broad barrel as cost-equivalent under Metro. +- Verification: the iOS and Android full-chart bundles require + `packages/charts-core/src/universal.ts`, measure 103.00 and 103.05 KiB gzip over + blank respectively, and exclude DOM hosts, browser adapters, Canvas, + reconciliation, SVG resources/surface, web tooltip code, and `react-dom`. + +### F-174 — OIDC release cannot claim a new npm package name + +- Status: monitoring +- Severity: high +- Owner: Tooling +- Observed in: adding `@tanstack/react-native-charts` to the fixed release set +- Friction: the package name is not present in the npm registry, while the + aggregate release uses npm trusted publishing. npm configures that trust from + an existing package's settings, so the normal tokenless workflow cannot be + authorized for this package before its registry entry exists. +- Current decision: keep the package in release artifacts and the fixed + changeset, but require a maintainer-controlled direct public publish of the + checked `0.4.0` tarball. Configure the repository's release workflow as the + trusted publisher immediately afterward; the aggregate changeset can then + publish `0.5.0` through OIDC. +- Verification: `npm view @tanstack/react-native-charts` currently returns + `E404`. Close this entry only after the public package exists, its trusted + publisher names the repository release workflow, and an aggregate release + publishes it without a long-lived write token. diff --git a/NATIVE-PLATFORM-SUPPORT-SPIKE.md b/NATIVE-PLATFORM-SUPPORT-SPIKE.md new file mode 100644 index 00000000..a1ad4832 --- /dev/null +++ b/NATIVE-PLATFORM-SUPPORT-SPIKE.md @@ -0,0 +1,874 @@ +# Native platform support spike + +Research date: 2026-07-30 + +## Decision + +Full React Native support is feasible without replacing the chart grammar or +the D3-based compiler. It is not an adapter-only project. The reusable unit is +the keyed `ChartScene`; sizing, text, paint resolution, rendering, gestures, +tooltips, animation, accessibility, and raster export need native +implementations. + +Build in this order: + +1. Keep the compiler and existing focus algorithms DOM-free, extract the + browser-owned interaction state, and introduce a renderer-neutral + transition plan. +2. Ship `react-native-svg` as the default React Native renderer. +3. Add React Native Skia as an optional renderer for dense or frequently + updated charts, after measuring the crossover. +4. Use the same core refactor to test a NativeScript Core view backed by + `@nativescript/canvas`. +5. Treat Compose, SwiftUI, and Flutter as separate native products consuming a + portable definition or scene schema. They cannot share the live TypeScript + API. + +React Native is the highest-confidence target because its JavaScript runtime +can execute the existing definitions, accessors, imported D3 modules, scales, +and scene compiler. NativeScript is expected to reuse those layers, subject to +a bundler and runtime proof. Kotlin, Swift, and Dart cannot preserve arbitrary +JavaScript callbacks without embedding a JavaScript runtime. + +## What “everything” should mean + +Parity should be measured by outcome, not by reproducing browser mechanics. + +| Contract | Native parity | +| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Data-to-scene behavior | The same definition and data produce equal normalized domains, mark keys, topology, and focus order; numeric geometry and runtime-formatted labels meet explicit tolerances. | +| Visual behavior | Every current scene primitive, mark family, coordinate system, guide, legend, gradient, and clip renders within documented tolerances. | +| Interaction behavior | Library-owned focus, grouped focus, activation, and pinning match. App-owned brush, zoom, scrub, range selection, and editing use documented native integration patterns. | +| Motion behavior | Stable-key enter/update/exit, interruption, reduced motion, and incompatible-path fallback retain the same semantics. | +| Accessibility behavior | A user can discover the chart, traverse or adjust the current datum, hear values, activate selections, and reach an application-provided complete data representation. | +| Export behavior | JavaScript targets retain deterministic resource-aware SVG. Native renderers add platform bitmap snapshots and file/share integration. | +| Web-only behavior | SSR, hydration, DOM callbacks, CSS selectors, and mouse-specific input remain supported by the web renderer; they are not native device requirements. | + +Pixel-identical text across browser engines, Core Text, Android text, and Skia +is not a useful acceptance criterion. Geometry can be exact when renderers +consume the same scene; independently ported compilers need numeric tolerances +for geometry too. + +## Current repository boundary + +The repository already has most of the right compiler boundary: + +- `createChartRuntime` and `createChartScene` take definitions and logical + dimensions and produce a scene. +- Marks emit seven portable node types: group, rule, polyline, area, dot, + rectangle, and label. +- Cartesian, facet, polar, and geographic marks all end at those primitives. + Polar and geographic shapes carry path strings instead of requiring a DOM. +- Focusable `ChartPoint` records are separate from painted nodes. This permits + renderer batching without losing datum identity or hit testing. +- Resource-aware static SVG serialization through + `renderChartSvgWithResources` is already independent of a mounted browser + surface. The lower-level `renderChartSvg` does not emit gradient and clip + resources by itself. +- The conformance corpus contains 100 cases, including 16 executable + interaction cases and 51 interaction scenarios. It supplies coverage, but + many cases combine definition, DOM mount, controls, selectors, and + DOM-specific gesture code. Native conformance first requires extracting + platform-neutral data and definition factories, then replacing mounts, + application controllers, and drivers. + +The public renderer and host boundary is browser-shaped: + +| Evidence | Native consequence | +| ---------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | +| `ChartSurface.element` is `Element`; `ChartRenderer.mount` accepts `HTMLElement`; render callbacks expose `HTMLElement` and `SVGSVGElement`. | A native renderer cannot implement the current public contract honestly. | +| `renderer.ts` owns `ResizeObserver`, pointer and keyboard events, animation frames, DOM tooltips, focus, and reduced-motion queries. | Reusable interaction state is mixed with browser services. | +| `canvas.ts` creates HTML canvases and reads `devicePixelRatio` and media queries. | Its painter can be extracted, but the current Canvas renderer cannot run in NativeScript or React Native. | +| `dom-text.ts` reads computed CSS and measures through browser Canvas 2D. | Native layout needs a different font-resolution and measurement service. | +| `RendererChart.tsx` imports `react-dom`, mounts `
` elements, injects HTML, and portals tooltips into DOM elements. | The React adapter is a web adapter, not a portable React component. | +| Default theme colors use `currentColor` and CSS custom properties. | Native renderers need concrete colors or platform-resolved semantic tokens. | +| Gradient references are emitted as SVG/CSS `url(#id)` strings; scene nodes also carry `className` and `ariaHidden`. | Structured paint references and semantic metadata should be separated from web serialization. | +| `SceneLabel` and `ChartTextMeasureOptions` expose size and weight, but not family, style, stretch, direction, letter spacing, or locale. | Native guide layout cannot reproduce the font that will paint the label. | +| `ResolvedScale.map` is a function and `ChartPoint.datum` can contain any live value. | The in-process scene is portable between JavaScript renderers, but is not a language-neutral serialized schema. | +| The root remains browser-inclusive; `@tanstack/charts/universal` and `@tanstack/charts/types` select the DOM-free value and declaration graph. | Native code has a supported boundary, while strict dependency checking still exposes the upstream `ImageData` declaration issue. | + +Directional code inventory: + +- The browser-heavy renderer, Canvas host, DOM export, DOM text measurement, + and reconciliation files remain a substantial but isolated implementation + layer. +- Most mark, scale, layout, polar, geographic, and scene construction code is + renderer-independent. + +Source counts change too quickly to serve as a credible reuse guarantee. +`types.ts` is now DOM-free, while `renderer.ts` and `canvas.ts` still mix +portable behavior with browser services. The React web adapter remains a +rewrite target because its UI is HTML plus `react-dom`. + +## Required architecture + +```mermaid +flowchart TD + Definition["Live TypeScript chart definition"] --> Runtime["Shared runtime
marks · D3 · scales · guides · layout"] + CompileInputs["Compiler inputs
logical size · text metrics · theme input"] --> Runtime + Runtime --> Scene["In-process ChartScene
geometry · keys · points · scale metadata"] + Scene --> State["Shared controller
focus restoration · activation · pinning · transition plan · semantics"] + Host["Host capabilities
frame clock · input · overlays · accessibility · snapshots"] --> State + State --> Web["Web
SVG · Canvas · DOM overlays"] + State --> RNSVG["React Native
react-native-svg · RN overlays"] + State --> Skia["React Native
Skia · RN semantic overlays"] + State --> NS["NativeScript
Canvas · native overlays"] + Portable["Portable definition / scene DTO"] --> Compose["Compose"] + Portable --> Flutter["Flutter"] + Portable --> Apple["SwiftUI / Core Graphics"] +``` + +Use narrow capabilities, not DOM-shaped polyfills. + +Compiler inputs: + +- `measureText(request)`: resolved font properties in; advance width and line + metrics out, with optional ink bounds. +- `resolvePaint(token)`: semantic or CSS-like theme input to renderer-usable + paint. +- `layoutSize`: logical dimensions supplied by the host. + +Host, controller, and surface capabilities: + +- `requestFrame`, `cancelFrame`, and reduced-motion state. +- Platform coordinates to logical scene coordinates. +- Tooltip and application-owned overlay presentation. +- Focus-indicator geometry, style, visibility, and paint. +- Accessible summary, active-datum controls, actions, and announcements. +- Optional renderer-specific bitmap snapshots. + +The compiler must remain a normal JavaScript operation. React Native worklets +should only own frame-critical numeric state, such as gesture coordinates, +crosshair position, preview transforms, paint interpolation, and a +worklet-safe nearest-point index. Arbitrary accessors, D3 modules, tooltip +formatters, and custom marks should not be serialized into the UI runtime. +[Reanimated worklets](https://docs.swmansion.com/react-native-reanimated/docs/guides/worklets/) +are a separate JavaScript context with serialization constraints. + +### Two scene contracts + +Do not freeze the current `ChartScene` as a cross-language wire format. + +1. **In-process scene:** retains live data references, scale mapping functions, + extension objects, and efficient indexes. React Native and NativeScript can + consume this directly. +2. **Portable scene DTO:** versioned JSON-compatible geometry, resolved paints, + scale metadata, datum IDs, semantic descriptions, and interaction policies. + Compose, SwiftUI, and Flutter can consume this, but live callbacks stay in + their host language. + +The proposed [`PORTABLE-CHART-SPEC.md`](./PORTABLE-CHART-SPEC.md) registry +model is the right definition-level companion. `$call` and `$data` can describe +a supported portable subset. It should never claim to serialize arbitrary +JavaScript accessors, custom tooltip components, or renderer plugins. + +### Core refactor + +1. Keep the completed universal/DOM declaration split. Further separate shared + renderer, focus, semantic, and transition contracts from browser host + implementations. +2. Keep the existing focus strategies, grouping, and spatial contracts. Move + focus restoration/order, pinned state, host input orchestration, default + tooltip content, and render-reason policy out of `renderer.ts` into a + renderer-neutral controller. +3. Introduce keyed scene diffing, interpolation instructions, and interruption + state as a transition planner. Current SVG motion is DOM attribute + reconciliation; current Canvas motion is a whole-frame crossfade. +4. Extract the Canvas 2D painter behind a structural drawing-context + interface. Keep HTML canvas creation, pixel ratio, media queries, and export + in the web host. +5. Resolve theme colors before painting. Keep CSS variables and + `currentColor` as web-adapter inputs, not scene paints. +6. Expand typography to include family, size, weight, style, stretch, letter + spacing, direction, locale, and font-scale policy. Measurement cache keys + must include all of them. +7. Preserve the resolved F-106 ownership rule: dynamic builders receive the + default theme; application and platform overrides enter through typed + inputs or the returned definition and merge during scene creation. Do not + pass a builder the theme that it is itself responsible for returning. +8. Keep deterministic, resource-aware SVG serialization in the shared + JavaScript package. +9. Define capability fallbacks for unsupported paint, path, filter, snapshot, + and semantic features. +10. Give gradients and other resources structured scene references; serialize + `url(#id)` only in the SVG renderer. +11. Treat typography and structured paints as public API migrations. Add + backward-compatible unions and normalization first, or version the change; + update migration docs and conformance before removing string paints or + existing text-measure options. + +This can remain additive for web consumers: add new internal contracts and +make the DOM host implement them. The browser-oriented root remains compatible; +cross-runtime consumers opt into `@tanstack/charts/universal` and +`@tanstack/charts/types`. + +## React Native + +As of this research, React Native 0.86 is current stable. React Native 0.82 +made the New Architecture mandatory. Set the initial support floor to React +Native 0.86 and test Expo SDK 57 plus bare React Native 0.86. Supporting older +minors later requires adding those CI lanes; a nominal floor without tests is +not support. Version-one product scope is iOS and Android. Renderer +dependencies may also run on macOS, Windows, web, or TV, but those platforms +need their own input, accessibility, packaging, and conformance gates. +[React Native versions](https://reactnative.dev/versions.html) · +[React Native 0.82](https://reactnative.dev/blog/2025/10/08/react-native-0.82) · +[Expo SDK 57](https://docs.expo.dev/versions/v57.0.0/) + +The two supported dependency lanes differ: + +| Dependency | Expo SDK 57 / RN 0.86 | Bare RN 0.86 | +| ------------------ | -------------------------------------------- | ----------------------------------------------------- | +| `react-native-svg` | Expo-pinned 15.15.4 | current compatible 15.15.x | +| Skia | Expo-pinned 2.6.2 | current compatible 2.x | +| Reanimated | Expo-pinned 4.5.1 | matching RN 0.86-compatible line | +| Worklets | managed with the Expo/Reanimated combination | matching line from the Reanimated compatibility table | +| Gesture Handler | Expo-pinned ~2.32.0 | current RN 0.86-compatible line | + +Reanimated 4 is New-Architecture-only. Expo configures its supported plugin +combination; bare apps must install the matching Worklets package and plugin. +Gesture Handler also requires `GestureHandlerRootView`. +[Expo Reanimated](https://docs.expo.dev/versions/v57.0.0/sdk/reanimated/) · +[Expo Gesture Handler](https://docs.expo.dev/versions/v57.0.0/sdk/gesture-handler/) · +[Expo SVG](https://docs.expo.dev/versions/v57.0.0/sdk/svg/) · +[Expo Skia](https://docs.expo.dev/versions/v57.0.0/sdk/skia/) · +[Reanimated compatibility](https://docs.swmansion.com/react-native-reanimated/docs/guides/compatibility/) + +D3 is not expected to be the blocker. The imported `d3-array`, `d3-scale`, +`d3-shape`, and `d3-geo` code paths should be audited and executed under +Hermes rather than relying on a blanket package-family claim. `d3-shape` +explicitly supports path-string or Canvas-context output. +[d3-shape](https://d3js.org/d3-shape) + +### Default renderer: `react-native-svg` + +The scene maps directly: + +| Scene primitive | React Native SVG | +| ---------------------- | -------------------------------- | +| group, translate, clip | `G`, `ClipPath`, `Rect` | +| rule | `Line` or `Path` | +| polyline and area | `Path` | +| dot | `Circle` | +| rectangle | `Rect` | +| label | `Text` | +| linear gradient | `Defs`, `LinearGradient`, `Stop` | + +`react-native-svg` supports Fabric and the relevant primitives on iOS, +Android, macOS, Windows, and web. Its 15.13+ compatibility line requires React +Native 0.78+, below the proposed floor. This is dependency support, not a +promise that the chart package supports every one of those platforms. +[react-native-svg repository](https://github.com/software-mansion/react-native-svg) · +[usage reference](https://github.com/software-mansion/react-native-svg/blob/main/USAGE.md) + +Why it should ship first: + +- The current scene is already SVG-shaped. +- D3-generated polar and geographic path strings transfer directly. +- A retained node tree makes initial keyed updates and visual inspection + straightforward. +- It avoids a required Skia binary for ordinary charts. +- It keeps the public renderer replaceable. + +Known limits: + +- The package Codegen configuration creates native component types for SVG + primitives. A large tree may make React construction and Fabric commits + expensive, but that is a benchmark hypothesis rather than a pre-measured + limit. +- Native text metrics and baseline behavior differ from DOM SVG. +- The documented filter set is incomplete, and Android cannot apply a radial + gradient focal point. +- `getBBox`, `isPointInFill`, and related synchronous shape methods are marked + experimental; core layout and hit testing must not depend on them. + [Shape implementation](https://github.com/software-mansion/react-native-svg/blob/main/src/elements/Shape.tsx) +- RNSVG can parse stylesheet classes through `SvgCss`, but the typed production + renderer should resolve styles to props instead of depending on reparsed CSS. +- `strokeDasharray` and uncommon line joins need normalization and + compatibility tests. + +Parsing the existing SVG string through `SvgXml` is useful as a one-day visual +probe, not a production architecture. `SvgXml` and `SvgCss` reparse markup, +lose scene identities and transition keys, and cannot preserve the current DOM +interaction and accessibility model. +[RNSVG package Codegen configuration](https://github.com/software-mansion/react-native-svg/blob/main/package.json) · +[RNSVG filter support](https://github.com/software-mansion/react-native-svg/blob/main/USAGE.md#filters) · +[RNSVG CSS support](https://github.com/software-mansion/react-native-svg/blob/main/USAGE.md#css-support) + +### Optional renderer: React Native Skia + +Skia should consume the same scene and host controller. It is the likely +choice for dense scatterplots, heatmaps, streaming data, gesture-heavy charts, +and animation, but the renderer crossover must be measured. + +React Native Skia 2.x currently requires React Native 0.79+, React 19+, iOS +14+, and Android API 21+. Its documented binary contribution is roughly 6 MB +on iOS and 4 MB on Android, so it should remain an isolated optional entry. +[Skia installation](https://shopify.github.io/react-native-skia/docs/getting-started/installation/) + +Skia provides paths, clipping, gradients, synchronous font metrics, snapshots, +and direct Reanimated shared-value integration. +[Canvas](https://shopify.github.io/react-native-skia/docs/canvas/overview/) · +[text](https://shopify.github.io/react-native-skia/docs/text/text/) · +[gradients](https://shopify.github.io/react-native-skia/docs/shaders/gradients/) · +[animation](https://shopify.github.io/react-native-skia/docs/animations/animations/) + +Do not replace the current web renderer with Skia. Its web target loads +CanvasKit, adds roughly 2.9 MB compressed, and has different WebGL and API +constraints. +[Skia web support](https://shopify.github.io/react-native-skia/docs/getting-started/web/) + +Do not begin with a custom Fabric surface. If profiling proves that SVG and +Skia both fail a required workload, a single Codegen-backed native chart +surface could accept a compact scene buffer. That decision would add iOS, +Android, Codegen, serialization, and React Native version maintenance. +[React Native Codegen](https://reactnative.dev/docs/the-new-architecture/what-is-codegen) + +### Layout and text + +Text is the largest visual-parity risk. + +The current synchronous `ChartTextMeasurer` is a useful compiler seam, but a +React Native `Text` measurement may arrive after layout. The native host should +use this protocol: + +1. Resolve the complete font descriptor and issue keyed measurement requests. +2. Return cached metrics synchronously when present. +3. Use deterministic estimates for cache misses. +4. Batch native measurement of misses. +5. Rebuild the scene once when real measurements materially change guide + bounds. + +For the SVG renderer, test an offscreen native `Text` measurement surface and +`onTextLayout`; do not depend on experimental SVG bounding-box calls. For +Skia, `Font` can synchronously measure a resolved font, while complex scripts, +fallback, wrapping, and bidirectional text require Paragraph shaping. An +offscreen React Native `Text` result may not match RNSVG `Text`; measured and +painted output must agree closely enough to keep guide layout stable. +[Skia font interface](https://github.com/Shopify/react-native-skia/blob/main/packages/skia/src/skia/types/Font/Font.ts) · +[Skia Paragraph](https://shopify.github.io/react-native-skia/docs/text/paragraph/) + +The test matrix must include: + +- system and bundled fonts; +- unavailable weight fallback; +- emoji and mixed scripts; +- RTL; +- locale-specific shaping and number formatting; +- timezone, daylight-saving transitions, and non-Gregorian calendar settings; +- letter spacing and rotated labels; +- dynamic font scale; +- font loading after first render. + +The public API needs an explicit choice for chart text scaling. Blindly +applying unbounded system font scale can make a chart unreadable, while +ignoring it harms accessibility. The likely contract is a host-level +font-scaling policy plus an accessible nonvisual data representation. + +### Sizing and paint + +- The React Native root `View` supplies logical width and height through + `onLayout`. +- Scene coordinates should use density-independent logical units. Each + renderer handles physical pixel density at paint or snapshot time. +- Orientation and container changes schedule a new scene build; they do not + require a `ResizeObserver`. +- `PlatformColor` and `DynamicColorIOS` are opaque platform values, not + portable strings. Each renderer resolves them, subscribes to appearance and + accessibility changes, and uses `processColor` where native or animated + props require it. Deterministic SVG export requires an explicit color + scheme. +- High-contrast capabilities differ across iOS and Android; the adapter maps + the available accessibility state to semantic theme input rather than + promising one cross-platform flag. +- `currentColor`, CSS variables, inherited `font-family`, and CSS class styles + remain web-only resolution mechanisms. + +[React Native Appearance](https://reactnative.dev/docs/appearance) · +[React Native AccessibilityInfo](https://reactnative.dev/docs/accessibilityinfo) + +### Gestures, focus, and application interactions + +Use one chart-level gesture detector, not one responder per mark: + +1. Convert touch, pointer, or hover coordinates to logical scene coordinates. +2. Query the shared focus strategy and spatial index. +3. Update the visual focus overlay at frame cadence. +4. Commit semantic focus and pinned state at a coalesced cadence or gesture + end, and emit application activation or domain-change events through typed + integration points. + +Simple tap and activation can use React Native responders. Scrubbing, pinch, +pan, long press, and composed gestures should use Gesture Handler where +available. For app-owned brush, zoom, scrubber, and editor behavior, the +package supplies coordinates, focus primitives, integration contracts, and +examples; it does not take ownership of application domain or range state. +Gesture Handler recognizes gestures using native platform facilities and +integrates with Reanimated. +[Gesture Handler](https://docs.swmansion.com/react-native-gesture-handler/) + +Input parity is capability-based: + +| Web input | Native behavior | +| -------------------- | -------------------------------------------------------------------- | +| hover / pointer move | touch scrub, stylus/trackpad hover where available | +| click | tap | +| pinned click tooltip | tap or long press, with explicit dismiss | +| wheel zoom | pinch; trackpad/wheel where the platform reports it | +| drag brush | pan gesture with visible handles and minimum touch targets | +| arrow-key focus | adjustable screen-reader actions; hardware keys on supported targets | +| Escape | dismiss action, back action, or hardware key | + +The 16 interaction conformance cases should call semantic drivers such as +`focusAt`, `activate`, `pan`, `zoom`, `setBrush`, and `adjustDatum`. Each +platform harness translates those operations to real input separately. Cases +whose controller is application-owned must extract and port that controller; +they are integration conformance, not new core behavior. + +Launch gates include: + +- arbitration with nested `ScrollView`, navigation, and parent gestures; +- axis locking, cancellation, and responder loss; +- coordinate conversion under view and chart transforms; +- Android back behavior for pinned state; +- the copy and memory cost of moving any spatial index into a worklet; +- minimum touch targets and handles near safe areas. + +### Accessibility + +Painted geometry and accessibility must be separate outputs of the controller. +Skia explicitly requires overlaid React Native views to make inner canvas +elements accessible, and an SVG node per datum is not a scalable semantic +tree. +[Skia canvas accessibility](https://shopify.github.io/react-native-skia/docs/canvas/overview/) · +[React Native accessibility](https://reactnative.dev/docs/accessibility) + +Recommended native model: + +- A non-accessible layout container with sibling semantic elements. React + Native warns that VoiceOver can suppress nested accessible elements. +- One accessible summary element with label, description, and concise chart + summary. +- One sibling adjustable active-datum controller with increment, decrement, + and activate actions. +- `accessibilityValue.text` containing series, category or time, value, and + relevant interval. +- Platform-appropriate announcement or live status when the active value + changes; live-region behavior differs between iOS and Android. +- A visible focus marker and tooltip rendered through ordinary React Native + views. +- Semantics and data hooks that let the application supply a virtualized list + or table for complete inspection. Shipping that table is a new feature, not + current package parity. +- Reduced-motion behavior driven by `AccessibilityInfo`. +- Visual renderer descendants hidden with the platform-appropriate + `importantForAccessibility`, `accessibilityElementsHidden`, or equivalent + props to prevent duplicate or unusably large traversal. + +VoiceOver and TalkBack testing on physical devices is an exit criterion. +Thousands of transparent focusable views are not an acceptable implementation. + +The shared semantic model can supply series and datum descriptions for +Apple’s `AXChartDescriptor` and audio graphs. React Native core, RNSVG, and +Skia do not expose that API; using it would require a custom iOS native +accessibility component and is not part of the first renderer. +[Apple chart accessibility](https://developer.apple.com/documentation/swiftui/view/accessibilitychartdescriptor%28_%3A%29) + +### Motion + +The shared transition planner should produce stable-key enter, update, and +exit operations from the currently painted state, not only previous and next +scenes. Renderers then execute: + +- numeric geometry and opacity interpolation; +- color interpolation; +- path interpolation when topology is compatible; +- a documented resampling or crossfade fallback when it is not; +- cancellation and restart from the current visual value; +- zero-duration output under reduced motion. + +Skia’s path interpolation requires compatible path commands, so arbitrary +path morphing cannot be delegated without normalization. +[Skia path interpolation](https://shopify.github.io/react-native-skia/docs/animations/hooks/) + +Per-frame React/RNSVG prop commits are safe only as a small-scene proof, not +the assumed production default. The motion spike must compare animated props +and UI-thread execution early, including path normalization, color processing, +and interruption from the value actually painted on the UI thread. +[Reanimated `useAnimatedProps`](https://docs.swmansion.com/react-native-reanimated/docs/core/useAnimatedProps/) + +Transition state must live outside React render side effects. It must discard +stale concurrent scene builds, rebase after font/theme/size invalidation, and +pause or rebase when `AppState` moves between background and foreground. + +### Export and web + +- Keep resource-aware SVG string export in the shared JavaScript core. It does + not require a mounted native surface. +- Define whether a PNG captures only chart paint or also React Native tooltip, + legend, and focus overlays. Add explicit scale, background, color-scheme, + and font-readiness options. +- Skia’s asynchronous snapshot runs on the UI thread and is required when + textures are present. Generic view capture has separate native-surface and + view-collapsing constraints; both paths need device proof. +- Add file and share helpers only in platform integration packages. +- Keep browser consumers on the existing root and DOM/SVG React adapter. React + Native Web can render native components, but the current web implementation + already has better SSR, hydration, CSS, text measurement, and semantic SVG + behavior. +- Keep native callbacks typed to native surface and layout data; do not expose + fake `HTMLElement` or `SVGSVGElement` values. + +[Skia canvas snapshots](https://shopify.github.io/react-native-skia/docs/canvas/overview/) · +[Skia view snapshots](https://shopify.github.io/react-native-skia/docs/snapshotviews/) + +A WebView can demonstrate visual reuse, but it is not native support. Expo DOM +components use a separate JavaScript engine, JSON-serialized asynchronous +props, whole-tree rerenders, and no SSR/SSG or native children. +[Expo DOM components](https://docs.expo.dev/guides/dom-components/) + +### Package shape + +```text +@tanstack/charts + browser-compatible root + ./universal + DOM-free definitions, marks, D3 integration, scene, focus, semantics + ./types + DOM-free public contracts + +@tanstack/react-charts + existing web React adapter + +@tanstack/react-native-charts + native React adapter and react-native-svg renderer + ./skia + optional Skia renderer subpath +``` + +The base native entry should peer-depend on React, React Native, and +`react-native-svg`. Skia, Reanimated, Worklets, and Gesture Handler should be +optional peers, declared through `peerDependenciesMeta.optional`, so a static +SVG chart does not acquire or autolink unrelated native modules. Do not use +`optionalDependencies`. The base implementation and declaration graph must +have no static reference to optional peers. + +The native-only preview needs explicit `types`, `react-native`, and `import` +conditions. A future entry that serves different browser and native +implementations would also need an explicit `browser` condition before +`react-native`. Once an export matches, Metro does not append `.native` or +`.web` to that target. Test resolution through Metro/Expo, Node, and +TypeScript. An export target cannot point into another package, so any future +browser re-export needs a local shim and declared dependency or peer. +[Metro package exports](https://metrobundler.dev/docs/package-exports/) + +## NativeScript + +NativeScript is the second-best reuse target because its runtime can execute +the JavaScript built from the TypeScript core and expose native platform APIs +directly. NativeScript Core supports custom native views, gestures, animation, +and accessibility. Its Canvas project provides native-backed Canvas 2D, WebGL, +and WebGPU packages. Ordinary JavaScript runs on the UI thread; Workers are +isolated and communicate through JSON-serializable messages. Large scene +compilation plus Canvas painting is therefore a first-order benchmark, not +assumed reuse. +[NativeScript documentation](https://docs.nativescript.org/) · +[native APIs](https://docs.nativescript.org/guide/adding-native-code) · +[custom native views](https://docs.nativescript.org/guide/create-custom-native-elements) · +[gestures](https://docs.nativescript.org/guide/gestures) · +[accessibility](https://docs.nativescript.org/guide/accessibility) · +[multithreading](https://docs.nativescript.org/guide/multithreading) · +[NativeScript Canvas](https://github.com/NativeScript/canvas) + +Recommended implementation: + +1. Extract the current Canvas painter from HTML canvas creation and DOM host + behavior. +2. Implement a NativeScript Core chart view that supplies size, pixel ratio, + a Canvas context, frame scheduling, and gestures. +3. Prove that the same definition and in-process scene compiler run unchanged + through NativeScript’s bundler and runtime. +4. Add Angular, Vue, Solid, Svelte, or React wrappers only after the Core view + is stable. + +React NativeScript is a React renderer over NativeScript views, not React +Native compatibility. React Native components and ecosystem packages do not +transfer. It should be a thin wrapper around a NativeScript Core chart view +rather than the foundation. +[NativeScript React tutorial](https://docs.nativescript.org/tutorials/build-a-master-detail-app-with-react) · +[React NativeScript repository](https://github.com/shirakaba/react-nativescript) + +NativeScript proof requirements: + +- correct text metrics, baselines, font fallback, and pixel ratio; +- `Path2D`, clipping, gradients, dash arrays, joins, and transforms; +- image snapshot/export; +- touch coordinate conversion and gesture composition; +- an accessible root and active-datum control implemented either with a small + number of real NativeScript views or custom iOS/Android accessibility + containers; NativeScript documents accessibility for `View` objects but no + Canvas virtual-child semantic tree; +- long-running animation and streaming stability; +- scene build and paint time at 1k, 10k, and 50k primitives; +- memory and UI-thread responsiveness on low-end Android. + +If its Canvas implementation cannot meet these gates without platform-specific +patches, stop rather than maintain a browser API imitation with divergent +behavior. + +## Other native UI stacks + +| Target | Source reuse | Technical fit | Recommendation | +| ----------------------------------------- | ----------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | +| Compose Multiplatform | No executable TypeScript reuse; definitions, scene DTOs, fixtures, and semantics can transfer. | Shared Kotlin API; Android uses Jetpack Compose and iOS Compose is canvas-rendered through Skiko. Custom Canvas semantics must be authored. | Best candidate for a shared Kotlin/Compose product after the portable contract is proven. | +| Flutter | No TypeScript reuse on native; requires a Dart port of the compiler/runtime or a Dart scene consumer. | `CustomPainter` maps cleanly to the scene and supports hit testing and virtual semantics; Flutter paints through its own engine/Impeller. | Build only as a first-class Flutter product with dedicated ownership and add-to-app cost. | +| SwiftUI `Canvas` | Schema and fixtures only. | Uses `GraphicsContext`; Apple excludes per-element interaction and accessibility, so synthetic children/representations are required. | Apple-only product or accessibility reference, not the cross-platform starting point. | +| UIKit / Core Graphics | Schema and fixtures only. | Separate lower-level custom-view path with maximum Apple control and no Android implementation. | Use only if SwiftUI Canvas cannot meet required fidelity or integration. | +| Swift Charts | Semantic mapping, not scene parity. | Supplies native marks, axes, legends, and chart accessibility, but owns layout and styling. | Optional native-style backend, not feature-for-feature TanStack rendering. | +| Lynx / ReactLynx | Pure TypeScript compiler may transfer after DOM removal. React Native components do not. | Lynx 4 exposes static-oriented SVG as one native view and no public Canvas element; per-mark input and semantics need overlays or custom native elements. | Watchlist until its graphics layer can support interactive dynamic scenes. | +| Separate UIKit and Android View renderers | Schema and fixtures only unless a JavaScript runtime is embedded. | Maximum control and maximum duplicated implementation. | Avoid unless profiling and commercial demand justify two permanent native engines. | + +Primary references: + +- [Compose Multiplatform](https://kotlinlang.org/docs/multiplatform/compose-multiplatform-and-jetpack-compose.html), + [iOS renderer explanation](https://blog.jetbrains.com/kotlin/2023/05/compose-multiplatform-for-ios-is-in-alpha/), + [iOS stable announcement](https://blog.jetbrains.com/kotlin/2025/05/compose-multiplatform-1-8-0-released-compose-multiplatform-for-ios-is-stable-and-production-ready/), + [Compose custom graphics](https://developer.android.com/develop/ui/compose/graphics/draw/overview), + [Compose semantics](https://developer.android.com/develop/ui/compose/accessibility/semantics), + and [Compose iOS accessibility](https://kotlinlang.org/docs/multiplatform/compose-ios-accessibility.html) +- [Flutter `CustomPainter`](https://api.flutter.dev/flutter/rendering/CustomPainter-class.html), + [Flutter architecture](https://docs.flutter.dev/resources/architectural-overview), + [add-to-app](https://docs.flutter.dev/add-to-app), and + [Flutter semantics](https://api.flutter.dev/flutter/widgets/Semantics-class.html) +- [SwiftUI `Canvas`](https://developer.apple.com/documentation/swiftui/canvas), + [accessibility representations](https://developer.apple.com/documentation/swiftui/view/accessibilityrepresentation%28representation%3A%29), + [AXChart](https://developer.apple.com/documentation/accessibility/axchart), + and [Swift Charts](https://developer.apple.com/documentation/charts) +- [Lynx 4 elements](https://lynxjs.org/4.0/api/), + [SVG element](https://lynxjs.org/4.0/api/elements/built-in/svg.html), and + [custom native components](https://lynxjs.org/4.0/guide/custom-native-component) + +For non-JavaScript targets, “same API” can mean equivalent chart concepts and +conformance, not source compatibility. Accessors, formatters, custom scales, +tooltip bodies, callbacks, and plugins must be declared as one of: + +- portable declarative input; +- a named registry function; +- a host-language callback; +- JavaScript-only. + +Sending a complete scene across a JavaScript-to-native or host-language +boundary on every frame is not a durable dynamic-chart design. A portable +scene DTO is appropriate for static charts, fixtures, export, and an initial +renderer proof. A production native-language library eventually needs local +layout, interaction, and animation logic. + +## Feature parity matrix + +| Capability | Shared work | React Native | NativeScript | Non-JS native | +| --------------------------------------------- | --------------------------------------------- | ------------------------------- | ------------------------------------------------- | -------------------------------------------- | +| Definitions, accessors, transforms, D3 scales | Existing compiler through universal entries | Direct reuse after Hermes proof | Expected reuse after runtime proof | Declarative subset or reimplementation | +| Cartesian marks and guides | Existing scene | Render primitives | Canvas painter | Render DTO or reimplement | +| Facets and layered charts | Existing layout and groups | Direct reuse | Expected after runtime proof | Scene-compatible | +| Polar, pie, radar, gauge | Existing path-producing marks | SVG/Skia paths | Canvas paths | Scene-compatible | +| Geography and projections | Existing D3-generated paths | SVG/Skia paths | Canvas paths | Scene-compatible | +| Gradients and clipping | Existing scene data plus capability rules | New mapping, platform tests | New mapping, platform tests | New mapping | +| Text, axes, legend margins | Shared request/cache protocol | New native measurement | New native measurement | New native measurement | +| Theme and color | Shared semantic theme | New RN resolution | New NativeScript resolution | New platform resolution | +| Focus and grouped tooltip logic | Extract from web renderer | Reuse controller; new overlay | Reuse controller; new overlay | Port controller | +| Activation / `onSelect` | Shared callback contract | Tap and accessibility actions | Tap and accessibility actions | Platform input | +| Brush, zoom, scrubber, editor | Application-owned state plus semantic drivers | Native integration examples | Native integration examples | Platform implementations | +| Keyed animation | New shared transition planner | SVG and Skia execution | Canvas execution | Port planner | +| Focus indicator | New shared overlay contract | RN overlay or renderer layer | Canvas/native overlay | Platform overlay | +| Accessibility | New shared semantic model | RN sibling semantic controls | Feasibility gate: real views or native containers | Native semantics | +| Custom marks using scene primitives | Existing extension model | Reuse | Reuse | Equivalent host-language API | +| Renderer-specific custom output | None | Native renderer callback | Canvas/native callback | Platform-specific | +| Pure SVG export | Resource-aware JavaScript serializer | Reuse | Reuse if runtime proof passes | Native serializer or externally supplied SVG | +| Mounted PNG export | Platform capability | Snapshot/view capture | Canvas or platform capture, pending proof | Platform snapshot | +| SSR and hydration | Existing browser root and React host | Not applicable on device | Web target only | Not applicable on device | + +## Validation program + +### Stage 1: portability proof + +Run the compiler under Hermes and NativeScript without DOM globals. + +Pass conditions: + +- Representative definitions import through Metro and NativeScript bundling. +- With locale, calendar, and timezone fixed, web, Hermes, and NativeScript + produce exact normalized domains, keys, topology, and explicitly formatted + labels. Compare numeric coordinates and normalized path data with a defined + epsilon. +- DOM types are absent from the Charts declaration graph; strict dependency + checking reaches only the known upstream `ImageData` declaration. +- Theme and text services are injected. +- No browser polyfill is required. +- Conditional exports and optional-peer isolation resolve through Expo/Metro, + bare Metro, TypeScript, Jest, and a browser bundler. + +### Stage 2: renderer sentinels + +Render a deliberately small set before porting all 100 cases: + +1. multi-line chart with gaps, rotated ticks, and a legend; +2. stacked area with stable-key update; +3. grouped and stacked bars; +4. 10k-point scatter; +5. labeled heatmap with clipping and gradients; +6. faceted chart; +7. pie/donut plus radar or gauge; +8. geographic projection; +9. grouped tooltip with touch scrub and pinning; +10. zoom/pan or brush interaction; +11. streaming update with interruption; +12. custom scene mark. + +Pass conditions: + +- iOS and Android screenshots meet geometry and visual tolerances. +- Every sentinel has a usable VoiceOver and TalkBack path. +- Visible focus-indicator geometry, style, and visibility match the semantic + focus state. +- Custom fonts, RTL, dark mode, high contrast, reduced motion, and orientation + changes work. +- SVG and Skia consume the same scene and interaction controller. + +### Stage 3: performance crossover + +Use release or `debugOptimized` builds on a low-end Android device and a +representative iPhone. Standard Android debug builds are not valid evidence. + +Test 100, 1k, 10k, and 50k painted primitives, with an optional 100k stress +case. Record: + +- scene preparation and layout time; +- first paint; +- single-datum update; +- full data replacement; +- streaming update cadence; +- orientation and resize; +- touch scrub, pan, and zoom latency; +- nested-scroll arbitration, cancellation, and transformed hit coordinates; +- JS and UI frame time; +- memory; +- Fabric node count; +- native binary and application bundle delta; +- snapshot time and size. + +The measured SVG/Skia crossover becomes documentation. Do not choose a point +count from intuition. + +### Stage 4: conformance + +- Run all 100 visual cases on iOS and Android for the default renderer. +- Run the performance and renderer-sensitive subset on Skia and NativeScript. +- Extract platform-neutral definition/data factories from all 100 cases. +- Translate all 16 interaction cases to semantic platform drivers, with + application controllers remaining application-owned integration fixtures. +- Compare normalized domains, keys, and topology exactly; compare numeric + geometry and normalized paths with the agreed tolerance before screenshot + tolerances. +- Keep the DOM-free TypeScript compile and Metro import smoke alongside the + current jsdom-oriented unit suite; add Hermes execution coverage. +- Test current web SSR, hydration, SVG, Canvas, and export to catch refactor + regressions. +- Test stale-scene cancellation, concurrent updates, mid-flight interruption, + font/theme/size invalidation, and app background/foreground rebasing. +- Use React Native Testing Library for adapter state and semantics, but require + device tests for native drawing, gestures, and accessibility. Its own + guidance notes that native behavior needs simulator or device validation. + [React Native Testing Library boundary](https://callstack.github.io/react-native-testing-library/12.x/docs/guides/faq) + +### Stop conditions + +Do not claim supported native parity if any of these remain unresolved after +the proof: + +- text measurement causes repeated layout oscillation or materially wrong + guides, or the measuring and painting stacks disagree on shaped text; +- the default renderer misses interaction frame budgets on ordinary charts; +- the semantic model cannot provide useful VoiceOver and TalkBack navigation; +- Metro requires DOM declarations or browser polyfills; +- SVG and Skia require divergent public chart definitions; +- native output depends on reparsing SVG strings; +- NativeScript requires project-local patches to its graphics runtime. + +## Estimated effort + +An engineer-week means one experienced library engineer working full time. +Ranges include implementation, tests, examples, and documentation, but not +unrelated chart features or store release work. + +| Deliverable | Estimate | Confidence | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------- | -----------------------------------------: | ----------------------- | +| Shared controller extraction, transition design, platform theme/typography contracts, and device harness | 2–4 engineer-weeks | Medium | +| React Native SVG proof productionization: gestures, complete tooltips, packaging, and release gates | 3–5 engineer-weeks | Medium | +| React Native full applicable parity: text, themes, keyed motion, gestures, tooltips, accessibility, export, API migration, 100-case hardening, Expo/bare CI | 5–8 engineer-weeks | Low–medium | +| Production React Native SVG package total | 10–16 engineer-weeks | Low–medium | +| Optional Skia execution/optimization of the shared motion contract, snapshots, and crossover benchmarks | +4–7 engineer-weeks | Low–medium | +| NativeScript Core Canvas package after shared refactor | +6–10 engineer-weeks | Low | +| Portable scene DTO plus one Compose or Flutter rendering proof | +3–6 engineer-weeks | Low | +| Production Compose, Flutter, or Swift implementation | Separate multi-month product per ecosystem | Low until the DTO proof | + +Directional implementation size is 5–8k production lines plus 3–6k lines of +tests and fixtures for first-class React Native parity. A NativeScript +framework/view wrapper could remain near 1k lines only after a portable painter +and backend exist. The renderer/backend itself is likely another 2–4k lines; +device testing, accessibility feasibility, performance work, and hardening +explain the 6–10 week estimate. + +Two experienced engineers could overlap core/controller work, React Native +rendering, and device harness work. A realistic calendar range for a +production React Native package with both SVG and Skia is roughly 8–12 weeks, +assuming the text and accessibility proofs pass early. NativeScript should not +be scheduled as a committed package until its Canvas proof passes. + +Ongoing maintenance is material: + +- React Native, Expo, Metro, `react-native-svg`, Skia, Reanimated, and Gesture + Handler compatibility; +- physical-device screenshot, performance, VoiceOver, and TalkBack coverage; +- renderer-specific bug triage; +- font and graphics differences across iOS and Android; +- conformance updates whenever the scene grammar grows. + +## Recommended first commitment + +Fund a two-week, two-engineer device and shared-behavior proof before treating +the experimental package as supported. + +Engineer A: + +- extract the shared interaction and tooltip controller; +- define platform theme and typography ownership; +- replace the responder proof with scroll-safe gesture arbitration; +- exercise representative definitions under Hermes and on devices. + +Engineer B: + +- build the iOS/Android visual, performance, and binary-size harness; +- define semantic output and VoiceOver/TalkBack flows; +- test the existing SVG host across density and gesture sentinels; +- scope the later Canvas/NativeScript proof from measured bottlenecks. + +At the end of the proof, decide from evidence: + +1. whether `react-native-svg` is a viable default; +2. whether Skia is required for the first release or can follow; +3. whether the typography contract is stable enough for public API; +4. whether NativeScript meets the bar without runtime patches; +5. whether to stabilize a portable scene DTO for non-JavaScript targets. + +## Explicit non-goals + +- No DOM emulation layer on native. +- No WebView marketed as native support. +- No D3 or arbitrary user callbacks in UI-thread worklets. +- No Skia dependency in the base package. +- No point-count threshold before device benchmarks. +- No thousands of invisible accessible views. +- No pixel-perfect cross-engine promise. +- No claim that a JSON subset preserves the complete live TypeScript API. +- No custom Fabric, UIKit, or Android renderer before the shared renderers are + measured. diff --git a/REACT-NATIVE-HOST-POC.md b/REACT-NATIVE-HOST-POC.md new file mode 100644 index 00000000..1f1026dd --- /dev/null +++ b/REACT-NATIVE-HOST-POC.md @@ -0,0 +1,426 @@ +# React Native host proof of concept + +Research and implementation date: 2026-07-30 + +## Decision + +A React Native SVG host is viable. The chart grammar, D3 scales, marks, +responsive scene compiler, gradients, clips, polar and geographic paths, point +identity, and most focus algorithms can run unchanged. The current web +`ChartRenderer` cannot be the native abstraction: its public contract requires +DOM elements, string prerendering, client coordinates, and browser-owned +surface lifecycle. + +The proof should advance only as a separate package and host: + +```text +definition + D3 scales + marks + │ + ▼ + shared @tanstack/charts runtime + │ + ▼ + ChartScene + │ + ▼ + React Native interaction + react-native-svg +``` + +This can remain additive for current consumers. Do not generalize +`ChartRenderer` or remove DOM types from the root API to make native fit. + +The POC establishes technical feasibility, package isolation, approximate +JavaScript cost, and the main API boundaries. It does not establish device +visual parity, application binary cost, Hermes runtime performance, or +production support. + +## Implemented proof + +The publishable experimental `@tanstack/react-native-charts` package includes: + +- a generic React Native `Chart` component that owns `createChartRuntime`; +- responsive sizing from explicit dimensions, aspect ratio, or `onLayout`; +- a direct keyed `ChartScene` visitor using `react-native-svg`; +- groups, rules, polylines, areas, dots, rectangles, labels, linear gradients, + nested translation, and rectangular clips; +- current-color and CSS-variable-fallback paint resolution; +- nearest, axis-nearest, and grouped focus; +- tap selection, sticky pinning, focus restoration, and accessibility actions; +- a separate SVG focus overlay; +- inactive shared focus-layer groups are omitted from the base scene; +- an optional native tooltip subpath with point, pointer, group-center, and + custom anchors, collision-aware placement, custom content, and a custom + React body; +- an optional injected text measurer; +- a bare Metro fixture using React Native 0.86.2 and `react-native-svg` + 15.15.5; +- an Expo 57 Metro fixture using Expo's `react-native-svg` 15.15.4; +- source-map checks that reject browser renderer code in iOS and Android + bundles. + +The host imports runtime values from narrow core subpaths. It does not import +the root barrel, `react-dom`, a browser adapter, the DOM renderer, the Canvas +host, or the SVG string/reconciliation pipeline. The full-chart Metro fixture +imports its application definition from `@tanstack/charts/universal`; the core +line control keeps granular imports for a tighter comparison. + +That distinction matters to shared application source. A Metro probe using +`defineChart` and `lineY` from the browser-oriented root +`@tanstack/charts` barrel traversed the DOM renderer, DOM text, reconciliation, +SVG surface, and adapters. The prerequisite universal-barrel PR adds +`@tanstack/charts/universal` for normal environment-neutral authoring while +retaining granular entries for tighter bundles. + +Metro 0.84 retains every runtime module re-exported by `/universal`, including +unused marks and the environment-neutral static SVG string serializer. It does +not retain the guarded DOM or browser host modules. The broad entry is the +simplest supported authoring path; bundle-sensitive native applications can +use granular mark, runtime, and scene entries until Metro can eliminate those +unused re-exports. + +That prerequisite also adds `@tanstack/charts/types`, exports the generic +tooltip and portal token interfaces for host-adapter authors, and moves DOM +host types to an internal `dom-types.ts` module while preserving their root +re-exports. This POC adds no further core public API. + +Minimum usage keeps the browser-oriented root unchanged and selects the native +host and tooltip explicitly: + +```tsx +import { scaleLinear } from 'd3-scale' +import { defineChart, lineY } from '@tanstack/charts/universal' +import { Chart } from '@tanstack/react-native-charts' +import { tooltip } from '@tanstack/react-native-charts/tooltip' + +const definition = defineChart({ + marks: [lineY([4, 9, 7])], + x: { scale: scaleLinear().domain([0, 2]) }, + y: { scale: scaleLinear().domain([0, 10]) }, + tooltip: { use: tooltip, sticky: true }, +}) + +export function RevenueChart() { + return ( + + ) +} +``` + +The tooltip token makes that configured definition native-specific. A shared +application can keep the chart spec and tooltip options universal, then attach +the web or native token in its platform entry. + +## Bundle measurements + +### Isolated esbuild entries + +Production, minified ESM; React, React Native, and `react-native-svg` are +external in the native entries. + +| Entry | Minified | Gzip | +| ---------------------------------- | -------: | -------: | +| React Native SVG host | 26.95 kB | 10.22 kB | +| React Native SVG host with tooltip | 32.71 kB | 12.17 kB | +| React Native line consumer | 49.18 kB | 19.03 kB | +| Shared line scene | 38.17 kB | 14.82 kB | +| Existing React web adapter | 39.98 kB | 14.57 kB | +| Existing React web line consumer | 62.03 kB | 23.41 kB | + +The native host entry includes the host plus every shared runtime and D3 module +reachable from exporting `Chart`; it is not isolated adapter-only overhead. +The base host and line consumer omit `Tooltip.tsx`. Importing the tooltip +subpath adds 5.76 kB minified and 1.94 kB gzip. The native line consumer +additionally includes the line mark and D3 scale code while leaving platform +peers external. It is the closest comparison to the existing React line entry, +but the two platforms do not have identical runtime baselines. The native +entries are informational measurements, not locked budgets. + +### Metro application deltas + +React Native production bundles were minified for both platforms. Each row is +measured against a blank React Native application built with the same Metro +configuration. The full chart uses `/universal`; the core line control uses +granular entries. + +| Platform | Full `/universal` chart minified JS delta | `react-native-svg` gzip delta | Core line gzip delta | Full `/universal` chart gzip delta | Full chart module delta | +| -------- | ----------------------------------------: | ----------------------------: | -------------------: | ---------------------------------: | ----------------------: | +| iOS | 434.49 KiB | 27.75 KiB | 38.94 KiB | 103.00 KiB | 384 | +| Android | 434.64 KiB | 27.69 KiB | 38.94 KiB | 103.05 KiB | 384 | + +The full iOS bundle was 1,328,999 bytes and 319,853 bytes gzip, versus 884,080 +and 214,383 for blank. Android was 1,334,515 and 320,921, versus 889,448 and +215,397 for blank. Compared with the otherwise identical granular fixture, +`/universal` retains another 119.06 KiB minified and 28.91 KiB gzip on both iOS +and Android, plus 102 modules per platform under this Metro version. + +These are JavaScript bundle measurements, not Hermes bytecode or installed +application sizes. They exclude the native iOS and Android code linked by +`react-native-svg`. A clean release-binary before/after comparison is still +required. + +The full-chart source maps require `/universal` and include its static SVG +serializer. They exclude every guarded browser module: adapters, DOM host, DOM +text measurement, DOM renderer, Canvas, reconciliation, SVG resources/surface, +`react-dom`, React web charts, and Octane charts. + +## Parity and boundaries + +| Capability | POC result | Production boundary | +| -------------------------------------- | ------------------------------------------ | ------------------------------------------------------------------------------ | +| Definitions, D3 scales, marks, layout | Shared unchanged | High confidence | +| Cartesian, facet, polar, geo geometry | Shared scene paths | Needs device conformance | +| All seven scene node kinds | Implemented | Needs iOS/Android visual tests | +| Linear gradients and rectangular clips | Implemented | Device and nested-clip tests remain | +| Responsive sizing | `onLayout`, explicit size, aspect ratio | Scroll/layout integration remains | +| Paint | `currentColor` and CSS fallback resolution | Dynamic definitions still see the web default theme | +| Text | SVG text plus injected core measurer | Exact native typography and async measurement are unresolved | +| Nearest and grouped focus | Implemented | Logic is duplicated from the DOM renderer | +| Focus presentation | Generic native overlay | Authored focus marks and mark states are not applied | +| Tap, selection, sticky tooltip | Implemented | Responder ownership may conflict with scrolling and gestures | +| Tooltip | Native in-tree overlay | Web `className`, portal semantics, and full item formatting are not equivalent | +| Accessibility | Labeled adjustable root and actions | No per-point native accessibility tree or data-table escape | +| Motion | Not implemented | Requires a renderer-neutral transition model | +| SVG/PNG export | Not implemented | Needs native snapshot/share APIs | +| Large-data renderer | Not measured | SVG node pressure may require an optional Skia host | +| SSR and hydration | Intentionally absent | Web-only behavior | + +### Rendering details that are not exact + +- SVG `arcs` and `miter-clip` joins are explicitly normalized to `round` and + `miter`, respectively, because the React Native SVG type surface does not + expose them. +- The native paint resolver can consume CSS variable fallbacks, but it cannot + evaluate application CSS. A production host needs concrete native theme + values before scene compilation. +- The current text-measure contract does not carry font family, font style, + letter spacing, direction, or locale. Passing `fontFamily` to the painter + cannot make guide layout measure the same font. +- `react-native-svg` supports the required primitive family and Fabric, but + SVG compatibility must be verified on real iOS and Android renderers rather + than inferred from server-rendered component markup. + +### Interaction details that are not exact + +- Focus preset resolution, point restoration, navigation order, tooltip + content, anchor, and placement remain private across the DOM renderer and + tooltip implementation. The POC had to reproduce those policies. A supported + package must extract the pure behavior and make both hosts consume it. +- Shared focus-layer groups are hidden from the base native scene so they are + not painted permanently. The proof uses its generic native overlay instead; + authored focus marks and inline mark states need a shared scene-state + resolver before they can be supported accurately. +- The POC does not implement the complete `tooltip.items` channel, datum, and + derived-row contract. Custom `content`, `format`, `formatGroup`, and a custom + React body work, but default structured content is only partial. +- The shared definition type accepts environment-neutral extension tokens, so + a web tooltip token typechecks in native application code and fails when the + native `Chart` resolves it. Compile-time host rejection would require a + refined native definition type before release. +- The root `View` currently claims touch responder ownership on press. + `ScrollView`, pan, brush, zoom, and application gestures require an explicit + arbitration model, likely through Pressability or Gesture Handler rather + than more responder callbacks. +- Native accessibility cannot reuse DOM focus and ARIA. The adjustable-root + behavior proves a useful minimum, not parity with keyboard traversal or a + complete accessible data representation. +- The chart is one accessible root. Nested controls in a custom pinned tooltip + may be hidden by platform accessibility grouping, and + `accessibilityLiveRegion` is Android-specific. This needs VoiceOver and + TalkBack design rather than prop translation. +- A local absolute tooltip cannot escape clipped native ancestors. Native + portal/modal behavior needs a separate definition from the browser top-layer + implementation. + +## API and compatibility impact + +No existing public call needs to break for an SVG-native release. + +Prerequisite changes delivered by the universal-barrel PR: + +- additive `@tanstack/charts/universal` export; +- additive `@tanstack/charts/types` export, including generic tooltip and portal + token contracts; +- mechanical split between universal and DOM host types, with root re-exports + preserved. + +This proof adds a separate React Native package, base component contract, and +optional tooltip subpath. + +Additive changes likely required before a supported release: + +- a shared, renderer-neutral interaction state module; +- a shared tooltip content/anchor/placement model; +- a runtime option for platform default themes; +- a complete typography and text-measurement contract; +- structured paint references or a host paint-resolution contract; +- native-specific tooltip overlay and gesture integration points. + +Changes to avoid: + +- making the current `ChartRenderer` union over DOM and native surfaces; +- making string prerendering optional inside that renderer contract; +- importing React Native from the core package; +- shipping CSS tokens to native and silently substituting arbitrary colors; +- claiming compatibility outside the tested Expo 57 and bare React Native + 0.86.2 lanes or the `react-native-svg` 15.15.4–15.15.5 pair; +- adding Skia before an on-device density/performance crossover is measured. + +The root type API remains compatible. Consumers that want a DOM-free +declaration graph can opt into `@tanstack/charts/types`. Shared definitions can +replace browser-root imports with `@tanstack/charts/universal`; granular entries +remain the bundle-sensitive option. Neither path changes existing published +web behavior. + +The package now ships compiled ESM and declarations for the root and optional +tooltip entries. Published exports put `types` first, select explicit native +shims through the `react-native` condition, and retain `import` fallbacks. The +release gate builds and packs the adapter with the fixed package set, then +installs the core and native tarballs into isolated bare React Native and Expo +consumers. Their default Metro configurations must resolve installed `dist` +files rather than workspace source. + +## Pros and cons + +### Advantages + +- Most data-to-geometry behavior remains one implementation. +- Existing definitions, accessors, D3 scales, custom marks, polar charts, and + geographic paths remain usable. +- The direct scene visitor is small and avoids an SVG XML parse/reconcile step. +- `react-native-svg` provides one renderer across iOS and Android and supports + the current React Native architecture. +- Native callbacks receive the original datum objects because the scene and + interaction model stay in one JavaScript runtime. +- The separate package keeps native dependencies and platform assumptions out + of web bundles. + +### Costs + +- Rendering parity is only the easy half; text, input, tooltips, animation, + accessibility, and export are host products. +- `react-native-svg` adds both JavaScript and native binary code. +- Many SVG nodes can become expensive before the shared scene compiler does. +- Native support needs devices, release builds, TalkBack/VoiceOver testing, + and two platform-specific failure surfaces. +- Current interaction and tooltip ownership must be refactored out of mature + DOM host implementations without regressing web behavior. +- The native package needs its separate packed-declaration program because + React Native and DOM global declarations conflict in one TypeScript program. + +## Verification performed + +- 22 focused POC tests cover every scene primitive, gradients, clips, paint + resolution, focus modes, point and callback restoration, tooltip ordering, + placement, chart compilation, extension ownership, inactive focus layers, + and no-speculative-size behavior. Component mapping tests use React DOM with + native modules mocked; they are structural tests, not native renderer tests. +- The native package and the normal React Native application configuration + typecheck. +- Packed root and tooltip declarations typecheck in isolated bare and Expo + consumers. Normal and `react-native` conditional resolution both select the + installed `dist` files. +- The repository-wide typecheck passes with the native dependency graph. +- The prerequisite PR's packed gate validates the supported environment-safe + entries without changing the browser root. +- Existing locked web bundle baselines remain unchanged. +- Production Metro bundles complete for iOS and Android, and the full-chart + variants must resolve `/universal`. +- Packed bare React Native and Expo consumers produce iOS and Android bundles + without workspace aliases. Their source maps include the native conditional + entries and exclude workspace source and guarded browser modules. +- The workspace Expo 57 fixture boots in Expo Go on an iOS simulator and + renders its axes and line. Expo logs identify the Hermes engine, bytecode + transform, and running application. The packed artifact is compiled + separately; this smoke does not claim that the tarball itself ran in the + simulator. +- Source-map gates prove the full native entries do not include guarded browser + implementation files, including the web tooltip and portal runtimes. +- Retained-input gates prove the base native host and line consumer omit the + optional native tooltip implementation, all native entries omit web tooltip + and portal code, the base host retains no D3 runtime, and the line consumer + retains no D3 geometry runtime. + +A strict native consumer with `skipLibCheck: false` now gets past the Charts +DOM boundary and stops in `@types/d3-array`, whose `blurImage` declaration +references the browser global `ImageData`. An automated diagnostic accepts +only those two known errors, or a clean result after the upstream declaration +is fixed. The POC does not add a fake global or pull DOM libraries into native +to hide the upstream declaration problem. + +The isolated esbuild boundary and packed bare/Expo Metro gate run in +`pnpm validate`. GitHub also runs the source native declaration check as a +separate workflow step. The ten-build comparative Metro measurement remains a +local spike command rather than a mandatory CI gate. + +Not performed: + +- bare React Native or Android simulator rendering, and physical-device + rendering; +- native component interaction tests; +- visual comparison against the conformance corpus; +- Hermes release-mode execution or profiling; +- 1k/10k-point interaction and memory tests; +- release application binary comparison; +- VoiceOver and TalkBack validation; +- Expo prebuild or dev-client validation; +- motion, export, or Skia implementation. + +## Production path + +### Phase 1: shared behavior and a supported SVG host + +Extract interaction and tooltip policy, add native theme ownership, complete +the typography contract, and replace the proof's responder policy. Maintain +the native-specific package gate and keep the package scoped to tested +RN/RNSVG lanes. + +Estimated effort: 3–5 engineering weeks. + +### Phase 2: device confidence + +Add generated native projects for bare and Expo applications, iOS and Android +release builds, a platform-neutral definition corpus, screenshot/geometry +comparison, VoiceOver/TalkBack flows, binary-size measurement, and sustained +interaction benchmarks. + +Estimated effort: 3–5 engineering weeks. + +### Phase 3: broader parity + +Add renderer-neutral motion, native export/share, advanced gesture recipes, +and a Skia renderer only if measured SVG node pressure justifies it. Expand the +supported version matrix from evidence. + +Estimated effort: 4–10 engineering weeks, strongly dependent on motion, +accessibility, and dense-data requirements. + +An honest SVG-native MVP is therefore roughly 6–10 weeks. Broad parity with +the current web product is closer to 10–20 weeks. These are engineering ranges, +not schedule commitments. + +## Recommendation + +Proceed to Phase 1 if a real React Native product is planned. The architecture +is sound and the JavaScript cost is reasonable for a charting package. Keep the +published package experimental until the device-confidence work is complete. + +Do not start a NativeScript adapter in parallel. The earlier +[native platform support spike](./NATIVE-PLATFORM-SUPPORT-SPIKE.md) remains the +architecture comparison; this proof increases confidence specifically for +React Native because its runtime, Metro pipeline, SVG implementation, and +interaction surface were exercised. + +## Primary platform references + +- [React Native 0.86 release](https://reactnative.dev/blog/2026/06/11/react-native-0.86) +- [React Native version support status](https://reactnative.dev/versions.html) +- [Expo SDK version matrix](https://docs.expo.dev/versions/latest/) +- [Expo 57 SVG renderer](https://docs.expo.dev/versions/v57.0.0/sdk/svg/) +- [React Native layout events](https://reactnative.dev/docs/layoutevent) +- [React Native accessibility](https://reactnative.dev/docs/accessibility) +- [`react-native-svg` support and compatibility](https://github.com/software-mansion/react-native-svg) +- [Metro package exports and the `react-native` condition](https://metrobundler.dev/docs/package-exports/) diff --git a/README.md b/README.md index 8c7a6e8c..67bfc53b 100644 --- a/README.md +++ b/README.md @@ -130,18 +130,19 @@ bounded representation. ## Packages -| Package | Role | -| ------------------------------------------------------- | ------------------------------------- | -| [`@tanstack/charts`](./packages/charts-core) | Framework-neutral grammar and runtime | -| [`@tanstack/react-charts`](./packages/react-charts) | React adapter | -| [`@tanstack/preact-charts`](./packages/preact-charts) | Preact adapter | -| [`@tanstack/vue-charts`](./packages/vue-charts) | Vue adapter | -| [`@tanstack/solid-charts`](./packages/solid-charts) | Solid adapter | -| [`@tanstack/svelte-charts`](./packages/svelte-charts) | Svelte adapter | -| [`@tanstack/angular-charts`](./packages/angular-charts) | Angular standalone-component adapter | -| [`@tanstack/lit-charts`](./packages/lit-charts) | Lit custom-element adapter | -| [`@tanstack/alpine-charts`](./packages/alpine-charts) | Alpine directive adapter | -| [`@tanstack/octane-charts`](./packages/octane-charts) | Octane adapter | +| Package | Role | +| ----------------------------------------------------------------- | ------------------------------------- | +| [`@tanstack/charts`](./packages/charts-core) | Framework-neutral grammar and runtime | +| [`@tanstack/react-charts`](./packages/react-charts) | React adapter | +| [`@tanstack/react-native-charts`](./packages/react-native-charts) | Experimental React Native SVG adapter | +| [`@tanstack/preact-charts`](./packages/preact-charts) | Preact adapter | +| [`@tanstack/vue-charts`](./packages/vue-charts) | Vue adapter | +| [`@tanstack/solid-charts`](./packages/solid-charts) | Solid adapter | +| [`@tanstack/svelte-charts`](./packages/svelte-charts) | Svelte adapter | +| [`@tanstack/angular-charts`](./packages/angular-charts) | Angular standalone-component adapter | +| [`@tanstack/lit-charts`](./packages/lit-charts) | Lit custom-element adapter | +| [`@tanstack/alpine-charts`](./packages/alpine-charts) | Alpine directive adapter | +| [`@tanstack/octane-charts`](./packages/octane-charts) | Octane adapter | The earlier host experiment remains under `@plot-poc/*` for migration evidence and benchmark comparison. The private diff --git a/benchmarks/comparison/bundle-baseline.json b/benchmarks/comparison/bundle-baseline.json index 633c24a4..cfdc957e 100644 --- a/benchmarks/comparison/bundle-baseline.json +++ b/benchmarks/comparison/bundle-baseline.json @@ -1,8 +1,8 @@ { "schemaVersion": 3, - "generatedAt": "2026-08-01T17:40:25.541Z", + "generatedAt": "2026-08-01T18:25:10.144Z", "packageVersions": { - "tanstack": "0.3.1", + "tanstack": "0.4.0", "chartjs": "4.5.1", "echarts": "6.1.0", "recharts": "3.10.1", @@ -11,7 +11,7 @@ "sources": { "tanstack": { "kind": "workspace", - "revision": "d563eba5d295dc3ddf60eecd2d8a9bd418aaf635" + "revision": "1a8b888822bb94be75b6416979d671a04218fe02" }, "chartjs": { "kind": "package", diff --git a/benchmarks/entries/charts-react-native-line.ts b/benchmarks/entries/charts-react-native-line.ts new file mode 100644 index 00000000..88ab0a3d --- /dev/null +++ b/benchmarks/entries/charts-react-native-line.ts @@ -0,0 +1,11 @@ +import { scaleLinear } from 'd3-scale' +import { lineY } from '@tanstack/charts/line' +import { defineChart } from '@tanstack/charts/scene' + +export { Chart } from '@tanstack/react-native-charts' + +export const definition = defineChart({ + marks: [lineY([4, 9, 7])], + x: { scale: scaleLinear().domain([0, 2]) }, + y: { scale: scaleLinear().domain([0, 10]) }, +}) diff --git a/benchmarks/entries/charts-react-native-tooltip.ts b/benchmarks/entries/charts-react-native-tooltip.ts new file mode 100644 index 00000000..bc8b2df9 --- /dev/null +++ b/benchmarks/entries/charts-react-native-tooltip.ts @@ -0,0 +1,2 @@ +export { Chart } from '@tanstack/react-native-charts' +export { tooltip } from '@tanstack/react-native-charts/tooltip' diff --git a/benchmarks/entries/charts-react-native.ts b/benchmarks/entries/charts-react-native.ts new file mode 100644 index 00000000..c7629ddd --- /dev/null +++ b/benchmarks/entries/charts-react-native.ts @@ -0,0 +1 @@ +export { Chart } from '@tanstack/react-native-charts' diff --git a/docs/comparison.md b/docs/comparison.md index 6e9b7057..3ef0a70e 100644 --- a/docs/comparison.md +++ b/docs/comparison.md @@ -4,22 +4,22 @@ description: Compare TanStack Charts with measured and documentation-reviewed ch --- TanStack Charts `0.4.0` is a pre-alpha release. Its results on this page measure -the exact workspace source included in this release and pinned competitor -packages. This comparison records architectural differences and reproducible -evidence without turning untested behavior into a checkmark. +the current workspace source and pinned competitor packages. This comparison +records architectural differences and reproducible evidence without turning +untested behavior into a checkmark. ## Tested versions | Library | Package | Measured source | | -------------------------------------------------------------------------------------- | -------------------- | ------------------- | -| [TanStack Charts](./overview.md) | `@tanstack/charts` | workspace `d563eba` | +| [TanStack Charts](./overview.md) | `@tanstack/charts` | workspace `1a8b888` | | [Chart.js](https://www.chartjs.org/docs/latest/) | `chart.js` | npm `4.5.1` | | [Apache ECharts](https://echarts.apache.org/handbook/en/best-practices/canvas-vs-svg/) | `echarts` | npm `6.1.0` | | [Recharts](https://recharts.github.io/en-US/) | `recharts` | npm `3.10.1` | | [Observable Plot](https://observablehq.com/plot/features/plots) | `@observablehq/plot` | npm `0.6.17` | The competitor versions are exact package pins, not latest versions inferred -at page render time. The measured TanStack workspace revision is `d563eba`. +at page render time. The measured TanStack workspace revision is `1a8b888`. ## Capability matrix @@ -170,7 +170,8 @@ Canvas composition while keeping D3 and state ownership explicit. ## Evidence and reproduction - [Standard comparison protocol](https://github.com/TanStack/charts/blob/v0.4.0/benchmarks/comparison/README.md) -- [Tracked bundle baseline](https://github.com/TanStack/charts/blob/v0.4.0/benchmarks/comparison/bundle-baseline.json) +- [Current tracked bundle baseline](https://github.com/TanStack/charts/blob/main/benchmarks/comparison/bundle-baseline.json) +- [0.4.0 tagged bundle baseline](https://github.com/TanStack/charts/blob/v0.4.0/benchmarks/comparison/bundle-baseline.json) - [Stress protocol](https://github.com/TanStack/charts/blob/v0.4.0/benchmarks/comparison/stress/README.md) - [Catalog conformance protocol](https://github.com/TanStack/charts/blob/v0.4.0/benchmarks/conformance/README.md) diff --git a/docs/installation.md b/docs/installation.md index 3fcbb600..809705c8 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -17,6 +17,9 @@ Then add one adapter if the application needs it: # React pnpm add @tanstack/react-charts react react-dom +# React Native +pnpm add @tanstack/react-native-charts react react-native react-native-svg + # Preact pnpm add @tanstack/preact-charts preact @@ -46,22 +49,56 @@ The adapters intentionally do not replace the core package. Definitions and mark ## Framework compatibility -| Adapter package | Framework peers | -| -------------------------- | ---------------------------------------- | -| `@tanstack/react-charts` | React and React DOM `^19.0.0` | -| `@tanstack/preact-charts` | Preact `>=10` | -| `@tanstack/vue-charts` | Vue `>=3.5` | -| `@tanstack/solid-charts` | Solid `>=1.8` | -| `@tanstack/svelte-charts` | Svelte `^5.20.0` | -| `@tanstack/angular-charts` | Angular core and platform browser `>=19` | -| `@tanstack/lit-charts` | Lit `>=3.1.3` | -| `@tanstack/alpine-charts` | Alpine `>=3.15` | -| `@tanstack/octane-charts` | Octane `^0.1.13` | +| Adapter package | Framework peers | +| ------------------------------- | ------------------------------------------------------------------------------- | +| `@tanstack/react-charts` | React and React DOM `^19.0.0` | +| `@tanstack/react-native-charts` | React `^19.2.3`, React Native `^0.86.0`, and `react-native-svg` `>=15.15.4 <16` | +| `@tanstack/preact-charts` | Preact `>=10` | +| `@tanstack/vue-charts` | Vue `>=3.5` | +| `@tanstack/solid-charts` | Solid `>=1.8` | +| `@tanstack/svelte-charts` | Svelte `^5.20.0` | +| `@tanstack/angular-charts` | Angular core and platform browser `>=19` | +| `@tanstack/lit-charts` | Lit `>=3.1.3` | +| `@tanstack/alpine-charts` | Alpine `>=3.15` | +| `@tanstack/octane-charts` | Octane `^0.1.13` | These ranges are the package peer contracts. Use the selected framework's normal renderer or application package beside the adapter when the application needs browser mounting or server rendering. +## React Native and Expo + +The React Native adapter is experimental and renders through +`react-native-svg`. Expo 57 applications can install the package and the SVG +version selected by Expo: + +```sh +pnpm add @tanstack/charts @tanstack/react-native-charts d3-scale +pnpm exec expo install react-native-svg +``` + +Bare React Native 0.86 applications install the renderer directly: + +```sh +pnpm add @tanstack/charts @tanstack/react-native-charts d3-scale react-native-svg +``` + +Run `bundle exec pod install` from `ios/` after adding it to a bare iOS +application. Import shared definitions through the universal entry and choose +the native host explicitly: + +```tsx +import { defineChart, lineY } from '@tanstack/charts/universal' +import { Chart } from '@tanstack/react-native-charts' +import { tooltip } from '@tanstack/react-native-charts/tooltip' +``` + +Packed tarballs are typechecked and bundled through default bare React Native +and Expo Metro configurations on iOS and Android. The workspace Expo 57 +fixture also renders in Expo Go on an iOS simulator. Bare-native and Android +simulators, physical devices, gestures, visual parity, and screen readers are +not yet support claims. + ## Install the D3 modules you import TanStack Charts accepts D3 scale factories, configured scale instances, and diff --git a/docs/overview.md b/docs/overview.md index 46864bd5..66a81c62 100644 --- a/docs/overview.md +++ b/docs/overview.md @@ -22,8 +22,9 @@ The library is designed for two equally important authors: - People should get polished, responsive charts from a short declaration. - AI should be able to compose, inspect, and modify charts without learning an application-specific series model or guessing at hidden behavior. -The same definition works with the vanilla DOM host and every framework -adapter. React and Octane also provide optional Canvas entries. +The same definition can feed the vanilla DOM host and framework adapters. +React and Octane also provide optional Canvas entries; the experimental React +Native adapter consumes definitions from the universal entry. ## A chart is a composition @@ -156,18 +157,19 @@ Every automatic behavior has an explicit escape hatch. The [Guides](./guides/res ## Packages -| Package | Use it for | -| -------------------------- | ---------------------------------------------------------------- | -| `@tanstack/charts` | Definitions, marks, scenes, SVG, Canvas, export, and vanilla DOM | -| `@tanstack/react-charts` | React `` | -| `@tanstack/preact-charts` | Preact `` | -| `@tanstack/vue-charts` | Vue `` | -| `@tanstack/solid-charts` | Solid `` | -| `@tanstack/svelte-charts` | Svelte `` | -| `@tanstack/angular-charts` | Angular `` | -| `@tanstack/lit-charts` | Lit `` | -| `@tanstack/alpine-charts` | Alpine `x-chart` | -| `@tanstack/octane-charts` | Octane `` | +| Package | Use it for | +| ------------------------------- | ---------------------------------------------------------------- | +| `@tanstack/charts` | Definitions, marks, scenes, SVG, Canvas, export, and vanilla DOM | +| `@tanstack/react-charts` | React `` | +| `@tanstack/react-native-charts` | Experimental React Native SVG `` | +| `@tanstack/preact-charts` | Preact `` | +| `@tanstack/vue-charts` | Vue `` | +| `@tanstack/solid-charts` | Solid `` | +| `@tanstack/svelte-charts` | Svelte `` | +| `@tanstack/angular-charts` | Angular `` | +| `@tanstack/lit-charts` | Lit `` | +| `@tanstack/alpine-charts` | Alpine `x-chart` | +| `@tanstack/octane-charts` | Octane `` | All packages are ESM and tree-shakeable. Built-in marks and optional capabilities also have subpath exports when a library or design system needs tighter bundle boundaries. diff --git a/examples/charts-expo/App.tsx b/examples/charts-expo/App.tsx new file mode 100644 index 00000000..08067151 --- /dev/null +++ b/examples/charts-expo/App.tsx @@ -0,0 +1,44 @@ +import * as React from 'react' +import { SafeAreaView, View } from 'react-native' +import { scaleLinear } from 'd3-scale' +import { defineChart, lineY } from '@tanstack/charts/universal' +import { Chart } from '@tanstack/react-native-charts' +import { tooltip } from '@tanstack/react-native-charts/tooltip' + +const rows = [ + { month: 1, revenue: 12 }, + { month: 2, revenue: 18 }, + { month: 3, revenue: 15 }, + { month: 4, revenue: 26 }, + { month: 5, revenue: 31 }, +] + +const definition = defineChart({ + marks: [ + lineY(rows, { + x: 'month', + y: 'revenue', + stroke: '#2563eb', + strokeWidth: 3, + points: true, + }), + ], + x: { label: 'Month', scale: scaleLinear().domain([1, 5]) }, + y: { label: 'Revenue', scale: scaleLinear().domain([0, 35]) }, + focus: 'nearest-x', + tooltip: { use: tooltip, sticky: true }, +}) + +export default function App() { + return ( + + + + + + ) +} diff --git a/examples/charts-expo/app.json b/examples/charts-expo/app.json new file mode 100644 index 00000000..af08ba59 --- /dev/null +++ b/examples/charts-expo/app.json @@ -0,0 +1,6 @@ +{ + "expo": { + "name": "TanStack Charts Expo", + "slug": "tanstack-charts-expo" + } +} diff --git a/examples/charts-expo/index.ts b/examples/charts-expo/index.ts new file mode 100644 index 00000000..40906434 --- /dev/null +++ b/examples/charts-expo/index.ts @@ -0,0 +1,4 @@ +import { registerRootComponent } from 'expo' +import App from './App' + +registerRootComponent(App) diff --git a/examples/charts-expo/metro.config.cjs b/examples/charts-expo/metro.config.cjs new file mode 100644 index 00000000..9f8f3c43 --- /dev/null +++ b/examples/charts-expo/metro.config.cjs @@ -0,0 +1,3 @@ +const { getDefaultConfig } = require('expo/metro-config') + +module.exports = getDefaultConfig(__dirname) diff --git a/examples/charts-expo/package.json b/examples/charts-expo/package.json new file mode 100644 index 00000000..ad79c448 --- /dev/null +++ b/examples/charts-expo/package.json @@ -0,0 +1,28 @@ +{ + "name": "@charts-poc/expo-example", + "version": "0.0.0", + "private": true, + "license": "MIT", + "main": "index.ts", + "scripts": { + "start": "expo start", + "bundle": "expo export --platform all --output-dir dist --clear" + }, + "dependencies": { + "@tanstack/charts": "workspace:*", + "@tanstack/react-native-charts": "workspace:*", + "d3-scale": "4.0.2", + "expo": "~57.0.9", + "react": "19.2.3", + "react-native": "0.86.2", + "react-native-svg": "15.15.4" + }, + "devDependencies": { + "@types/d3-scale": "^4.0.9", + "@types/react": "~19.2.2", + "typescript": "~6.0.3" + }, + "engines": { + "node": ">=22.13.0" + } +} diff --git a/examples/charts-expo/tsconfig.json b/examples/charts-expo/tsconfig.json new file mode 100644 index 00000000..d8a90988 --- /dev/null +++ b/examples/charts-expo/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "expo/tsconfig.base", + "compilerOptions": { + "strict": true, + "skipLibCheck": true + }, + "include": ["App.tsx", "index.ts"] +} diff --git a/examples/charts-react-native/App.granular.tsx b/examples/charts-react-native/App.granular.tsx new file mode 100644 index 00000000..8d572a44 --- /dev/null +++ b/examples/charts-react-native/App.granular.tsx @@ -0,0 +1,10 @@ +import * as React from 'react' +import { lineY } from '@tanstack/charts/line' +import { defineChart } from '@tanstack/charts/scene' +import { createRevenueDefinition, RevenueChart } from './RevenueChart' + +const definition = createRevenueDefinition(defineChart, lineY) + +export default function GranularApp() { + return +} diff --git a/examples/charts-react-native/App.tsx b/examples/charts-react-native/App.tsx new file mode 100644 index 00000000..46109d9e --- /dev/null +++ b/examples/charts-react-native/App.tsx @@ -0,0 +1,9 @@ +import * as React from 'react' +import { defineChart, lineY } from '@tanstack/charts/universal' +import { createRevenueDefinition, RevenueChart } from './RevenueChart' + +const definition = createRevenueDefinition(defineChart, lineY) + +export default function App() { + return +} diff --git a/examples/charts-react-native/RevenueChart.tsx b/examples/charts-react-native/RevenueChart.tsx new file mode 100644 index 00000000..607a2bb5 --- /dev/null +++ b/examples/charts-react-native/RevenueChart.tsx @@ -0,0 +1,75 @@ +import * as React from 'react' +import { SafeAreaView, Text, View } from 'react-native' +import { scaleLinear } from 'd3-scale' +import type { ChartDefinition } from '@tanstack/charts/types' +import { Chart } from '@tanstack/react-native-charts' +import { tooltip } from '@tanstack/react-native-charts/tooltip' + +const data = [ + { month: 1, revenue: 12 }, + { month: 2, revenue: 18 }, + { month: 3, revenue: 15 }, + { month: 4, revenue: 26 }, + { month: 5, revenue: 31 }, +] + +type RevenueDefinition = ChartDefinition<(typeof data)[number], number, number> +type DefineChart = typeof import('@tanstack/charts/scene').defineChart +type LineY = typeof import('@tanstack/charts/line').lineY + +export function createRevenueDefinition( + define: DefineChart, + line: LineY, +): RevenueDefinition { + return define({ + marks: [ + line(data, { + x: 'month', + y: 'revenue', + stroke: 'var(--revenue, #2563eb)', + strokeWidth: 3, + points: true, + }), + ], + x: { + label: 'Month', + scale: scaleLinear().domain([1, 5]), + }, + y: { + label: 'Revenue', + grid: true, + scale: scaleLinear().domain([0, 35]), + }, + focus: 'nearest-x', + tooltip: { use: tooltip, sticky: true }, + }) +} + +export function RevenueChart({ + definition, +}: { + definition: RevenueDefinition +}) { + return ( + + + ( + + {defaultBody} + {pinned ? ( + + Pinned + + ) : null} + + )} + /> + + + ) +} diff --git a/examples/charts-react-native/app.json b/examples/charts-react-native/app.json new file mode 100644 index 00000000..af4d3ea3 --- /dev/null +++ b/examples/charts-react-native/app.json @@ -0,0 +1,4 @@ +{ + "name": "ChartsNativePoc", + "displayName": "Charts Native POC" +} diff --git a/examples/charts-react-native/babel.config.cjs b/examples/charts-react-native/babel.config.cjs new file mode 100644 index 00000000..3e0218e6 --- /dev/null +++ b/examples/charts-react-native/babel.config.cjs @@ -0,0 +1,3 @@ +module.exports = { + presets: ['module:@react-native/babel-preset'], +} diff --git a/examples/charts-react-native/index.blank.js b/examples/charts-react-native/index.blank.js new file mode 100644 index 00000000..d5f656f5 --- /dev/null +++ b/examples/charts-react-native/index.blank.js @@ -0,0 +1,9 @@ +import * as React from 'react' +import { AppRegistry, View } from 'react-native' +import { name as appName } from './app.json' + +function BlankApp() { + return React.createElement(View) +} + +AppRegistry.registerComponent(appName, () => BlankApp) diff --git a/examples/charts-react-native/index.core.js b/examples/charts-react-native/index.core.js new file mode 100644 index 00000000..98759e74 --- /dev/null +++ b/examples/charts-react-native/index.core.js @@ -0,0 +1,23 @@ +import * as React from 'react' +import { AppRegistry, View } from 'react-native' +import { scaleLinear } from 'd3-scale' +import { lineY } from '@tanstack/charts/line' +import { createChartRuntime } from '@tanstack/charts/runtime' +import { defineChart } from '@tanstack/charts/scene' +import { name as appName } from './app.json' + +const definition = defineChart({ + marks: [lineY([4, 9, 7])], + x: { scale: scaleLinear().domain([0, 2]) }, + y: { scale: scaleLinear().domain([0, 10]) }, +}) +const runtime = createChartRuntime() +const scene = runtime.render(definition, { width: 320, height: 240 }) + +function CoreApp() { + return React.createElement(View, { + accessibilityLabel: `${scene.points.length} chart points`, + }) +} + +AppRegistry.registerComponent(appName, () => CoreApp) diff --git a/examples/charts-react-native/index.granular.js b/examples/charts-react-native/index.granular.js new file mode 100644 index 00000000..08a296ba --- /dev/null +++ b/examples/charts-react-native/index.granular.js @@ -0,0 +1,5 @@ +import { AppRegistry } from 'react-native' +import App from './App.granular' +import { name as appName } from './app.json' + +AppRegistry.registerComponent(appName, () => App) diff --git a/examples/charts-react-native/index.js b/examples/charts-react-native/index.js new file mode 100644 index 00000000..33fbb360 --- /dev/null +++ b/examples/charts-react-native/index.js @@ -0,0 +1,5 @@ +import { AppRegistry } from 'react-native' +import App from './App' +import { name as appName } from './app.json' + +AppRegistry.registerComponent(appName, () => App) diff --git a/examples/charts-react-native/index.svg.js b/examples/charts-react-native/index.svg.js new file mode 100644 index 00000000..0e7e94f3 --- /dev/null +++ b/examples/charts-react-native/index.svg.js @@ -0,0 +1,23 @@ +import * as React from 'react' +import { AppRegistry, View } from 'react-native' +import { Circle, Svg } from 'react-native-svg' +import { name as appName } from './app.json' + +function SvgApp() { + return React.createElement( + View, + null, + React.createElement( + Svg, + { width: 100, height: 100 }, + React.createElement(Circle, { + cx: 50, + cy: 50, + r: 20, + fill: '#2563eb', + }), + ), + ) +} + +AppRegistry.registerComponent(appName, () => SvgApp) diff --git a/examples/charts-react-native/metro.config.cjs b/examples/charts-react-native/metro.config.cjs new file mode 100644 index 00000000..51160f83 --- /dev/null +++ b/examples/charts-react-native/metro.config.cjs @@ -0,0 +1,14 @@ +const path = require('node:path') +const { getDefaultConfig, mergeConfig } = require('@react-native/metro-config') + +const workspaceRoot = path.resolve(__dirname, '../..') + +module.exports = mergeConfig(getDefaultConfig(__dirname), { + watchFolders: [workspaceRoot], + resolver: { + nodeModulesPaths: [ + path.resolve(__dirname, 'node_modules'), + path.resolve(workspaceRoot, 'node_modules'), + ], + }, +}) diff --git a/examples/charts-react-native/package.json b/examples/charts-react-native/package.json new file mode 100644 index 00000000..fcf782a5 --- /dev/null +++ b/examples/charts-react-native/package.json @@ -0,0 +1,35 @@ +{ + "name": "@charts-poc/react-native-example", + "version": "0.0.0", + "private": true, + "license": "MIT", + "scripts": { + "bundle:android": "react-native bundle --entry-file index.js --platform android --dev false --minify true --bundle-output ../../.bundle-output/react-native-chart.android.js --sourcemap-output ../../.bundle-output/react-native-chart.android.map", + "bundle:ios": "react-native bundle --entry-file index.js --platform ios --dev false --minify true --bundle-output ../../.bundle-output/react-native-chart.ios.js --sourcemap-output ../../.bundle-output/react-native-chart.ios.map", + "start": "react-native start" + }, + "dependencies": { + "@tanstack/charts": "workspace:*", + "@tanstack/react-native-charts": "workspace:*", + "d3-scale": "4.0.2", + "react": "19.2.3", + "react-native": "0.86.2", + "react-native-svg": "15.15.5" + }, + "devDependencies": { + "@babel/core": "^7.25.2", + "@babel/runtime": "^7.25.0", + "@react-native-community/cli": "20.1.0", + "@react-native-community/cli-platform-android": "20.1.0", + "@react-native-community/cli-platform-ios": "20.1.0", + "@react-native/babel-preset": "0.86.2", + "@react-native/metro-config": "0.86.2", + "@react-native/typescript-config": "0.86.2", + "@types/d3-scale": "^4.0.9", + "@types/react": "~19.2.2", + "typescript": "~6.0.3" + }, + "engines": { + "node": ">=22.11.0" + } +} diff --git a/examples/charts-react-native/tsconfig.json b/examples/charts-react-native/tsconfig.json new file mode 100644 index 00000000..203e9655 --- /dev/null +++ b/examples/charts-react-native/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@react-native/typescript-config", + "compilerOptions": { + "lib": ["es2022"], + "types": ["react", "react-native"] + }, + "include": ["App.tsx", "App.granular.tsx", "RevenueChart.tsx"], + "exclude": ["node_modules"] +} diff --git a/examples/charts-react-native/tsconfig.strict.json b/examples/charts-react-native/tsconfig.strict.json new file mode 100644 index 00000000..8c174d9c --- /dev/null +++ b/examples/charts-react-native/tsconfig.strict.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "skipLibCheck": false + } +} diff --git a/nx.json b/nx.json index 44671a45..f46ad7ea 100644 --- a/nx.json +++ b/nx.json @@ -61,11 +61,14 @@ "{workspaceRoot}/docs/**/*", "{workspaceRoot}/packages/charts-core/**/*", "{workspaceRoot}/packages/*-charts/**/*", + "{workspaceRoot}/examples/charts-react-native/**/*", + "{workspaceRoot}/examples/charts-expo/**/*", "!{workspaceRoot}/packages/*/dist/**/*", "{workspaceRoot}/scripts/*package*.mjs", "{workspaceRoot}/scripts/*release*.mjs", "{workspaceRoot}/scripts/check-framework-adapters.mjs", "{workspaceRoot}/scripts/check-packed-consumers.mjs", + "{workspaceRoot}/scripts/packed-react-native-consumers.mjs", "{workspaceRoot}/scripts/packed-markdown-links.mjs" ], "testSolid": [ diff --git a/package.json b/package.json index d2f1c8f8..ce317adf 100644 --- a/package.json +++ b/package.json @@ -47,6 +47,8 @@ "conformance:quick": "node scripts/compare-plot-catalog.mjs --profile=quick", "conformance:size": "node scripts/compare-plot-catalog.mjs --size-only", "performance": "node scripts/measure-rendering.mjs", + "react-native:poc:bundle": "node scripts/measure-react-native-poc.mjs", + "react-native:poc:types": "node scripts/check-react-native-types.mjs", "package:check": "nx run charts-workspace:package-check", "release:artifacts": "nx run charts-workspace:release-artifacts", "release:check": "node scripts/publish-release.mjs --check", @@ -72,6 +74,7 @@ "@tanstack/charts-d3": "workspace:*", "@tanstack/charts-scales": "workspace:*", "@tanstack/octane-charts": "workspace:*", + "@tanstack/react-native-charts": "workspace:*", "@tanstack/react-charts": "workspace:*", "@types/d3-array": "^3.2.2", "@types/d3-brush": "^3.0.6", diff --git a/packages/charts-core/docs/comparison.md b/packages/charts-core/docs/comparison.md index 6e9b7057..3ef0a70e 100644 --- a/packages/charts-core/docs/comparison.md +++ b/packages/charts-core/docs/comparison.md @@ -4,22 +4,22 @@ description: Compare TanStack Charts with measured and documentation-reviewed ch --- TanStack Charts `0.4.0` is a pre-alpha release. Its results on this page measure -the exact workspace source included in this release and pinned competitor -packages. This comparison records architectural differences and reproducible -evidence without turning untested behavior into a checkmark. +the current workspace source and pinned competitor packages. This comparison +records architectural differences and reproducible evidence without turning +untested behavior into a checkmark. ## Tested versions | Library | Package | Measured source | | -------------------------------------------------------------------------------------- | -------------------- | ------------------- | -| [TanStack Charts](./overview.md) | `@tanstack/charts` | workspace `d563eba` | +| [TanStack Charts](./overview.md) | `@tanstack/charts` | workspace `1a8b888` | | [Chart.js](https://www.chartjs.org/docs/latest/) | `chart.js` | npm `4.5.1` | | [Apache ECharts](https://echarts.apache.org/handbook/en/best-practices/canvas-vs-svg/) | `echarts` | npm `6.1.0` | | [Recharts](https://recharts.github.io/en-US/) | `recharts` | npm `3.10.1` | | [Observable Plot](https://observablehq.com/plot/features/plots) | `@observablehq/plot` | npm `0.6.17` | The competitor versions are exact package pins, not latest versions inferred -at page render time. The measured TanStack workspace revision is `d563eba`. +at page render time. The measured TanStack workspace revision is `1a8b888`. ## Capability matrix @@ -170,7 +170,8 @@ Canvas composition while keeping D3 and state ownership explicit. ## Evidence and reproduction - [Standard comparison protocol](https://github.com/TanStack/charts/blob/v0.4.0/benchmarks/comparison/README.md) -- [Tracked bundle baseline](https://github.com/TanStack/charts/blob/v0.4.0/benchmarks/comparison/bundle-baseline.json) +- [Current tracked bundle baseline](https://github.com/TanStack/charts/blob/main/benchmarks/comparison/bundle-baseline.json) +- [0.4.0 tagged bundle baseline](https://github.com/TanStack/charts/blob/v0.4.0/benchmarks/comparison/bundle-baseline.json) - [Stress protocol](https://github.com/TanStack/charts/blob/v0.4.0/benchmarks/comparison/stress/README.md) - [Catalog conformance protocol](https://github.com/TanStack/charts/blob/v0.4.0/benchmarks/conformance/README.md) diff --git a/packages/charts-core/docs/installation.md b/packages/charts-core/docs/installation.md index 3fcbb600..809705c8 100644 --- a/packages/charts-core/docs/installation.md +++ b/packages/charts-core/docs/installation.md @@ -17,6 +17,9 @@ Then add one adapter if the application needs it: # React pnpm add @tanstack/react-charts react react-dom +# React Native +pnpm add @tanstack/react-native-charts react react-native react-native-svg + # Preact pnpm add @tanstack/preact-charts preact @@ -46,22 +49,56 @@ The adapters intentionally do not replace the core package. Definitions and mark ## Framework compatibility -| Adapter package | Framework peers | -| -------------------------- | ---------------------------------------- | -| `@tanstack/react-charts` | React and React DOM `^19.0.0` | -| `@tanstack/preact-charts` | Preact `>=10` | -| `@tanstack/vue-charts` | Vue `>=3.5` | -| `@tanstack/solid-charts` | Solid `>=1.8` | -| `@tanstack/svelte-charts` | Svelte `^5.20.0` | -| `@tanstack/angular-charts` | Angular core and platform browser `>=19` | -| `@tanstack/lit-charts` | Lit `>=3.1.3` | -| `@tanstack/alpine-charts` | Alpine `>=3.15` | -| `@tanstack/octane-charts` | Octane `^0.1.13` | +| Adapter package | Framework peers | +| ------------------------------- | ------------------------------------------------------------------------------- | +| `@tanstack/react-charts` | React and React DOM `^19.0.0` | +| `@tanstack/react-native-charts` | React `^19.2.3`, React Native `^0.86.0`, and `react-native-svg` `>=15.15.4 <16` | +| `@tanstack/preact-charts` | Preact `>=10` | +| `@tanstack/vue-charts` | Vue `>=3.5` | +| `@tanstack/solid-charts` | Solid `>=1.8` | +| `@tanstack/svelte-charts` | Svelte `^5.20.0` | +| `@tanstack/angular-charts` | Angular core and platform browser `>=19` | +| `@tanstack/lit-charts` | Lit `>=3.1.3` | +| `@tanstack/alpine-charts` | Alpine `>=3.15` | +| `@tanstack/octane-charts` | Octane `^0.1.13` | These ranges are the package peer contracts. Use the selected framework's normal renderer or application package beside the adapter when the application needs browser mounting or server rendering. +## React Native and Expo + +The React Native adapter is experimental and renders through +`react-native-svg`. Expo 57 applications can install the package and the SVG +version selected by Expo: + +```sh +pnpm add @tanstack/charts @tanstack/react-native-charts d3-scale +pnpm exec expo install react-native-svg +``` + +Bare React Native 0.86 applications install the renderer directly: + +```sh +pnpm add @tanstack/charts @tanstack/react-native-charts d3-scale react-native-svg +``` + +Run `bundle exec pod install` from `ios/` after adding it to a bare iOS +application. Import shared definitions through the universal entry and choose +the native host explicitly: + +```tsx +import { defineChart, lineY } from '@tanstack/charts/universal' +import { Chart } from '@tanstack/react-native-charts' +import { tooltip } from '@tanstack/react-native-charts/tooltip' +``` + +Packed tarballs are typechecked and bundled through default bare React Native +and Expo Metro configurations on iOS and Android. The workspace Expo 57 +fixture also renders in Expo Go on an iOS simulator. Bare-native and Android +simulators, physical devices, gestures, visual parity, and screen readers are +not yet support claims. + ## Install the D3 modules you import TanStack Charts accepts D3 scale factories, configured scale instances, and diff --git a/packages/charts-core/docs/overview.md b/packages/charts-core/docs/overview.md index 46864bd5..66a81c62 100644 --- a/packages/charts-core/docs/overview.md +++ b/packages/charts-core/docs/overview.md @@ -22,8 +22,9 @@ The library is designed for two equally important authors: - People should get polished, responsive charts from a short declaration. - AI should be able to compose, inspect, and modify charts without learning an application-specific series model or guessing at hidden behavior. -The same definition works with the vanilla DOM host and every framework -adapter. React and Octane also provide optional Canvas entries. +The same definition can feed the vanilla DOM host and framework adapters. +React and Octane also provide optional Canvas entries; the experimental React +Native adapter consumes definitions from the universal entry. ## A chart is a composition @@ -156,18 +157,19 @@ Every automatic behavior has an explicit escape hatch. The [Guides](./guides/res ## Packages -| Package | Use it for | -| -------------------------- | ---------------------------------------------------------------- | -| `@tanstack/charts` | Definitions, marks, scenes, SVG, Canvas, export, and vanilla DOM | -| `@tanstack/react-charts` | React `` | -| `@tanstack/preact-charts` | Preact `` | -| `@tanstack/vue-charts` | Vue `` | -| `@tanstack/solid-charts` | Solid `` | -| `@tanstack/svelte-charts` | Svelte `` | -| `@tanstack/angular-charts` | Angular `` | -| `@tanstack/lit-charts` | Lit `` | -| `@tanstack/alpine-charts` | Alpine `x-chart` | -| `@tanstack/octane-charts` | Octane `` | +| Package | Use it for | +| ------------------------------- | ---------------------------------------------------------------- | +| `@tanstack/charts` | Definitions, marks, scenes, SVG, Canvas, export, and vanilla DOM | +| `@tanstack/react-charts` | React `` | +| `@tanstack/react-native-charts` | Experimental React Native SVG `` | +| `@tanstack/preact-charts` | Preact `` | +| `@tanstack/vue-charts` | Vue `` | +| `@tanstack/solid-charts` | Solid `` | +| `@tanstack/svelte-charts` | Svelte `` | +| `@tanstack/angular-charts` | Angular `` | +| `@tanstack/lit-charts` | Lit `` | +| `@tanstack/alpine-charts` | Alpine `x-chart` | +| `@tanstack/octane-charts` | Octane `` | All packages are ESM and tree-shakeable. Built-in marks and optional capabilities also have subpath exports when a library or design system needs tighter bundle boundaries. diff --git a/packages/charts-core/src/reconcile.test.ts b/packages/charts-core/src/reconcile.test.ts index 9fe0fc2e..a17e1cea 100644 --- a/packages/charts-core/src/reconcile.test.ts +++ b/packages/charts-core/src/reconcile.test.ts @@ -142,7 +142,7 @@ describe('keyed SVG reconciliation', () => { const cancelFrame = vi .spyOn(window, 'cancelAnimationFrame') .mockImplementation((handle) => { - callbacks.delete(handle) + if (typeof handle === 'number') callbacks.delete(handle) }) reconcileChartSvg( container, diff --git a/packages/react-native-charts/CHANGELOG.md b/packages/react-native-charts/CHANGELOG.md new file mode 100644 index 00000000..ef86d90b --- /dev/null +++ b/packages/react-native-charts/CHANGELOG.md @@ -0,0 +1,10 @@ +# @tanstack/react-native-charts + +## 0.4.0 + +### Minor Changes + +- Add the initial experimental React Native SVG host with responsive scene + rendering, focus, selection, accessibility actions, and an optional native + tooltip entry. Ship compiled ESM and declarations verified in packed bare + React Native and Expo Metro consumers. diff --git a/packages/react-native-charts/LICENSE b/packages/react-native-charts/LICENSE new file mode 100644 index 00000000..cce7e258 --- /dev/null +++ b/packages/react-native-charts/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 TanStack + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/react-native-charts/README.md b/packages/react-native-charts/README.md new file mode 100644 index 00000000..9eb34c90 --- /dev/null +++ b/packages/react-native-charts/README.md @@ -0,0 +1,58 @@ +# TanStack React Native Charts + +Experimental React Native SVG host for `@tanstack/charts` definitions and +scene graphs. + +## Install + +```sh +npm install @tanstack/react-native-charts @tanstack/charts d3-scale +npm install --save-dev @types/d3-scale +``` + +Expo applications also need the SDK-compatible SVG renderer: + +```sh +npx expo install react-native-svg +``` + +Bare React Native applications can install it directly: + +```sh +npm install react-native-svg +``` + +Run `bundle exec pod install` from `ios/` after adding it to a bare iOS +application. + +## Usage + +```tsx +import { scaleLinear } from 'd3-scale' +import { defineChart, lineY } from '@tanstack/charts/universal' +import { Chart } from '@tanstack/react-native-charts' +import { tooltip } from '@tanstack/react-native-charts/tooltip' + +const definition = defineChart({ + marks: [lineY([4, 9, 7])], + x: { scale: scaleLinear().domain([0, 2]) }, + y: { scale: scaleLinear().domain([0, 10]) }, + tooltip: { use: tooltip, sticky: true }, +}) + +export function RevenueChart() { + return ( + + ) +} +``` + +The package is tested with Expo 57 / React Native 0.86 and +`react-native-svg` 15.15.x. The workspace fixture also renders in Expo Go on an +iOS simulator. It remains experimental: bare-native and Android simulators, +physical devices, gestures, accessibility, release builds, and performance +still need validation. diff --git a/packages/react-native-charts/package.json b/packages/react-native-charts/package.json new file mode 100644 index 00000000..9c0970c4 --- /dev/null +++ b/packages/react-native-charts/package.json @@ -0,0 +1,52 @@ +{ + "name": "@tanstack/react-native-charts", + "version": "0.4.0", + "private": false, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/TanStack/charts.git", + "directory": "packages/react-native-charts" + }, + "type": "module", + "sideEffects": false, + "files": [ + "dist", + "CHANGELOG.md", + "LICENSE", + "README.md" + ], + "exports": { + ".": "./src/index.ts", + "./tooltip": "./src/tooltip-entry.ts" + }, + "publishConfig": { + "access": "public", + "provenance": true, + "exports": { + ".": { + "types": "./dist/index.d.ts", + "react-native": "./dist/index.native.js", + "import": "./dist/index.js" + }, + "./tooltip": { + "types": "./dist/tooltip-entry.d.ts", + "react-native": "./dist/tooltip-entry.native.js", + "import": "./dist/tooltip-entry.js" + } + } + }, + "dependencies": { + "@tanstack/charts": "workspace:*" + }, + "devDependencies": { + "react": "19.2.3", + "react-native": "0.86.2", + "react-native-svg": "15.15.5" + }, + "peerDependencies": { + "react": "^19.2.3", + "react-native": "^0.86.0", + "react-native-svg": ">=15.15.4 <16" + } +} diff --git a/packages/react-native-charts/src/Chart.test.tsx b/packages/react-native-charts/src/Chart.test.tsx new file mode 100644 index 00000000..7900d967 --- /dev/null +++ b/packages/react-native-charts/src/Chart.test.tsx @@ -0,0 +1,279 @@ +import * as React from 'react' +import { createRoot } from 'react-dom/client' +import { renderToStaticMarkup } from 'react-dom/server' +import { scaleLinear } from 'd3-scale' +import { describe, expect, it, vi } from 'vitest' +import { lineY } from '@tanstack/charts/line' +import { defineChart } from '@tanstack/charts/scene' +import { Chart } from './Chart' +import { + tooltip, + type NativeChartTooltipComponent, + type NativeChartTooltipExtension, +} from './tooltip-entry' + +vi.mock('react-native', async () => { + const ReactModule = await import('react') + return { + Text: 'span', + View: ReactModule.forwardRef< + HTMLDivElement, + React.HTMLAttributes & { style?: unknown } + >(function MockView({ children, onBlur, onFocus, style }, ref) { + const resolvedStyle = Array.isArray(style) + ? Object.assign({}, ...style.filter(Boolean)) + : style + return ReactModule.createElement( + 'div', + { + ref, + onBlur, + onFocus, + style: resolvedStyle as React.CSSProperties, + }, + children, + ) + }), + } +}) + +vi.mock('react-native-svg', () => ({ + Circle: 'circle', + ClipPath: 'clipPath', + Defs: 'defs', + G: 'g', + Line: 'line', + LinearGradient: 'linearGradient', + Path: 'path', + Rect: 'rect', + Stop: 'stop', + Svg: 'svg', + Text: 'text', +})) + +const data = [ + { month: 1, value: 8 }, + { month: 2, value: 12 }, +] +const definition = defineChart({ + marks: [ + lineY(data, { + x: 'month', + y: 'value', + stroke: 'var(--series, #2563eb)', + points: true, + }), + ], + x: { scale: scaleLinear().domain([1, 2]) }, + y: { scale: scaleLinear().domain([8, 12]) }, + tooltip: { use: tooltip, sticky: true }, +}) + +describe('React Native Chart', () => { + it('compiles a shared definition directly into native SVG components', () => { + const markup = renderToStaticMarkup( + , + ) + + expect(markup).toContain(' { + const markup = renderToStaticMarkup( + , + ) + + expect(markup).not.toContain(' { + const foreignDefinition = defineChart({ + marks: [lineY(data, { x: 'month', y: 'value' })], + x: { scale: scaleLinear().domain([1, 2]) }, + y: { scale: scaleLinear().domain([8, 12]) }, + tooltip: { + id: 'foreign-tooltip', + create: (): undefined => undefined, + }, + }) + + expect(() => + renderToStaticMarkup( + , + ), + ).toThrow('tooltip extension from @tanstack/react-native-charts/tooltip') + }) + + it('creates branded native tooltip extensions without singleton identity', () => { + const CustomTooltip: NativeChartTooltipComponent = () => null + const create = vi.fn(() => CustomTooltip) + const customTooltip: NativeChartTooltipExtension = { + id: 'custom-native-tooltip', + __chartExtensionType: 'tooltip', + __nativeChartHost: 'react-native', + create, + } + const customDefinition = defineChart({ + marks: [lineY(data, { x: 'month', y: 'value' })], + x: { scale: scaleLinear().domain([1, 2]) }, + y: { scale: scaleLinear().domain([8, 12]) }, + tooltip: { use: customTooltip, sticky: true }, + }) + + renderToStaticMarkup( + , + ) + + expect(create).toHaveBeenCalledOnce() + }) + + it('refreshes focused callbacks with points from a resized scene', async () => { + const container = document.createElement('div') + const root = createRoot(container) + const onFocusChange = vi.fn() + + try { + await React.act(() => { + root.render( + , + ) + }) + const chart = container.firstElementChild + if (!chart) throw new Error('Expected the native chart root to render.') + + await React.act(() => { + chart.dispatchEvent(new FocusEvent('focusin', { bubbles: true })) + }) + const initial = onFocusChange.mock.lastCall?.[0] + + await React.act(() => { + root.render( + , + ) + }) + const restored = onFocusChange.mock.lastCall?.[0] + + expect(onFocusChange).toHaveBeenCalledTimes(2) + expect(restored).not.toBe(initial) + expect(restored?.y).not.toBe(initial?.y) + } finally { + await React.act(() => root.unmount()) + } + }) + + it('keeps the focus source when only callback props change', async () => { + const focusSources: string[] = [] + const TrackingTooltip: NativeChartTooltipComponent = ({ focusSource }) => { + focusSources.push(focusSource) + return null + } + const trackingTooltip: NativeChartTooltipExtension = { + id: 'tracking-native-tooltip', + __chartExtensionType: 'tooltip', + __nativeChartHost: 'react-native', + create: () => TrackingTooltip, + } + const trackingDefinition = defineChart({ + marks: [lineY(data, { x: 'month', y: 'value' })], + x: { scale: scaleLinear().domain([1, 2]) }, + y: { scale: scaleLinear().domain([8, 12]) }, + tooltip: { use: trackingTooltip }, + }) + const container = document.createElement('div') + const root = createRoot(container) + + try { + await React.act(() => { + root.render( + , + ) + }) + const chart = container.firstElementChild + if (!chart) throw new Error('Expected the native chart root to render.') + + await React.act(() => { + chart.dispatchEvent(new FocusEvent('focusin', { bubbles: true })) + }) + expect(focusSources.at(-1)).toBe('keyboard') + + await React.act(() => { + root.render( + , + ) + }) + expect(focusSources.at(-1)).toBe('keyboard') + } finally { + await React.act(() => root.unmount()) + } + }) + + it('rejects browser tooltip portal extensions', () => { + const portalDefinition = defineChart({ + marks: [lineY(data, { x: 'month', y: 'value' })], + x: { scale: scaleLinear().domain([1, 2]) }, + y: { scale: scaleLinear().domain([8, 12]) }, + tooltip: { + use: tooltip, + portal: { + id: 'browser-portal', + create: (): undefined => undefined, + }, + }, + }) + + expect(() => + renderToStaticMarkup( + , + ), + ).toThrow('do not support browser tooltip portal extensions') + }) +}) diff --git a/packages/react-native-charts/src/Chart.tsx b/packages/react-native-charts/src/Chart.tsx new file mode 100644 index 00000000..02bd7e8d --- /dev/null +++ b/packages/react-native-charts/src/Chart.tsx @@ -0,0 +1,447 @@ +import * as React from 'react' +import type { + AccessibilityActionEvent, + ColorValue, + GestureResponderEvent, + LayoutChangeEvent, + StyleProp, + ViewStyle, +} from 'react-native' +import { View } from 'react-native' +import { createChartRuntime } from '@tanstack/charts/runtime' +import type { + ChartDefinition, + ChartFocusSource, + ChartPoint, + ChartScene, + ChartTextMeasurer, + ChartTooltipExtensionToken, + ChartTooltipInput, + ChartTooltipOptions, + ChartTooltipPosition, + ChartValue, +} from '@tanstack/charts/types' +import { NativeChartFocusOverlay } from './FocusOverlay' +import { + adjacentFocusPoint, + createNativeChartFocusModel, + samePointReferences, +} from './interaction' +import { resolveNativePaint, type NativePaintResolver } from './paint' +import { NativeChartScene } from './SvgScene' +import type { + NativeChartTooltipComponent, + NativeChartTooltipExtension, + NativeChartTooltipRenderContext, +} from './Tooltip' + +export interface NativeChartRenderContext< + TDatum, + TXValue extends ChartValue, + TYValue extends ChartValue, +> { + scene: ChartScene +} + +export interface ChartProps< + TDatum = unknown, + TXValue extends ChartValue = ChartValue, + TYValue extends ChartValue = ChartValue, +> { + definition: ChartDefinition + accessibilityLabel: string + accessibilityHint?: string + width?: number + height?: number + aspectRatio?: number + style?: StyleProp + color?: ColorValue + focusFill?: ColorValue + fontFamily?: string + idPrefix?: string + testID?: string + measureText?: ChartTextMeasurer + resolvePaint?: NativePaintResolver + onFocusChange?: (point: ChartPoint | null) => void + onFocusGroupChange?: ( + points: readonly ChartPoint[], + ) => void + onSelect?: (point: ChartPoint | null) => void + onRender?: ( + context: NativeChartRenderContext, + ) => void + renderTooltip?: ( + context: NativeChartTooltipRenderContext, + ) => React.ReactNode +} + +export function Chart< + TDatum, + TXValue extends ChartValue = ChartValue, + TYValue extends ChartValue = ChartValue, +>({ + definition, + accessibilityLabel, + accessibilityHint, + width, + height, + aspectRatio, + style, + color = '#111827', + focusFill = '#ffffff', + fontFamily, + idPrefix: idPrefixOption, + testID, + measureText, + resolvePaint = resolveNativePaint, + onFocusChange, + onFocusGroupChange, + onSelect, + onRender, + renderTooltip, +}: ChartProps) { + const generatedId = React.useId() + const idPrefix = + idPrefixOption ?? + `ts-chart-${generatedId.replaceAll(/[^a-zA-Z0-9_-]/g, '')}` + const runtime = React.useMemo( + () => createChartRuntime(), + [], + ) + const [layout, setLayout] = React.useState<{ + width: number + height: number + } | null>(null) + const resolvedAspectRatio = positiveFinite(aspectRatio) + const explicitWidth = positiveFinite(width) + const explicitHeight = positiveFinite(height) + const sceneSize = resolveSceneSize( + explicitWidth, + explicitHeight, + resolvedAspectRatio, + layout, + ) + const scene = React.useMemo( + () => + sceneSize ? runtime.render(definition, sceneSize, { measureText }) : null, + [definition, measureText, runtime, sceneSize?.height, sceneSize?.width], + ) + const focusModel = React.useMemo( + () => (scene ? createNativeChartFocusModel(scene, definition) : null), + [definition, scene], + ) + const [focusedPoints, setFocusedPoints] = React.useState< + readonly ChartPoint[] + >([]) + const focusedPointsRef = React.useRef(focusedPoints) + const onFocusChangeRef = React.useRef(onFocusChange) + const onFocusGroupChangeRef = React.useRef(onFocusGroupChange) + onFocusChangeRef.current = onFocusChange + onFocusGroupChangeRef.current = onFocusGroupChange + const [pinnedKey, setPinnedKey] = React.useState(null) + const [pointer, setPointer] = React.useState( + null, + ) + const [focusSource, setFocusSource] = + React.useState('programmatic') + const tooltipInput = React.useMemo( + () => resolveNativeTooltipInput(definition.tooltip), + [definition.tooltip], + ) + const TooltipComponent = tooltipInput?.component + const tooltipOptions = tooltipInput?.options + const sticky = Boolean(tooltipInput) && tooltipOptions?.sticky !== false + const interactive = Boolean(scene?.points.length) + + const commitFocus = React.useCallback( + (points: readonly ChartPoint[]) => { + const current = focusedPointsRef.current + if (samePointReferences(points, current)) return + focusedPointsRef.current = points + setFocusedPoints(points) + onFocusChangeRef.current?.(points[0] ?? null) + onFocusGroupChangeRef.current?.(points) + }, + [], + ) + + React.useEffect(() => () => runtime.destroy(), [runtime]) + React.useEffect(() => { + if (scene) onRender?.({ scene }) + }, [onRender, scene]) + React.useEffect(() => { + const previous = focusedPointsRef.current[0] + if (!focusModel || !previous) return + const restored = focusModel.restore(previous) + if (restored) { + setFocusSource('restored') + commitFocus(focusModel.group(restored)) + } else { + setPinnedKey(null) + commitFocus([]) + } + }, [commitFocus, focusModel]) + React.useEffect(() => { + if (!sticky) setPinnedKey(null) + }, [sticky]) + + const dismiss = React.useCallback(() => { + setPinnedKey(null) + setPointer(null) + commitFocus([]) + }, [commitFocus]) + + const pointAtEvent = React.useCallback( + (event: GestureResponderEvent) => { + if (!scene || !focusModel) return [] + const measuredWidth = layout?.width ?? scene.width + const measuredHeight = layout?.height ?? scene.height + if (measuredWidth <= 0 || measuredHeight <= 0) return [] + const position = { + x: (event.nativeEvent.locationX / measuredWidth) * scene.width, + y: (event.nativeEvent.locationY / measuredHeight) * scene.height, + } + setFocusSource('pointer') + setPointer(position) + return focusModel.resolve(position.x, position.y) + }, + [focusModel, layout?.height, layout?.width, scene], + ) + + const handleResponderGrant = (event: GestureResponderEvent) => { + if (pinnedKey) return + commitFocus(pointAtEvent(event)) + } + const handleResponderMove = (event: GestureResponderEvent) => { + if (pinnedKey) return + commitFocus(pointAtEvent(event)) + } + const handleResponderRelease = (event: GestureResponderEvent) => { + const points = pointAtEvent(event) + const point = points[0] ?? null + if (sticky) setPinnedKey(pinnedKey ? null : (point?.key ?? null)) + commitFocus(points) + onSelect?.(point) + } + const handleResponderTerminate = () => { + if (pinnedKey) return + setPointer(null) + commitFocus([]) + } + const handleLayout = (event: LayoutChangeEvent) => { + const next = event.nativeEvent.layout + if (!positiveFinite(next.width) || !positiveFinite(next.height)) return + setLayout((current) => + current?.width === next.width && current.height === next.height + ? current + : { width: next.width, height: next.height }, + ) + } + + const navigate = (direction: -1 | 1) => { + if (!focusModel) return + setFocusSource('keyboard') + const point = adjacentFocusPoint( + focusModel, + focusedPointsRef.current[0] ?? null, + direction, + ) + setPointer(null) + commitFocus(point ? focusModel.group(point) : []) + } + const activate = () => { + const point = focusedPointsRef.current[0] ?? null + if (!point) return + if (sticky) setPinnedKey((current) => (current ? null : point.key)) + onSelect?.(point) + } + const handleAccessibilityAction = (event: AccessibilityActionEvent) => { + switch (event.nativeEvent.actionName) { + case 'increment': + navigate(1) + break + case 'decrement': + navigate(-1) + break + case 'activate': + activate() + break + case 'escape': + dismiss() + break + } + } + const handleFocus = () => { + if (definition.keyboard === false || focusedPointsRef.current.length) return + navigate(1) + } + const focusedPoint = focusedPoints[0] ?? null + + return ( + false} + onResponderGrant={handleResponderGrant} + onResponderMove={handleResponderMove} + onResponderRelease={handleResponderRelease} + onResponderTerminate={handleResponderTerminate} + onResponderTerminationRequest={() => true} + onStartShouldSetResponder={() => interactive} + style={[ + { + position: 'relative', + overflow: 'visible', + width: explicitWidth ?? '100%', + height: + explicitHeight ?? + (resolvedAspectRatio === undefined ? 320 : undefined), + aspectRatio: + explicitHeight === undefined ? resolvedAspectRatio : undefined, + }, + style, + ]} + testID={testID} + > + {scene ? ( + <> + + + {TooltipComponent && focusedPoints.length ? ( + + ) : null} + + ) : null} + + ) +} + +function resolveNativeTooltipInput< + TDatum, + TXValue extends ChartValue, + TYValue extends ChartValue, +>( + input: false | ChartTooltipInput | undefined, +): { + component: NativeChartTooltipComponent + options?: ChartTooltipOptions +} | null { + if (!input) return null + const extension = 'create' in input ? input : input.use + if (!isNativeTooltipExtension(extension)) { + throw new Error( + 'React Native charts require a tooltip extension from @tanstack/react-native-charts/tooltip.', + ) + } + if (!('create' in input) && input.portal) { + throw new Error( + 'React Native charts do not support browser tooltip portal extensions.', + ) + } + return { + component: extension.create(), + options: 'create' in input ? undefined : input, + } +} + +function isNativeTooltipExtension( + extension: ChartTooltipExtensionToken, +): extension is NativeChartTooltipExtension { + const candidate = extension as Partial + return ( + candidate.__chartExtensionType === 'tooltip' && + candidate.__nativeChartHost === 'react-native' + ) +} + +function resolveSceneSize( + width: number | undefined, + height: number | undefined, + aspectRatio: number | undefined, + layout: { width: number; height: number } | null, +) { + const resolvedWidth = width ?? layout?.width + if (!resolvedWidth) return null + const resolvedHeight = + height ?? + (aspectRatio === undefined + ? (layout?.height ?? (width === undefined ? undefined : 320)) + : resolvedWidth / aspectRatio) + return resolvedHeight + ? { width: resolvedWidth, height: resolvedHeight } + : null +} + +function positiveFinite(value: number | undefined) { + return value !== undefined && Number.isFinite(value) && value > 0 + ? value + : undefined +} + +function describePoint(point: ChartPoint) { + return [ + point.groupLabel, + formatValue(point.xValue), + formatValue(point.yValue), + ] + .filter(Boolean) + .join(', ') +} + +function formatValue(value: ChartValue) { + return value instanceof Date + ? Number.isNaN(+value) + ? 'Invalid Date' + : value.toISOString().replace('T00:00:00.000Z', '') + : typeof value === 'number' + ? value.toLocaleString() + : String(value) +} diff --git a/packages/react-native-charts/src/FocusOverlay.tsx b/packages/react-native-charts/src/FocusOverlay.tsx new file mode 100644 index 00000000..1e2e3869 --- /dev/null +++ b/packages/react-native-charts/src/FocusOverlay.tsx @@ -0,0 +1,64 @@ +import * as React from 'react' +import type { ColorValue } from 'react-native' +import { Circle, Svg } from 'react-native-svg' +import type { ChartPoint, ChartValue } from '@tanstack/charts/types' +import { resolveNativeSolidPaint, type NativePaintResolver } from './paint' + +export interface NativeChartFocusOverlayProps< + TDatum, + TXValue extends ChartValue, + TYValue extends ChartValue, +> { + width: number + height: number + points: readonly ChartPoint[] + color: ColorValue + fill: ColorValue + resolvePaint: NativePaintResolver +} + +export function NativeChartFocusOverlay< + TDatum, + TXValue extends ChartValue, + TYValue extends ChartValue, +>({ + width, + height, + points, + color, + fill, + resolvePaint, +}: NativeChartFocusOverlayProps) { + if (!points.length) return null + return ( + + {points.map((point, index) => ( + + ))} + + ) +} + +const absoluteFill = { + position: 'absolute', + left: 0, + top: 0, + right: 0, + bottom: 0, +} as const diff --git a/packages/react-native-charts/src/SvgScene.test.tsx b/packages/react-native-charts/src/SvgScene.test.tsx new file mode 100644 index 00000000..0ecc1569 --- /dev/null +++ b/packages/react-native-charts/src/SvgScene.test.tsx @@ -0,0 +1,181 @@ +import * as React from 'react' +import { renderToStaticMarkup } from 'react-dom/server' +import { describe, expect, it, vi } from 'vitest' +import type { ChartScene, SceneNode } from '@tanstack/charts/types' +import { resolveNativePaint } from './paint' +import { NativeChartScene, resolveNativeLineJoin } from './SvgScene' + +vi.mock('react-native-svg', () => ({ + Circle: 'circle', + ClipPath: 'clipPath', + Defs: 'defs', + G: 'g', + Line: 'line', + LinearGradient: 'linearGradient', + Path: 'path', + Rect: 'rect', + Stop: 'stop', + Svg: 'svg', + Text: 'text', +})) + +describe('React Native SVG scene renderer', () => { + it('maps every scene primitive, gradients, clipping, and authored paths', () => { + const markup = renderToStaticMarkup( + , + ) + + expect(markup).toContain(' { + expect(resolveNativeLineJoin('arcs')).toBe('round') + expect(resolveNativeLineJoin('miter-clip')).toBe('miter') + expect(resolveNativeLineJoin('round')).toBe('round') + }) +}) + +function scene(): ChartScene { + const nodes: SceneNode[] = [ + { + kind: 'group', + key: 'translated-grid', + translateX: 10, + translateY: 12, + clip: { x: 0, y: 0, width: 80, height: 60 }, + style: { + stroke: 'currentColor', + strokeOpacity: 0.4, + strokeWidth: 3, + strokeDasharray: '2 4', + }, + children: [{ kind: 'rule', key: 'rule', x1: 0, y1: 0, x2: 30, y2: 30 }], + }, + { + kind: 'polyline', + key: 'line', + points: [ + [2, 4], + [20, 30], + ], + style: { fill: 'none', stroke: '#abcdef', lineJoin: 'arcs' }, + }, + { + kind: 'polyline', + key: 'curved-line', + points: [], + path: 'M0,0C10,20,20,20,30,0', + style: { + fill: 'none', + stroke: '#334455', + lineJoin: 'miter-clip', + }, + }, + { + kind: 'area', + key: 'area', + points: [ + [0, 20], + [20, 0], + [40, 20], + ], + style: { fill: 'url(#fill)' }, + }, + { + kind: 'dot', + key: 'dot', + x: 50, + y: 30, + radius: 5, + style: { fill: 'var(--dot, #ff0000)' }, + }, + { + kind: 'rect', + key: 'rect', + x: 60, + y: 10, + width: 20, + height: 30, + radius: 4, + style: { fill: '#00ff00' }, + }, + { + kind: 'label', + key: 'label', + x: 40, + y: 50, + text: 'Native', + anchor: 'middle', + baseline: 'middle', + rotate: -30, + fontSize: 12, + fontWeight: 600, + style: { fill: '#111111' }, + }, + { + kind: 'group', + key: 'inactive-focus', + focus: { match: 'primary', points: [], placement: 'over' }, + children: [ + { + kind: 'dot', + key: 'inactive-focus-dot', + x: 50, + y: 30, + radius: 9, + style: { fill: '#fedcba' }, + }, + ], + }, + ] + return { + width: 100, + height: 60, + margin: { top: 0, right: 0, bottom: 0, left: 0 }, + chart: { x: 0, y: 0, width: 100, height: 60 }, + nodes, + points: [], + scales: {}, + colors: { + type: 'ordinal', + domain: [], + range: [], + map: () => '#2563eb', + }, + gradients: [ + { + id: 'fill', + stops: [ + { offset: 0, color: '#2563eb', opacity: 0.2 }, + { offset: 1, color: '#2563eb' }, + ], + }, + ], + theme: { + foreground: '#111111', + muted: '#666666', + grid: '#999999', + background: '#f8fafc', + palette: ['#2563eb'], + }, + } +} diff --git a/packages/react-native-charts/src/SvgScene.tsx b/packages/react-native-charts/src/SvgScene.tsx new file mode 100644 index 00000000..d0c41631 --- /dev/null +++ b/packages/react-native-charts/src/SvgScene.tsx @@ -0,0 +1,288 @@ +import * as React from 'react' +import type { ColorValue } from 'react-native' +import { + Circle, + ClipPath, + Defs, + G, + Line, + LinearGradient, + Path, + Rect, + Stop, + Svg, + Text, +} from 'react-native-svg' +import type { CommonPathProps, Linejoin } from 'react-native-svg' +import type { + ChartScene, + SceneGroup, + SceneNode, + SceneStyle, +} from '@tanstack/charts/types' +import type { NativePaintResolver } from './paint' + +export interface NativeChartSceneProps { + scene: ChartScene + color: ColorValue + fontFamily?: string + idPrefix: string + resolvePaint: NativePaintResolver +} + +export const NativeChartScene = React.memo(function NativeChartScene({ + scene, + color, + fontFamily, + idPrefix, + resolvePaint, +}: NativeChartSceneProps) { + const gradientIds = React.useMemo( + () => new Set(scene.gradients.map((gradient) => gradient.id)), + [scene.gradients], + ) + const paint = React.useCallback( + (value: string) => + resolveScenePaint(value, gradientIds, idPrefix, resolvePaint, color), + [color, gradientIds, idPrefix, resolvePaint], + ) + + return ( + + {scene.gradients.length ? ( + + {scene.gradients.map((gradient) => ( + + {gradient.stops.map((stop, index) => ( + + ))} + + ))} + + ) : null} + {scene.theme.background === 'transparent' ? null : ( + + )} + {scene.nodes.map((node) => renderSceneNode(node, idPrefix, paint))} + + ) +}) + +function renderSceneNode( + node: SceneNode, + idPrefix: string, + paint: (value: string) => ColorValue, +): React.ReactNode { + if (node.kind === 'group' && node.focus) return null + const style = nativeSceneStyle(node.style, paint) + + switch (node.kind) { + case 'group': + return renderGroup(node, idPrefix, paint, style) + case 'rule': + return ( + + ) + case 'polyline': + return ( + + ) + case 'area': + return ( + + ) + case 'dot': + return ( + + ) + case 'rect': + return ( + + ) + case 'label': + return ( + + {node.text} + + ) + } +} + +function renderGroup( + node: SceneGroup, + idPrefix: string, + paint: (value: string) => ColorValue, + style: ReturnType, +) { + const clipId = node.clip + ? scopedId(idPrefix, `clip-${stableId(node.key)}`) + : undefined + const transform = + node.translateX === undefined && node.translateY === undefined + ? undefined + : `translate(${node.translateX ?? 0} ${node.translateY ?? 0})` + + return ( + + {node.clip && clipId ? ( + + + + + + ) : null} + {node.children.map((child) => renderSceneNode(child, idPrefix, paint))} + + ) +} + +function nativeSceneStyle( + style: SceneStyle | undefined, + paint: (value: string) => ColorValue, +): CommonPathProps & { opacity?: number } { + if (!style) return {} + return { + fill: style.fill === undefined ? undefined : paint(style.fill), + fillOpacity: style.fillOpacity, + stroke: style.stroke === undefined ? undefined : paint(style.stroke), + strokeOpacity: style.strokeOpacity, + strokeWidth: style.strokeWidth, + opacity: style.opacity, + strokeLinecap: style.lineCap, + strokeLinejoin: resolveNativeLineJoin(style.lineJoin), + strokeDasharray: style.strokeDasharray, + } +} + +export function resolveNativeLineJoin( + lineJoin: SceneStyle['lineJoin'], +): Linejoin | undefined { + if (lineJoin === 'arcs') return 'round' + if (lineJoin === 'miter-clip') return 'miter' + return lineJoin +} + +function resolveScenePaint( + value: string, + gradientIds: ReadonlySet, + idPrefix: string, + resolvePaint: NativePaintResolver, + color: ColorValue, +) { + const match = /^url\(#([^)]+)\)$/.exec(value) + const id = match?.[1] + if (id && gradientIds.has(id)) return `url(#${scopedId(idPrefix, id)})` + return resolvePaint(value, { color }) +} + +function pointsPath( + points: readonly (readonly [number, number])[], + close: boolean, +) { + return `${points + .map(([x, y], index) => `${index === 0 ? 'M' : 'L'}${x},${y}`) + .join('')}${close ? 'Z' : ''}` +} + +function scopedId(prefix: string, id: string) { + return prefix ? `${prefix}-${sanitizeId(id)}` : sanitizeId(id) +} + +function sanitizeId(value: string) { + return value.replaceAll(/[^a-zA-Z0-9_-]/g, '') +} + +function stableId(value: string) { + let hash = 2166136261 + for (let index = 0; index < value.length; index += 1) { + hash = Math.imul(hash ^ value.charCodeAt(index), 16777619) + } + return (hash >>> 0).toString(36) +} + +function percent(value: number) { + return `${Math.max(0, Math.min(1, value)) * 100}%` +} diff --git a/packages/react-native-charts/src/Tooltip.test.ts b/packages/react-native-charts/src/Tooltip.test.ts new file mode 100644 index 00000000..ef2b1078 --- /dev/null +++ b/packages/react-native-charts/src/Tooltip.test.ts @@ -0,0 +1,263 @@ +import * as React from 'react' +import { renderToStaticMarkup } from 'react-dom/server' +import type { ColorValue } from 'react-native' +import { describe, expect, it, vi } from 'vitest' +import type { + ChartPoint, + ChartScene, + ChartTooltipAnchorContext, +} from '@tanstack/charts/types' +import { + createNativeTooltipContent, + NativeChartTooltip, + placeNativeTooltip, + resolveNativeTooltipAnchor, +} from './Tooltip' +import type { NativeChartTooltipRenderContext } from './Tooltip' + +vi.mock('react-native', () => ({ + Text: 'span', + View: 'div', +})) + +describe('native tooltip model', () => { + it('builds the supported shared-axis default content', () => { + const points = [point('alpha', 'Alpha', 3), point('beta', 'Beta', 7)] + + expect(createNativeTooltipContent(points, scene(points))).toEqual({ + title: 'x: 1', + rows: [ + { label: 'Alpha', value: '3', color: '#2563eb' }, + { label: 'Beta', value: '7', color: '#f97316' }, + ], + }) + }) + + it('chooses and clamps a placement inside the native layout boundary', () => { + expect( + placeNativeTooltip( + { x: 4, y: 4 }, + { width: 20, height: 10 }, + { width: 100, height: 60 }, + 'top', + 10, + ), + ).toEqual({ left: 8, top: 8, placement: 'top' }) + }) + + it('preserves an intentional null custom body', () => { + const points = [point('alpha', 'Alpha', 3)] + const markup = renderToStaticMarkup( + React.createElement(NativeChartTooltip, { + scene: scene(points), + width: 100, + height: 60, + points, + pointer: null, + focusSource: 'programmatic', + pinned: false, + color: '#111827', + resolvePaint: (value) => value, + dismiss: vi.fn(), + render: () => null, + }), + ) + + expect(markup).not.toContain(' { + const points = [point('alpha', 'Alpha', 3), point('beta', 'Beta', 7)] + const currentScene = scene(points) + + expect( + resolveNativeTooltipAnchor( + points[0]!, + points, + currentScene, + null, + 'keyboard', + true, + { anchor: { x: 'plot-center', y: 'plot-top' } }, + ), + ).toEqual({ x: 50, y: 0 }) + + let context: ChartTooltipAnchorContext | undefined + expect( + resolveNativeTooltipAnchor( + points[0]!, + points, + currentScene, + null, + 'keyboard', + true, + { + anchor: (_focusedPoints, nextContext) => { + context = nextContext + return { x: 75, y: 25 } + }, + }, + ), + ).toEqual({ x: 75, y: 25 }) + expect(context).toEqual({ + focus: { + primary: points[0], + group: points, + source: 'keyboard', + pinned: true, + }, + pointer: null, + plot: currentScene.chart, + surface: { width: 100, height: 60 }, + scales: currentScene.scales, + }) + }) + + it('keeps the focused point stable when display rows are sorted', () => { + const beta = point('beta', 'Beta', 7) + const alpha = point('alpha', 'Alpha', 3) + const focusedPoints = [beta, alpha] + const currentScene = scene(focusedPoints) + const format = vi.fn( + (focused: ChartPoint) => focused.key, + ) + const anchor = vi.fn( + ( + _points: readonly ChartPoint[], + _context: ChartTooltipAnchorContext, + ) => ({ x: 75, y: 25 }), + ) + let renderedPoints: + readonly ChartPoint[] | undefined + + renderToStaticMarkup( + React.createElement(NativeChartTooltip, { + scene: currentScene, + width: 100, + height: 60, + points: focusedPoints, + pointer: null, + focusSource: 'keyboard', + options: { anchor, format }, + pinned: true, + color: '#111827', + resolvePaint: (value) => value, + dismiss: vi.fn(), + render: (context) => { + renderedPoints = context.points + return null + }, + }), + ) + + expect(renderedPoints).toEqual([alpha, beta]) + expect(format).toHaveBeenCalledWith(beta) + expect(anchor).toHaveBeenCalledWith([alpha, beta], { + focus: { + primary: beta, + group: focusedPoints, + source: 'keyboard', + pinned: true, + }, + pointer: null, + plot: currentScene.chart, + surface: { width: 100, height: 60 }, + scales: currentScene.scales, + }) + }) + + it('orders grouped points visually unless color-domain order is requested', () => { + const right = point('alpha', 'Alpha', 4, { x: 80, xValue: 8, y: 20 }) + const left = point('beta', 'Beta', 4, { x: 20, xValue: 2, y: 20 }) + const focusedPoints = [right, left] + const currentScene = scene(focusedPoints) + const visualRender = vi.fn< + ( + context: NativeChartTooltipRenderContext, + ) => React.ReactNode + >(() => null) + const colorRender = vi.fn< + ( + context: NativeChartTooltipRenderContext, + ) => React.ReactNode + >(() => null) + const sharedProps = { + scene: currentScene, + width: 100, + height: 60, + points: focusedPoints, + pointer: null, + focusSource: 'keyboard' as const, + pinned: true, + color: '#111827', + resolvePaint: (value: ColorValue) => value, + dismiss: vi.fn(), + } + + renderToStaticMarkup( + React.createElement(NativeChartTooltip, { + ...sharedProps, + render: visualRender, + }), + ) + renderToStaticMarkup( + React.createElement(NativeChartTooltip, { + ...sharedProps, + options: { sort: 'color-domain' }, + render: colorRender, + }), + ) + + expect(visualRender.mock.calls[0]?.[0].points).toEqual([left, right]) + expect(colorRender.mock.calls[0]?.[0].points).toEqual([right, left]) + }) +}) + +function point( + key: string, + groupLabel: string, + yValue: number, + position: { x?: number; xValue?: number; y?: number } = {}, +): ChartPoint { + return { + key, + markId: 'series', + group: key, + groupLabel, + datum: null, + datumIndex: 0, + xValue: position.xValue ?? 1, + yValue, + x: position.x ?? 20, + y: position.y ?? yValue * 4, + color: key === 'alpha' ? '#2563eb' : '#f97316', + } +} + +function scene( + points: readonly ChartPoint[], +): ChartScene { + return { + width: 100, + height: 60, + margin: { top: 0, right: 0, bottom: 0, left: 0 }, + chart: { x: 0, y: 0, width: 100, height: 60 }, + nodes: [], + points, + scales: {}, + colors: { + type: 'ordinal', + domain: ['alpha', 'beta'], + range: ['#2563eb', '#f97316'], + map: (value) => (value === 'beta' ? '#f97316' : '#2563eb'), + }, + gradients: [], + theme: { + foreground: '#111827', + muted: '#6b7280', + grid: '#d1d5db', + background: 'transparent', + palette: ['#2563eb', '#f97316'], + }, + } +} diff --git a/packages/react-native-charts/src/Tooltip.tsx b/packages/react-native-charts/src/Tooltip.tsx new file mode 100644 index 00000000..ba79ce0a --- /dev/null +++ b/packages/react-native-charts/src/Tooltip.tsx @@ -0,0 +1,608 @@ +import * as React from 'react' +import type { + ColorValue, + LayoutChangeEvent, + TextStyle, + ViewStyle, +} from 'react-native' +import { Text, View } from 'react-native' +import type { + ChartPoint, + ChartFocusSource, + ChartScene, + ChartTooltipContent, + ChartTooltipContentContext, + ChartTooltipExtensionToken, + ChartTooltipOptions, + ChartTooltipPlacement, + ChartTooltipPosition, + ChartTooltipXAnchor, + ChartTooltipYAnchor, + ChartValue, +} from '@tanstack/charts/types' +import { resolveNativeSolidPaint, type NativePaintResolver } from './paint' + +export interface NativeChartTooltipRenderContext< + TDatum, + TXValue extends ChartValue, + TYValue extends ChartValue, +> { + points: readonly ChartPoint[] + content: ChartTooltipContent | string + pinned: boolean + dismiss: () => void + defaultBody: React.ReactNode +} + +export interface NativeChartTooltipProps< + TDatum, + TXValue extends ChartValue, + TYValue extends ChartValue, +> { + scene: ChartScene + width: number + height: number + points: readonly ChartPoint[] + pointer: ChartTooltipPosition | null + focusSource: ChartFocusSource + options?: ChartTooltipOptions + pinned: boolean + color: ColorValue + resolvePaint: NativePaintResolver + dismiss: () => void + render?: ( + context: NativeChartTooltipRenderContext, + ) => React.ReactNode +} + +export function NativeChartTooltip< + TDatum, + TXValue extends ChartValue, + TYValue extends ChartValue, +>({ + scene, + width, + height, + points: unorderedPoints, + pointer, + focusSource, + options, + pinned, + color, + resolvePaint, + dismiss, + render, +}: NativeChartTooltipProps) { + const [size, setSize] = React.useState({ width: 0, height: 0 }) + const points = React.useMemo( + () => orderTooltipPoints(unorderedPoints, scene, options?.sort), + [options?.sort, scene, unorderedPoints], + ) + const point = unorderedPoints[0] + if (!point) return null + const content = createNativeTooltipContent(points, scene, options, point) + const sceneAnchor = resolveNativeTooltipAnchor( + point, + points, + scene, + pointer, + focusSource, + pinned, + options, + unorderedPoints, + ) + const anchor = { + x: (sceneAnchor.x / scene.width) * width, + y: (sceneAnchor.y / scene.height) * height, + } + const position = placeNativeTooltip( + anchor, + size, + { width, height }, + options?.placement, + options?.offset, + ) + const defaultBody = ( + + ) + const body = render + ? render({ points, content, pinned, dismiss, defaultBody }) + : defaultBody + const accessibilityLabel = tooltipAccessibilityLabel(content) + const handleLayout = (event: LayoutChangeEvent) => { + const next = event.nativeEvent.layout + if (next.width !== size.width || next.height !== size.height) { + setSize({ width: next.width, height: next.height }) + } + } + + return ( + pinned} + pointerEvents={pinned ? 'auto' : 'none'} + style={[tooltipStyle, { left: position.left, top: position.top }]} + > + {body} + + ) +} + +export type NativeChartTooltipComponent = typeof NativeChartTooltip + +export interface NativeChartTooltipExtension extends ChartTooltipExtensionToken { + readonly __chartExtensionType: 'tooltip' + readonly __nativeChartHost: 'react-native' + create: () => NativeChartTooltipComponent +} + +export const tooltip: NativeChartTooltipExtension = { + id: 'react-native-tooltip', + __chartExtensionType: 'tooltip', + __nativeChartHost: 'react-native', + create: () => NativeChartTooltip, +} + +function DefaultNativeTooltipBody({ + content, + color, + resolvePaint, +}: { + content: ChartTooltipContent | string + color: ColorValue + resolvePaint: NativePaintResolver +}) { + if (typeof content === 'string') { + return {content} + } + return ( + + {content.title ? ( + + {content.color ? ( + + ) : null} + {content.title} + + ) : null} + {content.rows.map((row, index) => ( + + + + {row.label} + + + {row.value} + + + ))} + + ) +} + +export function createNativeTooltipContent< + TDatum, + TXValue extends ChartValue, + TYValue extends ChartValue, +>( + points: readonly ChartPoint[], + scene: ChartScene, + options?: ChartTooltipOptions, + primaryPoint?: ChartPoint, +): ChartTooltipContent | string { + const point = points[0] + if (!point) return { rows: [] } + const context = createTooltipContentContext(scene) + const content = options?.content?.(points, context) + if (content !== undefined) return content + const formatted = + options?.formatGroup?.(points) ?? options?.format?.(primaryPoint ?? point) + if (formatted !== undefined) return formatted + + const sharedX = + points.length > 1 && + points.every((candidate) => chartValueEqual(candidate.xValue, point.xValue)) + if (sharedX) { + return { + title: `${context.xLabel}: ${context.formatX(point.xValue)}`, + rows: points.map((candidate) => ({ + label: candidate.groupLabel, + value: context.formatY(candidate.yValue), + color: candidate.color, + })), + } + } + + return { + title: point.group == null ? undefined : point.groupLabel, + color: point.group == null ? undefined : point.color, + rows: [ + { label: context.xLabel, value: context.formatX(point.xValue) }, + { label: context.yLabel, value: context.formatY(point.yValue) }, + ], + } +} + +function createTooltipContentContext( + scene: ChartScene, +): ChartTooltipContentContext { + return { + xLabel: findSceneLabel(scene, 'x-label') ?? 'x', + yLabel: findSceneLabel(scene, 'y-label') ?? 'y', + formatX: formatValue, + formatY: formatValue, + } +} + +function orderTooltipPoints< + TDatum, + TXValue extends ChartValue, + TYValue extends ChartValue, +>( + points: readonly ChartPoint[], + scene: ChartScene, + sort: ChartTooltipOptions['sort'], +) { + if (sort === 'focus') return [...points] + if (typeof sort === 'function') return [...points].sort(sort) + if (sort !== 'color-domain') { + const first = points[0] + const sharedX = + first !== undefined && + points.every((point) => chartValueEqual(point.xValue, first.xValue)) + const sharedY = + first !== undefined && + points.every((point) => chartValueEqual(point.yValue, first.yValue)) + return [...points].sort((left, right) => + sharedY && !sharedX + ? left.x - right.x || left.y - right.y + : left.y - right.y || left.x - right.x, + ) + } + return [...points].sort( + (left, right) => + colorOrder(scene, left.group) - colorOrder(scene, right.group), + ) +} + +function colorOrder(scene: ChartScene, group: ChartPoint['group']) { + const index = group == null ? -1 : scene.colors.domain.indexOf(group) + return index < 0 ? Number.MAX_SAFE_INTEGER : index +} + +function findSceneLabel(scene: ChartScene, key: string) { + const axes = scene.nodes.find( + (node) => node.kind === 'group' && node.key === 'axes', + ) + if (axes?.kind !== 'group') return undefined + const label = axes.children.find((node) => node.key === key) + return label?.kind === 'label' ? label.text : undefined +} + +export function resolveNativeTooltipAnchor< + TDatum, + TXValue extends ChartValue, + TYValue extends ChartValue, +>( + point: ChartPoint, + points: readonly ChartPoint[], + scene: ChartScene, + pointer: ChartTooltipPosition | null, + focusSource: ChartFocusSource, + pinned: boolean, + options?: ChartTooltipOptions, + focusPoints: readonly ChartPoint[] = points, +): ChartTooltipPosition { + const fallback = { x: point.x, y: point.y } + const anchor = options?.anchor ?? 'point' + if (anchor === 'point') return fallback + if (anchor === 'pointer') return pointer ?? fallback + if (anchor === 'group-center') { + const x = points.map((candidate) => candidate.x) + const y = points.map((candidate) => candidate.y) + return { + x: (Math.min(...x) + Math.max(...x)) / 2, + y: (Math.min(...y) + Math.max(...y)) / 2, + } + } + if (typeof anchor === 'object') { + return { + x: resolveTooltipCoordinate( + 'x', + anchor.x, + point, + points, + scene, + pointer, + fallback.x, + ), + y: resolveTooltipCoordinate( + 'y', + anchor.y, + point, + points, + scene, + pointer, + fallback.y, + ), + } + } + const resolved = anchor(points, { + focus: { + primary: point, + group: focusPoints, + source: focusSource, + pinned, + }, + pointer, + plot: scene.chart, + surface: { width: scene.width, height: scene.height }, + scales: scene.scales, + }) + return resolved && Number.isFinite(resolved.x) && Number.isFinite(resolved.y) + ? resolved + : fallback +} + +function resolveTooltipCoordinate< + TDatum, + TXValue extends ChartValue, + TYValue extends ChartValue, +>( + axis: 'x' | 'y', + source: ChartTooltipXAnchor | ChartTooltipYAnchor, + point: ChartPoint, + points: readonly ChartPoint[], + scene: ChartScene, + pointer: ChartTooltipPosition | null, + fallback: number, +): number { + if (source === 'point') return axis === 'x' ? point.x : point.y + if (source === 'pointer') return pointer?.[axis] ?? fallback + if (source === 'value') { + const value = axis === 'x' ? point.xValue : point.yValue + const position = scene.scales[axis]?.map(value) + return position !== undefined && Number.isFinite(position) + ? position + : fallback + } + if (source === 'group-center') { + let minimum = axis === 'x' ? point.x : point.y + let maximum = minimum + for (const candidate of points) { + const position = axis === 'x' ? candidate.x : candidate.y + minimum = Math.min(minimum, position) + maximum = Math.max(maximum, position) + } + return (minimum + maximum) / 2 + } + const plot = scene.chart + if (axis === 'x') { + if (source === 'plot-left') return plot.x + if (source === 'plot-center') return plot.x + plot.width / 2 + if (source === 'plot-right') return plot.x + plot.width + } else { + if (source === 'plot-top') return plot.y + if (source === 'plot-center') return plot.y + plot.height / 2 + if (source === 'plot-bottom') return plot.y + plot.height + } + return fallback +} + +export function placeNativeTooltip( + anchor: ChartTooltipPosition, + tooltip: { width: number; height: number }, + boundary: { width: number; height: number }, + placement: + | 'auto' + | ChartTooltipPlacement + | readonly ChartTooltipPlacement[] + | undefined, + offset: number | undefined, +) { + const edge = 8 + const gap = + offset !== undefined && Number.isFinite(offset) ? Math.max(0, offset) : 10 + const placements = + placement === undefined || placement === 'auto' + ? defaultTooltipPlacements + : Array.isArray(placement) + ? placement.length + ? placement + : defaultTooltipPlacements + : [placement as ChartTooltipPlacement] + const candidates = placements.map((candidate) => + tooltipPlacement(candidate, anchor, tooltip, gap), + ) + let selected = candidates[0]! + let selectedOverflow = overflow(selected, tooltip, boundary, edge) + for (const candidate of candidates) { + const candidateOverflow = overflow(candidate, tooltip, boundary, edge) + if (candidateOverflow === 0) { + selected = candidate + break + } + if (candidateOverflow < selectedOverflow) { + selected = candidate + selectedOverflow = candidateOverflow + } + } + return { + left: clamp( + selected.left, + edge, + Math.max(edge, boundary.width - edge - tooltip.width), + ), + top: clamp( + selected.top, + edge, + Math.max(edge, boundary.height - edge - tooltip.height), + ), + placement: selected.placement, + } +} + +const defaultTooltipPlacements: readonly ChartTooltipPlacement[] = [ + 'top', + 'bottom', + 'right', + 'left', +] + +function tooltipPlacement( + placement: ChartTooltipPlacement, + anchor: ChartTooltipPosition, + tooltip: { width: number; height: number }, + gap: number, +) { + const xDirection = + placement.endsWith('right') || placement === 'right' + ? 1 + : placement.endsWith('left') || placement === 'left' + ? -1 + : 0 + const yDirection = + placement.startsWith('bottom') || placement === 'bottom' + ? 1 + : placement.startsWith('top') || placement === 'top' + ? -1 + : 0 + return { + placement, + left: anchor.x + ((xDirection - 1) * tooltip.width) / 2 + xDirection * gap, + top: anchor.y + ((yDirection - 1) * tooltip.height) / 2 + yDirection * gap, + } +} + +function overflow( + position: { left: number; top: number }, + tooltip: { width: number; height: number }, + boundary: { width: number; height: number }, + edge: number, +) { + return ( + Math.max(0, edge - position.left) + + Math.max(0, position.left + tooltip.width + edge - boundary.width) + + Math.max(0, edge - position.top) + + Math.max(0, position.top + tooltip.height + edge - boundary.height) + ) +} + +function tooltipAccessibilityLabel(content: ChartTooltipContent | string) { + return typeof content === 'string' + ? content + : [ + content.title, + ...content.rows.map((row) => `${row.label}: ${row.value}`), + ] + .filter(Boolean) + .join('\n') +} + +function formatValue(value: ChartValue) { + return value instanceof Date + ? Number.isNaN(+value) + ? 'Invalid Date' + : value.toISOString().replace('T00:00:00.000Z', '') + : typeof value === 'number' + ? value.toLocaleString() + : String(value) +} + +function chartValueEqual(left: ChartValue, right: ChartValue) { + return left instanceof Date && right instanceof Date + ? left.getTime() === right.getTime() + : Object.is(left, right) +} + +function clamp(value: number, minimum: number, maximum: number) { + return Math.max(minimum, Math.min(maximum, value)) +} + +const tooltipStyle: ViewStyle = { + position: 'absolute', + zIndex: 1, + maxWidth: '80%', + paddingHorizontal: 9, + paddingVertical: 7, + borderWidth: 1, + borderColor: 'rgba(17, 24, 39, 0.16)', + borderRadius: 7, + backgroundColor: '#ffffff', + shadowColor: '#000000', + shadowOffset: { width: 0, height: 6 }, + shadowOpacity: 0.14, + shadowRadius: 12, + elevation: 4, +} + +const tooltipTextStyle = { + color: '#111827', + fontSize: 12, + fontWeight: '500', +} as const + +const titleStyle = { + flexDirection: 'row', + alignItems: 'center', + gap: 6, + marginBottom: 4, +} as const + +const titleTextStyle = { + color: '#111827', + fontSize: 12, + fontWeight: '700', +} as const + +const rowStyle = { + flexDirection: 'row', + alignItems: 'center', + gap: 6, +} as const + +const swatchStyle = { + width: 9, + height: 9, + borderRadius: 2, +} as const + +const rowLabelStyle = { + flexGrow: 1, + flexShrink: 1, + color: '#374151', + fontSize: 12, +} as const + +const rowValueStyle: TextStyle = { + color: '#111827', + fontSize: 12, + fontVariant: ['tabular-nums'], +} diff --git a/packages/react-native-charts/src/index.native.ts b/packages/react-native-charts/src/index.native.ts new file mode 100644 index 00000000..df7053ef --- /dev/null +++ b/packages/react-native-charts/src/index.native.ts @@ -0,0 +1 @@ +export * from './index' diff --git a/packages/react-native-charts/src/index.ts b/packages/react-native-charts/src/index.ts new file mode 100644 index 00000000..0d15583a --- /dev/null +++ b/packages/react-native-charts/src/index.ts @@ -0,0 +1,5 @@ +export { Chart } from './Chart' +export type { ChartProps, NativeChartRenderContext } from './Chart' +export type { NativeChartTooltipRenderContext } from './Tooltip' +export type { NativePaintContext, NativePaintResolver } from './paint' +export { resolveNativePaint } from './paint' diff --git a/packages/react-native-charts/src/interaction.test.ts b/packages/react-native-charts/src/interaction.test.ts new file mode 100644 index 00000000..0710d8a0 --- /dev/null +++ b/packages/react-native-charts/src/interaction.test.ts @@ -0,0 +1,125 @@ +import { describe, expect, it } from 'vitest' +import type { + ChartDefinition, + ChartPoint, + ChartScene, +} from '@tanstack/charts/types' +import { adjacentFocusPoint, createNativeChartFocusModel } from './interaction' + +interface Datum { + id: string +} + +describe('native focus model', () => { + it('reuses grouped focus semantics and native accessibility order', () => { + const points = [ + point('alpha-1', 'alpha', 0, 10, 10, 1, 2), + point('beta-1', 'beta', 1, 10, 30, 1, 3), + point('alpha-2', 'alpha', 2, 40, 20, 2, 4), + ] + const model = createNativeChartFocusModel( + chartScene(points), + definition({ focus: 'group-x', maxFocusDistance: 20 }), + ) + + expect(model.resolve(11, 29).map((candidate) => candidate.key)).toEqual([ + 'beta-1', + 'alpha-1', + ]) + expect(adjacentFocusPoint(model, null, 1)?.key).toBe('alpha-1') + expect(adjacentFocusPoint(model, model.navigation[0] ?? null, 1)?.key).toBe( + 'alpha-2', + ) + }) + + it('honors a supplied spatial index for nearest focus', () => { + const points = [point('alpha', 'alpha', 0, 10, 10, 1, 2)] + let calls = 0 + const model = createNativeChartFocusModel( + chartScene(points), + definition({ + spatialIndex: (indexedPoints) => ({ + findNearest() { + calls += 1 + return indexedPoints[0] ?? null + }, + }), + }), + ) + + expect(model.resolve(500, 500)[0]?.key).toBe('alpha') + expect(calls).toBe(1) + }) + + it('restores duplicate keys by datum identity after a scene update', () => { + const datum = { id: 'same' } + const previous = point('duplicate', 'alpha', 0, 10, 10, 1, 2, datum) + const other = point('duplicate', 'alpha', 0, 20, 20, 2, 3, { id: 'same' }) + const restored = point('duplicate', 'alpha', 1, 30, 30, 3, 4, datum) + const model = createNativeChartFocusModel( + chartScene([other, restored]), + definition({}), + ) + + expect(model.restore(previous)).toBe(restored) + }) +}) + +function definition( + options: Partial>, +): ChartDefinition { + return { marks: [], ...options } +} + +function point( + key: string, + group: string, + datumIndex: number, + x: number, + y: number, + xValue: number, + yValue: number, + datum: Datum = { id: key }, +): ChartPoint { + return { + key, + markId: 'series', + group, + groupLabel: group, + datum, + datumIndex, + xValue, + yValue, + x, + y, + color: '#2563eb', + } +} + +function chartScene( + points: readonly ChartPoint[], +): ChartScene { + return { + width: 100, + height: 60, + margin: { top: 0, right: 0, bottom: 0, left: 0 }, + chart: { x: 0, y: 0, width: 100, height: 60 }, + nodes: [], + points, + scales: {}, + colors: { + type: 'ordinal', + domain: ['alpha', 'beta'], + range: ['#2563eb', '#f97316'], + map: (value) => (value === 'beta' ? '#f97316' : '#2563eb'), + }, + gradients: [], + theme: { + foreground: '#111827', + muted: '#6b7280', + grid: '#d1d5db', + background: 'transparent', + palette: ['#2563eb', '#f97316'], + }, + } +} diff --git a/packages/react-native-charts/src/interaction.ts b/packages/react-native-charts/src/interaction.ts new file mode 100644 index 00000000..180d5e9c --- /dev/null +++ b/packages/react-native-charts/src/interaction.ts @@ -0,0 +1,205 @@ +import { + focusNearestX, + focusNearestY, + focusX, + focusY, +} from '@tanstack/charts/focus' +import { findNearestPoint } from '@tanstack/charts/scene' +import type { + ChartDefinition, + ChartFocusMode, + ChartFocusStrategy, + ChartPoint, + ChartScene, + ChartValue, +} from '@tanstack/charts/types' + +export interface NativeChartFocusModel< + TDatum, + TXValue extends ChartValue, + TYValue extends ChartValue, +> { + resolve: ( + x: number, + y: number, + ) => readonly ChartPoint[] + group: ( + point: ChartPoint, + ) => readonly ChartPoint[] + navigation: readonly ChartPoint[] + restore: ( + point: ChartPoint, + ) => ChartPoint | null +} + +export function createNativeChartFocusModel< + TDatum, + TXValue extends ChartValue, + TYValue extends ChartValue, +>( + scene: ChartScene, + definition: ChartDefinition, +): NativeChartFocusModel { + const strategy = resolveFocusStrategy(definition.focus) + const spatialIndex = definition.spatialIndex?.(scene.points) + const maxDistance = definition.maxFocusDistance ?? 48 + const navigation = + strategy?.navigation(scene.points) ?? sceneOrder(scene.points) + + return { + resolve(x, y) { + if (strategy) { + return strategy.resolve(scene.points, x, y, maxDistance) + } + const point = spatialIndex + ? spatialIndex.findNearest(x, y, maxDistance) + : findNearestPoint(scene, x, y, maxDistance) + return point ? [point] : [] + }, + group(point) { + return strategy?.group(scene.points, point) ?? [point] + }, + navigation, + restore(point) { + return restoreFocusedPoint(scene.points, point) + }, + } +} + +export function adjacentFocusPoint< + TDatum, + TXValue extends ChartValue, + TYValue extends ChartValue, +>( + model: NativeChartFocusModel, + current: ChartPoint | null, + direction: -1 | 1, +) { + const currentIndex = current + ? model.navigation.findIndex((point) => samePointIdentity(point, current)) + : -1 + const nextIndex = + currentIndex < 0 + ? direction > 0 + ? 0 + : model.navigation.length - 1 + : Math.max( + 0, + Math.min(model.navigation.length - 1, currentIndex + direction), + ) + return model.navigation[nextIndex] ?? null +} + +export function samePointIdentity< + TDatum, + TXValue extends ChartValue, + TYValue extends ChartValue, +>( + left: ChartPoint | null, + right: ChartPoint | null, +) { + return ( + left === right || + (left !== null && + right !== null && + left.key === right.key && + left.markId === right.markId && + left.datumIndex === right.datumIndex) + ) +} + +export function samePointReferences< + TDatum, + TXValue extends ChartValue, + TYValue extends ChartValue, +>( + left: readonly ChartPoint[], + right: readonly ChartPoint[], +) { + return ( + left.length === right.length && + left.every((point, index) => point === right[index]) + ) +} + +function resolveFocusStrategy< + TDatum, + TXValue extends ChartValue, + TYValue extends ChartValue, +>( + focus: ChartFocusMode | undefined, +): ChartFocusStrategy | undefined { + if (typeof focus !== 'string') return focus + switch (focus) { + case 'nearest-x': + return focusNearestX + case 'nearest-y': + return focusNearestY + case 'group-x': + return focusX + case 'group-y': + return focusY + case 'nearest': + return undefined + } +} + +function sceneOrder< + TDatum, + TXValue extends ChartValue, + TYValue extends ChartValue, +>(points: readonly ChartPoint[]) { + return points + .map((point, index) => ({ point, index })) + .sort( + (left, right) => + left.point.x - right.point.x || + left.point.y - right.point.y || + left.index - right.index, + ) + .map(({ point }) => point) +} + +function restoreFocusedPoint< + TDatum, + TXValue extends ChartValue, + TYValue extends ChartValue, +>( + points: readonly ChartPoint[], + previous: ChartPoint, +) { + const matches = points.filter((point) => point.key === previous.key) + if (matches.length < 2) return matches[0] ?? null + + const datumType = typeof previous.datum + const hasReferenceIdentity = + previous.datum !== null && + (datumType === 'object' || datumType === 'function') + if (hasReferenceIdentity) { + const sameDatum = matches.find((point) => point.datum === previous.datum) + if (sameDatum) return sameDatum + } + + return ( + matches.find( + (point) => + point.markId === previous.markId && + Object.is(point.group, previous.group) && + chartValueEqual(point.xValue, previous.xValue) && + chartValueEqual(point.yValue, previous.yValue), + ) ?? + matches.find( + (point) => + point.markId === previous.markId && + point.datumIndex === previous.datumIndex, + ) ?? + matches[0] ?? + null + ) +} + +function chartValueEqual(left: ChartValue, right: ChartValue) { + return left instanceof Date && right instanceof Date + ? left.getTime() === right.getTime() + : Object.is(left, right) +} diff --git a/packages/react-native-charts/src/paint.test.ts b/packages/react-native-charts/src/paint.test.ts new file mode 100644 index 00000000..6cce3707 --- /dev/null +++ b/packages/react-native-charts/src/paint.test.ts @@ -0,0 +1,43 @@ +import { describe, expect, it } from 'vitest' +import { resolveNativePaint, resolveNativeSolidPaint } from './paint' + +describe('native paint resolution', () => { + it('resolves the browser-backed default theme tokens', () => { + const context = { color: '#102030' } + + expect(resolveNativePaint('currentColor', context)).toBe('#102030') + expect(resolveNativePaint('CanvasText', context)).toBe('#102030') + expect(resolveNativePaint('var(--ts-chart-1, #2563eb)', context)).toBe( + '#2563eb', + ) + expect( + resolveNativePaint( + 'var(--app-chart, var(--ts-chart-2, rgb(10, 20, 30)))', + context, + ), + ).toBe('rgb(10, 20, 30)') + }) + + it('uses the host color when an authored CSS variable has no fallback', () => { + expect(resolveNativePaint('var(--app-chart)', { color: '#abcdef' })).toBe( + '#abcdef', + ) + }) + + it('preserves concrete native paints and resource references', () => { + const context = { color: '#102030' } + + expect(resolveNativePaint('transparent', context)).toBe('transparent') + expect(resolveNativePaint('#fff', context)).toBe('#fff') + expect(resolveNativePaint('url(#gradient)', context)).toBe('url(#gradient)') + }) + + it('falls back to the host color where native views cannot use SVG resources', () => { + expect( + resolveNativeSolidPaint('url(#gradient)', { color: '#102030' }), + ).toBe('#102030') + expect(resolveNativeSolidPaint('#abcdef', { color: '#102030' })).toBe( + '#abcdef', + ) + }) +}) diff --git a/packages/react-native-charts/src/paint.ts b/packages/react-native-charts/src/paint.ts new file mode 100644 index 00000000..e382df8b --- /dev/null +++ b/packages/react-native-charts/src/paint.ts @@ -0,0 +1,48 @@ +import type { ColorValue } from 'react-native' + +export interface NativePaintContext { + color: ColorValue +} + +export type NativePaintResolver = ( + paint: string, + context: NativePaintContext, +) => ColorValue + +export function resolveNativePaint( + paint: string, + { color }: NativePaintContext, +): ColorValue { + const value = paint.trim() + if (value === 'currentColor' || value === 'CanvasText') return color + if (!value.startsWith('var(') || !value.endsWith(')')) return value + + const fallback = cssVariableFallback(value) + return fallback ? resolveNativePaint(fallback, { color }) : color +} + +export function resolveNativeSolidPaint( + paint: string, + context: NativePaintContext, + resolvePaint: NativePaintResolver = resolveNativePaint, +): ColorValue { + const resolved = resolvePaint(paint, context) + return typeof resolved === 'string' && + resolved.trim().startsWith('url(') && + resolved.trim().endsWith(')') + ? context.color + : resolved +} + +function cssVariableFallback(value: string) { + let depth = 0 + for (let index = 4; index < value.length - 1; index += 1) { + const character = value[index] + if (character === '(') depth += 1 + if (character === ')') depth -= 1 + if (character === ',' && depth === 0) { + return value.slice(index + 1, -1).trim() + } + } + return undefined +} diff --git a/packages/react-native-charts/src/tooltip-entry.native.ts b/packages/react-native-charts/src/tooltip-entry.native.ts new file mode 100644 index 00000000..5a005128 --- /dev/null +++ b/packages/react-native-charts/src/tooltip-entry.native.ts @@ -0,0 +1 @@ +export * from './tooltip-entry' diff --git a/packages/react-native-charts/src/tooltip-entry.ts b/packages/react-native-charts/src/tooltip-entry.ts new file mode 100644 index 00000000..432e11b5 --- /dev/null +++ b/packages/react-native-charts/src/tooltip-entry.ts @@ -0,0 +1,7 @@ +export { tooltip } from './Tooltip' +export type { + NativeChartTooltipComponent, + NativeChartTooltipExtension, + NativeChartTooltipProps, + NativeChartTooltipRenderContext, +} from './Tooltip' diff --git a/packages/react-native-charts/tsconfig.json b/packages/react-native-charts/tsconfig.json new file mode 100644 index 00000000..136f244f --- /dev/null +++ b/packages/react-native-charts/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "lib": ["ES2022"], + "types": ["react", "react-native"] + }, + "include": ["src/**/*.ts", "src/**/*.tsx"], + "exclude": ["src/**/*.test.ts", "src/**/*.test.tsx"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6b46f0e9..607e1af4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -36,7 +36,7 @@ importers: version: link:packages/react '@sveltejs/vite-plugin-svelte': specifier: ^7.1.2 - version: 7.2.0(svelte@5.56.8)(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0)) + version: 7.2.0(svelte@5.56.8)(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0)) '@tanstack/charts': specifier: workspace:* version: link:packages/charts-core @@ -52,6 +52,9 @@ importers: '@tanstack/react-charts': specifier: workspace:* version: link:packages/react-charts + '@tanstack/react-native-charts': + specifier: workspace:* + version: link:packages/react-native-charts '@types/d3-array': specifier: ^3.2.2 version: 3.2.2 @@ -129,7 +132,7 @@ importers: version: 1.0.5 '@vitejs/plugin-react': specifier: ^6.0.1 - version: 6.0.4(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0)) + version: 6.0.4(babel-plugin-react-compiler@1.0.0)(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0)) chart.js: specifier: 4.5.1 version: 4.5.1 @@ -207,7 +210,7 @@ importers: version: 22.7.5(debug@4.4.3(supports-color@10.2.2)) octane: specifier: 0.1.13 - version: 0.1.13(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0)) + version: 0.1.13(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0)) playwright: specifier: 1.62.0 version: 1.62.0 @@ -243,13 +246,13 @@ importers: version: 3.0.1 vite: specifier: ^8.0.16 - version: 8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0) + version: 8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0) vite-plugin-solid: specifier: ^2.11.12 - version: 2.11.14(solid-js@1.9.14)(supports-color@10.2.2)(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0)) + version: 2.11.14(solid-js@1.9.14)(supports-color@10.2.2)(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0)) vitest: specifier: ^4.1.9 - version: 4.1.10(@types/node@25.9.5)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0)) + version: 4.1.10(@types/node@25.9.5)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0)) world-atlas: specifier: 2.0.2 version: 2.0.2 @@ -257,6 +260,40 @@ importers: specifier: 4.103.0 version: 4.103.0 + examples/charts-expo: + dependencies: + '@tanstack/charts': + specifier: workspace:* + version: link:../../packages/charts-core + '@tanstack/react-native-charts': + specifier: workspace:* + version: link:../../packages/react-native-charts + d3-scale: + specifier: 4.0.2 + version: 4.0.2 + expo: + specifier: ~57.0.9 + version: 57.0.9(@babel/core@7.29.7(supports-color@10.2.2))(@expo/dom-webview@57.0.1)(react-dom@19.2.3(react@19.2.3))(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(react@19.2.3)(supports-color@10.2.2)(typescript@6.0.3) + react: + specifier: 19.2.3 + version: 19.2.3 + react-native: + specifier: 0.86.2 + version: 0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2) + react-native-svg: + specifier: 15.15.4 + version: 15.15.4(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(react@19.2.3) + devDependencies: + '@types/d3-scale': + specifier: ^4.0.9 + version: 4.0.9 + '@types/react': + specifier: ~19.2.2 + version: 19.2.17 + typescript: + specifier: ~6.0.3 + version: 6.0.3 + examples/charts-octane: dependencies: '@charts-poc/demo-data': @@ -279,7 +316,7 @@ importers: version: 3.2.0 octane: specifier: 0.1.13 - version: 0.1.13(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0)) + version: 0.1.13(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0)) devDependencies: '@types/d3-array': specifier: ^3.2.2 @@ -292,7 +329,7 @@ importers: version: 3.1.8 vite: specifier: ^8.0.16 - version: 8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0) + version: 8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0) examples/charts-react: dependencies: @@ -332,10 +369,65 @@ importers: version: 3.1.8 '@vitejs/plugin-react': specifier: ^6.0.1 - version: 6.0.4(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0)) + version: 6.0.4(babel-plugin-react-compiler@1.0.0)(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0)) vite: specifier: ^8.0.16 - version: 8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0) + version: 8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0) + + examples/charts-react-native: + dependencies: + '@tanstack/charts': + specifier: workspace:* + version: link:../../packages/charts-core + '@tanstack/react-native-charts': + specifier: workspace:* + version: link:../../packages/react-native-charts + d3-scale: + specifier: 4.0.2 + version: 4.0.2 + react: + specifier: 19.2.3 + version: 19.2.3 + react-native: + specifier: 0.86.2 + version: 0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2) + react-native-svg: + specifier: 15.15.5 + version: 15.15.5(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(react@19.2.3) + devDependencies: + '@babel/core': + specifier: ^7.25.2 + version: 7.29.7(supports-color@10.2.2) + '@babel/runtime': + specifier: ^7.25.0 + version: 7.29.7 + '@react-native-community/cli': + specifier: 20.1.0 + version: 20.1.0(supports-color@10.2.2)(typescript@6.0.3) + '@react-native-community/cli-platform-android': + specifier: 20.1.0 + version: 20.1.0 + '@react-native-community/cli-platform-ios': + specifier: 20.1.0 + version: 20.1.0 + '@react-native/babel-preset': + specifier: 0.86.2 + version: 0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@react-native/metro-config': + specifier: 0.86.2 + version: 0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@react-native/typescript-config': + specifier: 0.86.2 + version: 0.86.2 + '@types/d3-scale': + specifier: ^4.0.9 + version: 4.0.9 + '@types/react': + specifier: ~19.2.2 + version: 19.2.17 + typescript: + specifier: ~6.0.3 + version: 6.0.3 examples/conformance: dependencies: @@ -375,7 +467,7 @@ importers: version: 3.1.8 vite: specifier: ^8.0.16 - version: 8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0) + version: 8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0) examples/octane: dependencies: @@ -390,11 +482,11 @@ importers: version: link:../../packages/octane octane: specifier: 0.1.13 - version: 0.1.13(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0)) + version: 0.1.13(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0)) devDependencies: vite: specifier: ^8.0.16 - version: 8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0) + version: 8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0) examples/react: dependencies: @@ -416,10 +508,10 @@ importers: devDependencies: '@vitejs/plugin-react': specifier: ^6.0.1 - version: 6.0.4(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0)) + version: 6.0.4(babel-plugin-react-compiler@1.0.0)(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0)) vite: specifier: ^8.0.16 - version: 8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0) + version: 8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0) examples/sandbox: dependencies: @@ -459,10 +551,10 @@ importers: version: 3.1.8 '@vitejs/plugin-react': specifier: ^6.0.1 - version: 6.0.4(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0)) + version: 6.0.4(babel-plugin-react-compiler@1.0.0)(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0)) vite: specifier: ^8.0.16 - version: 8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0) + version: 8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0) packages/alpine-charts: dependencies: @@ -638,7 +730,7 @@ importers: version: link:../plot octane: specifier: ^0.1.13 - version: 0.1.13(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(vite@8.1.5(@types/node@25.9.5)(esbuild@0.28.1)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0)) + version: 0.1.13(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(vite@8.1.5(@types/node@25.9.5)(esbuild@0.28.1)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0)) packages/octane-charts: dependencies: @@ -647,7 +739,7 @@ importers: version: link:../charts-core octane: specifier: ^0.1.13 - version: 0.1.13(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(vite@8.1.5(@types/node@25.9.5)(esbuild@0.28.1)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0)) + version: 0.1.13(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(vite@8.1.5(@types/node@25.9.5)(esbuild@0.28.1)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0)) devDependencies: '@types/d3-scale': specifier: ^4.0.9 @@ -709,6 +801,22 @@ importers: specifier: 4.0.2 version: 4.0.2 + packages/react-native-charts: + dependencies: + '@tanstack/charts': + specifier: workspace:* + version: link:../charts-core + devDependencies: + react: + specifier: 19.2.3 + version: 19.2.3 + react-native: + specifier: 0.86.2 + version: 0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2) + react-native-svg: + specifier: 15.15.5 + version: 15.15.5(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(react@19.2.3) + packages/solid-charts: dependencies: '@tanstack/charts': @@ -720,7 +828,7 @@ importers: version: 1.9.14 vite-plugin-solid: specifier: ^2.11.12 - version: 2.11.14(solid-js@1.9.14)(supports-color@10.2.2)(vite@8.1.5(@types/node@25.9.5)(esbuild@0.28.1)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0)) + version: 2.11.14(solid-js@1.9.14)(supports-color@10.2.2)(vite@8.1.5(@types/node@25.9.5)(esbuild@0.28.1)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0)) packages/svelte-charts: dependencies: @@ -733,7 +841,7 @@ importers: version: 2.5.8(svelte@5.56.8)(typescript@6.0.3) '@sveltejs/vite-plugin-svelte': specifier: ^7.1.2 - version: 7.2.0(svelte@5.56.8)(vite@8.1.5(@types/node@25.9.5)(esbuild@0.28.1)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0)) + version: 7.2.0(svelte@5.56.8)(vite@8.1.5(@types/node@25.9.5)(esbuild@0.28.1)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0)) svelte: specifier: ^5.56.2 version: 5.56.8 @@ -891,6 +999,13 @@ packages: } engines: { node: '>=6.9.0' } + '@babel/helper-annotate-as-pure@7.29.7': + resolution: + { + integrity: sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw==, + } + engines: { node: '>=6.9.0' } + '@babel/helper-compilation-targets@7.29.7': resolution: { @@ -898,6 +1013,32 @@ packages: } engines: { node: '>=6.9.0' } + '@babel/helper-create-class-features-plugin@7.29.7': + resolution: + { + integrity: sha512-IY3ZD9Tmooqr3TUhc3DUWxiuo8xx1DWLhd5M7hQ+ZWJamqM2BbalrBJb2MisSLoYorOj75U03qULCxQTY9r3hg==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-create-regexp-features-plugin@7.29.7': + resolution: + { + integrity: sha512-907Uymvqgg1dwUA+7IGwFAOSYzQOuzPXKNJ1yxzwPffzkYFg2q2eHi1fIOs6sXkG9NbIUMunnUlkYsfRFNvomg==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-define-polyfill-provider@0.6.8': + resolution: + { + integrity: sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==, + } + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + '@babel/helper-globals@7.29.7': resolution: { @@ -905,6 +1046,13 @@ packages: } engines: { node: '>=6.9.0' } + '@babel/helper-member-expression-to-functions@7.29.7': + resolution: + { + integrity: sha512-j+7JYmk1JYDtACIGj0QJqqWZjoUpMoEikQGADMaHgCMCSDqd2+P32rfcibUNrGOMWrlzK1WJBdxrB3JJQZwWtg==, + } + engines: { node: '>=6.9.0' } + '@babel/helper-module-imports@7.18.6': resolution: { @@ -928,6 +1076,13 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-optimise-call-expression@7.29.7': + resolution: + { + integrity: sha512-+kmGVjcT9RGYzoDwdwEqEvGgKe3BYq+O1iGzjFubaNgZHwYHP6lsF2Yghf4kEuv9BV7tYDZ913aBW9am6YKong==, + } + engines: { node: '>=6.9.0' } + '@babel/helper-plugin-utils@7.29.7': resolution: { @@ -935,6 +1090,31 @@ packages: } engines: { node: '>=6.9.0' } + '@babel/helper-remap-async-to-generator@7.29.7': + resolution: + { + integrity: sha512-16AMiW26DbXWBbr3B8wNozKM0ydMLB892vaOaJW/fPJdnT8vJk5sdkQcU/isqUxyCE0cEoa8wZOcbgDuC4b6Og==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-replace-supers@7.29.7': + resolution: + { + integrity: sha512-atfGXWSeCiF4DnKZIfmJfQRkSw9b9gNNXR1kqKjbhG4pGYCOnkp8OcTB8E3NXjBu8NpheSnOeNKz8KT7UNFTmQ==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-skip-transparent-expression-wrappers@7.29.7': + resolution: + { + integrity: sha512-brcMGQaVzIeUb+6/bs1Av0f8YuNNjKY2JyvfRCsFuFsdKccEQ5Ges2y74D74NZ1Rz8lKJ9ksJkfqwQFJ/iNEyQ==, + } + engines: { node: '>=6.9.0' } + '@babel/helper-string-parser@7.29.7': resolution: { @@ -956,6 +1136,13 @@ packages: } engines: { node: '>=6.9.0' } + '@babel/helper-wrap-function@7.29.7': + resolution: + { + integrity: sha512-iES0Skag9ERIF68aXadpO6dbXa03mNWK3sEqJaMnLNs/eC3l0lkImdfoy6Y09/SfkpawdAB4RjQ7PVA7TcVGdw==, + } + engines: { node: '>=6.9.0' } + '@babel/helpers@7.29.7': resolution: { @@ -971,5661 +1158,8537 @@ packages: engines: { node: '>=6.0.0' } hasBin: true - '@babel/plugin-syntax-jsx@7.29.7': + '@babel/plugin-proposal-decorators@7.29.7': resolution: { - integrity: sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==, + integrity: sha512-EtU0Hi3GvrTqD56xKmZvV/uCXK2ZbwVNPNLAquVItcAZpUhkXwWlo3Fmj0c2LxgSf2I8IDULeAepwNP1OefLXg==, } engines: { node: '>=6.9.0' } peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime@7.29.7': + '@babel/plugin-proposal-export-default-from@7.29.7': resolution: { - integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==, + integrity: sha512-p+G5BNXDcy3bOXplhY4HybQ1GxH3i2Tppmdm/3epyRu2VgJJZuUlZ61MqRTg582Q7ZLBdP7fePYvsumSEkMxcQ==, } engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 - '@babel/template@7.29.7': + '@babel/plugin-syntax-decorators@7.29.7': resolution: { - integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==, + integrity: sha512-9MTTLbF39X6sqM92JPEsoI7++26hjZvzkxKZy64aMhWLH2mPkJ/Q3AV4QLmls3R14FpSpkOwQQfUh962JGQxxg==, } engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 - '@babel/traverse@7.29.7': + '@babel/plugin-syntax-dynamic-import@7.8.3': resolution: { - integrity: sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==, + integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==, } - engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 - '@babel/types@7.29.7': + '@babel/plugin-syntax-export-default-from@7.29.7': resolution: { - integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==, + integrity: sha512-foag0BB37ROhdeIX9O8G0jX7hw0UekJc04cHMrYLOnrErsnBKqJGHJ8eDRpoCFZBvEPPygmmtw4qyU97qa4oOw==, } engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 - '@bramus/specificity@2.4.2': + '@babel/plugin-syntax-flow@7.29.7': resolution: { - integrity: sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==, + integrity: sha512-ajMX6QPcyomotqwpzhkYGxcK2i/us0rs1Qo9QvUpa+Fca0FTmqrzKrctoIYLMxcOhGZldGT/BAVkRGTWBiR8gQ==, } - hasBin: true + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 - '@changesets/apply-release-plan@7.1.1': + '@babel/plugin-syntax-jsx@7.29.7': resolution: { - integrity: sha512-9qPCm/rLx/xoOFXIHGB229+4GOL76S4MC+7tyOuTsR6+1jYlfFDQORdvwR5hDA6y4FL2BPt3qpbcQIS+dW85LA==, + integrity: sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==, } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 - '@changesets/assemble-release-plan@6.0.10': + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': resolution: { - integrity: sha512-rSDcqdJ9KbVyjpBIuCidhvZNIiVt1XaIYp73ycVQRIA5n/j6wQaEk0ChRLMUQ1vkxZe51PTQ9OIhbg6HQMW45A==, + integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==, } + peerDependencies: + '@babel/core': ^7.0.0-0 - '@changesets/changelog-git@0.2.1': + '@babel/plugin-syntax-optional-chaining@7.8.3': resolution: { - integrity: sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==, + integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==, } + peerDependencies: + '@babel/core': ^7.0.0-0 - '@changesets/changelog-github@0.7.0': + '@babel/plugin-syntax-typescript@7.29.7': resolution: { - integrity: sha512-rBsbRvc4TVn+FvFnOVM3LxlFJfTXXCp8gfVJ+0BubxWNSVnLuAzowi5j+IEraLLP52w8AAs9QfKbPS3MMiXQJA==, + integrity: sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==, } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 - '@changesets/cli@2.31.1': + '@babel/plugin-transform-async-generator-functions@7.29.7': resolution: { - integrity: sha512-uO05WTcRBwuVOJVSW8Cmpqw6q0WDL53ajGCMyszutvOe5toOnunbpM4jZzf+qxBOz7i0AzopZ8diBuewjmF40w==, + integrity: sha512-d98gXZkgswvkyohMBABkhm3GeXhYj8psWfwQ2C7gtfrKGTykQa/iOIi+JJhwMjPlZ6Vm2XN+DCf3Es1EoG4ZLA==, } - hasBin: true + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 - '@changesets/config@3.1.4': + '@babel/plugin-transform-async-to-generator@7.29.7': resolution: { - integrity: sha512-pf0bvD/v6WI2cRlZ6hzpjtZdSlXDXMAJ+Iz7xfFzV4ZxJ8OGGAON+1qYc99ZPrijnt4xp3VGG7eNvAOGS24V1Q==, + integrity: sha512-pcUb2SS+RMo9TWVBwKGI5ShtoG7R+zBsFmCKDa6fe8c+hPr3XJlZgoE5j6i8W7gDjhyvy+85vmYexanvXh3d1w==, } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 - '@changesets/errors@0.2.0': + '@babel/plugin-transform-block-scoping@7.29.7': resolution: { - integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==, + integrity: sha512-ONyr4+AZhKh8yKWInVxU9AXA9EbsyeLcL6V0dJy6M2/62vuvpGm29zzuymbTpdc451GEpDIdAyPLP3r+P61yKQ==, } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 - '@changesets/get-dependents-graph@2.1.4': + '@babel/plugin-transform-class-properties@7.29.7': resolution: { - integrity: sha512-ZsS00x6WvmHq3sQv8oCMwL0f/z3wbXCVuSVTJwCnnmbC/iBdNJGFx1EcbMG4PC6sXRyH69liM4A2WKXzn/kRPg==, + integrity: sha512-GtcpjFvanPfzNQi3eTitsCqtRRmmqzpy/A+yhTR1HaZo1Ly3EA8ZXxlPyHdR8/IuRMYc3E4wdGBewB2QKQjAaA==, } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 - '@changesets/get-github-info@0.8.0': + '@babel/plugin-transform-class-static-block@7.29.7': resolution: { - integrity: sha512-cRnC+xdF0JIik7coko3iUP9qbnfi1iJQ3sAa6dE+Tx3+ET8bjFEm63PA4WEohgjYcmsOikPHWzPsMWWiZmntOQ==, + integrity: sha512-kibJgmEdX2iMwsHY2tSZNDgj8PwIlCQz7FK9KuGKO8zsuoUwSEhoNnNVp/emKWrbY4HeO6kkXfdMqRKKKXBm2A==, } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.12.0 - '@changesets/get-release-plan@4.0.16': + '@babel/plugin-transform-classes@7.29.7': resolution: { - integrity: sha512-2K5Om6CrMPm45rtvckfzWo7e9jOVCKLCnXia5eUPaURH7/LWzri7pK1TycdzAuAtehLkW7VPbWLCSExTHmiI6g==, + integrity: sha512-qV0OGGBVacduzQHE649JyCneOFI/maT+YKsO+K4Yi3xv2wTPNjM/W2o2gdzMwEAZz7fXNTHAe0NcSg30bIN69g==, } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 - '@changesets/get-version-range-type@0.4.0': + '@babel/plugin-transform-destructuring@7.29.7': resolution: { - integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==, + integrity: sha512-iPX8aD6H9zV5s7ZsqTdNocPN/MGQ5sSMnElKrktxjJRMnB2jN/1p2+R7GkfD6CAYoVFqy5A4XnSIUeGgJzIWpg==, } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 - '@changesets/git@3.0.4': + '@babel/plugin-transform-export-namespace-from@7.29.7': resolution: { - integrity: sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==, + integrity: sha512-24B2nOy2TeJSMheqwPD4DDQOV/elLSIlKxjZt4i05H5AgdPdWR3n18HnNrcJ+j76WJd9gbwb9jPjNYUy6RautA==, } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 - '@changesets/logger@0.1.1': + '@babel/plugin-transform-flow-strip-types@7.29.7': resolution: { - integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==, + integrity: sha512-wRHeUjUjCZnMHmiO5bRgjFLcoEh7JyTdByOW11ahhwNa4V0bmeGEaIvt51yq0zQp2yWIpqfxXXPyUP6GFJZHOQ==, } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 - '@changesets/parse@0.4.3': + '@babel/plugin-transform-for-of@7.29.7': resolution: { - integrity: sha512-ZDmNc53+dXdWEv7fqIUSgRQOLYoUom5Z40gmLgmATmYR9NbL6FJJHwakcCpzaeCy+1D0m0n7mT4jj2B/MQPl7A==, + integrity: sha512-zeSIHh0+E1Um1WJRXCFlHQYu2ieJNdivLLjlBEp+dIBu3S51n+SZZmIXjxnItw6pz56Cn+KvK68BIBVsxq2JiQ==, } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 - '@changesets/pre@2.0.2': + '@babel/plugin-transform-logical-assignment-operators@7.29.7': resolution: { - integrity: sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==, + integrity: sha512-A0H91hh6W8MFRkp5TqJmMr39jzGD1A1E1Ysiv2O06Sfbhkapm+XyIzxWCEh5kqwOZ1/8QZ0dY3SeQ7XBqfJd5Q==, } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 - '@changesets/read@0.6.7': + '@babel/plugin-transform-modules-commonjs@7.29.7': resolution: { - integrity: sha512-D1G4AUYGrBEk8vj8MGwf75k9GpN6XL3wg8i42P2jZZwFLXnlr2Pn7r9yuQNbaMCarP7ZQWNJbV6XLeysAIMhTA==, + integrity: sha512-j0vCldybPC5b5dwCQOJ21uKtHzt7hxLygJTg9eF1ScfaikEDNfzn94XoW5Fi+seBR0nCyL23xaBFFkq7dTM8XQ==, } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 - '@changesets/should-skip-package@0.1.2': + '@babel/plugin-transform-named-capturing-groups-regex@7.29.7': resolution: { - integrity: sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==, + integrity: sha512-vuFoLwr4qnv2xbZ16SQd6uPcH5FNrLHhk/Jzo++0XJFcaDsr4gjJVg6j398oMHiC+83k/GiBzviwF5KBJkPUtQ==, } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0 - '@changesets/types@4.1.0': + '@babel/plugin-transform-nullish-coalescing-operator@7.29.7': resolution: { - integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==, + integrity: sha512-idmp1dFaekP9GbcMvG24Kvw2BfhFZjHnNJCkV4WuIY4PskJzwI3f1N5OdgYke38T7rftO6ERulFRn2cFeZwRkg==, } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 - '@changesets/types@6.1.0': + '@babel/plugin-transform-object-rest-spread@7.29.7': resolution: { - integrity: sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==, + integrity: sha512-Ld98jn4c0smUywL57m7SgsHq3OpThOa6LqZJif3G6jYOovPleoFhVrBJ1WegRApSFB2wu4+RelAj9AC9G08Z4A==, } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 - '@changesets/write@0.4.0': + '@babel/plugin-transform-optional-catch-binding@7.29.7': resolution: { - integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==, + integrity: sha512-sLsyndxK2VwX6yNUOakMb7Sh553ZTe/vVM1XJ+9Z5aW1ytsc8xOIwmyk05NNjN60vkc5/KqoTH6hB4V41LJhng==, } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 - '@cloudflare/kv-asset-handler@0.5.0': + '@babel/plugin-transform-optional-chaining@7.29.7': resolution: { - integrity: sha512-jxQYkj8dSIzc0cD6cMMNdOc1UVjqSqu8BZdor5s8cGjW2I8BjODt/kWPVdY+u9zj3ms75Q5qaZgnxUad83+eAg==, + integrity: sha512-6GM1dhvK3gNODkXcEcMCOLEDCLSoZ/sBbro2Ax8HURyasQ4NshagQixkRFdh5niI6E4gmA/jYI/4aT7rRos3ZQ==, } - engines: { node: '>=22.0.0' } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 - '@cloudflare/unenv-preset@2.16.1': + '@babel/plugin-transform-parameters@7.29.7': resolution: { - integrity: sha512-ECxObrMfyTl5bhQf/lZCXwo5G6xX9IAUo+nDMKK4SZ8m4Jvvxp52vilxyySSWh2YTZz8+HQ07qGH/2rEom1vDw==, + integrity: sha512-ZDOBqV/qLYJI0YElr8DcENEyARsFQeESqWXH6gZlghYXuPPjvweuDhP4VyEi4BlUBlLRFZVjxoZDMjxhLW766g==, } + engines: { node: '>=6.9.0' } peerDependencies: - unenv: 2.0.0-rc.24 - workerd: '>1.20260305.0 <2.0.0-0' - peerDependenciesMeta: - workerd: - optional: true + '@babel/core': ^7.0.0-0 - '@cloudflare/workerd-darwin-64@1.20260617.1': + '@babel/plugin-transform-private-methods@7.29.7': resolution: { - integrity: sha512-jWwmgEVVWbsHNrLSNXzwjJaH90VzRxq1cWkQFUidxyeUPnMxemeNE8I9qFAfrpzGgE11e9sKDcE3ettJW08swQ==, + integrity: sha512-/6Rz4DK1ETDEM/bWHsPHcaEe7ZaT1EqSXjtSP/L0DijOYuaUhiRiOKcwpZ8P7zR4xXEHc2ITdiCgBm9Tpyv9ug==, } - engines: { node: '>=16' } - cpu: [x64] - os: [darwin] + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 - '@cloudflare/workerd-darwin-arm64@1.20260617.1': + '@babel/plugin-transform-private-property-in-object@7.29.7': resolution: { - integrity: sha512-LHH7b565g9znfCUOkwbec6FG2rmRbsgCy6aJiU9KN662mNheWl5sw/iKleiFSiljPKQQP3HkjnC/NSkdgi/aSA==, + integrity: sha512-+BNo06dnrzdNNqCm1X6YUaVv0DKk8Q+JYcoZfOkLhYWNCXzlwTSRq8zGWayT1csjcpNXV9CQTBRRbmTLZac5cA==, } - engines: { node: '>=16' } - cpu: [arm64] - os: [darwin] + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 - '@cloudflare/workerd-linux-64@1.20260617.1': + '@babel/plugin-transform-react-display-name@7.29.7': resolution: { - integrity: sha512-FMnaAKXe4Cfd8TQurCVd9fs2XQVBFRCsP+Id/SRdUv89MlwYu9zXfoyx6BxM+brPTIUK38SHbo8iaxiwzLi9JQ==, + integrity: sha512-+1wdDMGNb4UPeY3Q4L5yLiYe6TXPXubs4NjrgRFw13hPRLJfEMw2Q5OXkee6/IfdqePIeW4Jjwe3aBh7SdKz4Q==, } - engines: { node: '>=16' } - cpu: [x64] - os: [linux] + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 - '@cloudflare/workerd-linux-arm64@1.20260617.1': + '@babel/plugin-transform-react-jsx-development@7.29.7': resolution: { - integrity: sha512-MRoifFYcqbxxIIQy7PqO5tFY/qPFSnjXzakWl0sO93l+HLyG35jRAgOi6jfqa4kBxc7gKKtH861DcewjxUfkjA==, + integrity: sha512-Xfy3UVMF04+ypnFbkhvfqtmvwfe92qwQdbGZVonhE+6v35GzlofmOnA1szaZqzb9xYWr0nl1e5EMmzi0DNON1g==, } - engines: { node: '>=16' } - cpu: [arm64] - os: [linux] + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 - '@cloudflare/workerd-windows-64@1.20260617.1': + '@babel/plugin-transform-react-jsx-self@7.29.7': resolution: { - integrity: sha512-rgBV9wQrv0OSKgCTTbhFUFY3sLGNANZ88aqaLvtmEn2gmbFVb1J4PDGochVUdB7NSEp4D/ghHva6/8SZmbONpw==, + integrity: sha512-TL0hMc9xzy86VD31nUiwzd5otRAcyEPcsegCxolO0PvcXuH1v0kECe/UIznYFihpkvU5wg/jk4v0TTEFfm53fw==, } - engines: { node: '>=16' } - cpu: [x64] - os: [win32] + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 - '@cspotcode/source-map-support@0.8.1': + '@babel/plugin-transform-react-jsx-source@7.29.7': resolution: { - integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==, + integrity: sha512-06IyK09H3wi4cGbhDBwp5gUGo0IKtnYa8tyTiephirPCK6fbobVGiXMMI5zLQ4aKEYP3wZ3ArU44o+8KMrSG/Q==, } - engines: { node: '>=12' } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 - '@csstools/color-helpers@6.1.0': + '@babel/plugin-transform-react-jsx@7.29.7': resolution: { - integrity: sha512-064IFJdjTfUqnjpCVpMOdbr8FLQBhinbZj6yRv2An2E41O/pLEXqfFRWqGq/SxlE5PEUYTlvWsG2r8MswAVvkg==, + integrity: sha512-WsZulLVBUHXVj2cUcPVx6UE21TpalB6bHbSFErKT0Ib++ax24jjXe73FqlWvdylFOjiuPHYi6VCcgRad1ItN+A==, } - engines: { node: '>=20.19.0' } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 - '@csstools/css-calc@3.3.0': + '@babel/plugin-transform-react-pure-annotations@7.29.7': resolution: { - integrity: sha512-c5ihYsPkdG6JCkU2zTMm4+k6r7RXuGxtWYhu5DHMIiF1FHzrfmHL5so11AoFpUv/tu61xfcmT4AmKoFfMPoqdQ==, + integrity: sha512-H5E+HBgDpr6Q5t+Aj11tL7XkIui1jhbIoArVQnqjgXo5/3YxkN7ZEBcWF4RQlB0T4rrxJQbXS6kiFV6B7XTqUA==, } - engines: { node: '>=20.19.0' } + engines: { node: '>=6.9.0' } peerDependencies: - '@csstools/css-parser-algorithms': ^4.0.0 - '@csstools/css-tokenizer': ^4.0.0 + '@babel/core': ^7.0.0-0 - '@csstools/css-color-parser@4.1.10': + '@babel/plugin-transform-regenerator@7.29.7': resolution: { - integrity: sha512-UZhQLIUyJaaMepqehrCODwCg2KW25vFvLWBmqYFaPclYvvxzj/sG8LBOhBFCp11i9uE7t1EyS+RAoV9tztPFyw==, + integrity: sha512-rNNFV0DBAJp988xW2DOntfDoYn1eR8GGF5AT5vYc+rjyfaQkM242c9tZUHHPe7KYaiJizXPWhQTzzdbXySyhBw==, } - engines: { node: '>=20.19.0' } + engines: { node: '>=6.9.0' } peerDependencies: - '@csstools/css-parser-algorithms': ^4.0.0 - '@csstools/css-tokenizer': ^4.0.0 + '@babel/core': ^7.0.0-0 - '@csstools/css-parser-algorithms@4.0.0': + '@babel/plugin-transform-runtime@7.29.7': resolution: { - integrity: sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==, + integrity: sha512-xmAscdE/AsqRW7vutbPNoUmu/nF5SrLKPs7aoJgEjo35lLKA/Bc0i2rMv/hr1+Y0o1bQCiVtith3u2vdgRL39Q==, } - engines: { node: '>=20.19.0' } + engines: { node: '>=6.9.0' } peerDependencies: - '@csstools/css-tokenizer': ^4.0.0 + '@babel/core': ^7.0.0-0 - '@csstools/css-syntax-patches-for-csstree@1.1.7': + '@babel/plugin-transform-typescript@7.29.7': resolution: { - integrity: sha512-fQ+05118eQS1cofO3aJpB5efgpBZMvIzwr/sbC8kDLVA5XLG8q1kJV5yzrUAI1f7lvhPnm8fgIjzFB8/O/5Dig==, + integrity: sha512-jK52h8LaLc7JarhQV2ofeFMts4H7vnOXnqZNA6fYglBTZewRBE51KWt3BUltW1P+KoPsYkHoJeXePuz4zo2LMw==, } + engines: { node: '>=6.9.0' } peerDependencies: - css-tree: ^3.2.1 - peerDependenciesMeta: - css-tree: - optional: true + '@babel/core': ^7.0.0-0 - '@csstools/css-tokenizer@4.0.0': + '@babel/plugin-transform-unicode-regex@7.29.7': resolution: { - integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==, + integrity: sha512-7D/x/23/d/3VqZ0QA+LGbZMlGwZjztBygSWWWsfTPoQ1oQ6Q1P6Mr3d0kk42XabyUVw+fha3LqdRsFqeKqvCyA==, } - engines: { node: '>=20.19.0' } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 - '@emnapi/core@1.11.1': + '@babel/preset-typescript@7.29.7': resolution: { - integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==, + integrity: sha512-/Foi8vKY2EVbed/1eZx0gJEEwHAIxogrySI7rULcRIvhZzbvoE/b5qG5Ghc0WKAFKOHA9SD1x7RsFlOYdutIiQ==, } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 - '@emnapi/core@1.4.5': + '@babel/runtime@7.29.7': resolution: { - integrity: sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==, + integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==, } + engines: { node: '>=6.9.0' } - '@emnapi/runtime@1.11.1': + '@babel/template@7.29.7': resolution: { - integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==, + integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==, } + engines: { node: '>=6.9.0' } - '@emnapi/runtime@1.4.5': + '@babel/traverse@7.29.7': resolution: { - integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==, + integrity: sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==, } + engines: { node: '>=6.9.0' } - '@emnapi/wasi-threads@1.0.4': + '@babel/types@7.29.7': resolution: { - integrity: sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==, + integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==, } + engines: { node: '>=6.9.0' } - '@emnapi/wasi-threads@1.2.2': + '@bramus/specificity@2.4.2': resolution: { - integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==, + integrity: sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==, } + hasBin: true - '@esbuild/aix-ppc64@0.27.7': + '@changesets/apply-release-plan@7.1.1': resolution: { - integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==, + integrity: sha512-9qPCm/rLx/xoOFXIHGB229+4GOL76S4MC+7tyOuTsR6+1jYlfFDQORdvwR5hDA6y4FL2BPt3qpbcQIS+dW85LA==, } - engines: { node: '>=18' } - cpu: [ppc64] - os: [aix] - '@esbuild/aix-ppc64@0.28.1': + '@changesets/assemble-release-plan@6.0.10': resolution: { - integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==, + integrity: sha512-rSDcqdJ9KbVyjpBIuCidhvZNIiVt1XaIYp73ycVQRIA5n/j6wQaEk0ChRLMUQ1vkxZe51PTQ9OIhbg6HQMW45A==, } - engines: { node: '>=18' } - cpu: [ppc64] - os: [aix] - '@esbuild/android-arm64@0.27.7': + '@changesets/changelog-git@0.2.1': resolution: { - integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==, + integrity: sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==, } - engines: { node: '>=18' } - cpu: [arm64] - os: [android] - '@esbuild/android-arm64@0.28.1': + '@changesets/changelog-github@0.7.0': resolution: { - integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==, + integrity: sha512-rBsbRvc4TVn+FvFnOVM3LxlFJfTXXCp8gfVJ+0BubxWNSVnLuAzowi5j+IEraLLP52w8AAs9QfKbPS3MMiXQJA==, } - engines: { node: '>=18' } - cpu: [arm64] - os: [android] - '@esbuild/android-arm@0.27.7': + '@changesets/cli@2.31.1': resolution: { - integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==, + integrity: sha512-uO05WTcRBwuVOJVSW8Cmpqw6q0WDL53ajGCMyszutvOe5toOnunbpM4jZzf+qxBOz7i0AzopZ8diBuewjmF40w==, } - engines: { node: '>=18' } - cpu: [arm] - os: [android] + hasBin: true - '@esbuild/android-arm@0.28.1': + '@changesets/config@3.1.4': resolution: { - integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==, + integrity: sha512-pf0bvD/v6WI2cRlZ6hzpjtZdSlXDXMAJ+Iz7xfFzV4ZxJ8OGGAON+1qYc99ZPrijnt4xp3VGG7eNvAOGS24V1Q==, } - engines: { node: '>=18' } - cpu: [arm] - os: [android] - '@esbuild/android-x64@0.27.7': + '@changesets/errors@0.2.0': resolution: { - integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==, + integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==, } - engines: { node: '>=18' } - cpu: [x64] - os: [android] - '@esbuild/android-x64@0.28.1': + '@changesets/get-dependents-graph@2.1.4': resolution: { - integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==, + integrity: sha512-ZsS00x6WvmHq3sQv8oCMwL0f/z3wbXCVuSVTJwCnnmbC/iBdNJGFx1EcbMG4PC6sXRyH69liM4A2WKXzn/kRPg==, } - engines: { node: '>=18' } - cpu: [x64] - os: [android] - '@esbuild/darwin-arm64@0.27.7': + '@changesets/get-github-info@0.8.0': resolution: { - integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==, + integrity: sha512-cRnC+xdF0JIik7coko3iUP9qbnfi1iJQ3sAa6dE+Tx3+ET8bjFEm63PA4WEohgjYcmsOikPHWzPsMWWiZmntOQ==, } - engines: { node: '>=18' } - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-arm64@0.28.1': + '@changesets/get-release-plan@4.0.16': resolution: { - integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==, + integrity: sha512-2K5Om6CrMPm45rtvckfzWo7e9jOVCKLCnXia5eUPaURH7/LWzri7pK1TycdzAuAtehLkW7VPbWLCSExTHmiI6g==, } - engines: { node: '>=18' } - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-x64@0.27.7': + '@changesets/get-version-range-type@0.4.0': resolution: { - integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==, + integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==, } - engines: { node: '>=18' } - cpu: [x64] - os: [darwin] - '@esbuild/darwin-x64@0.28.1': + '@changesets/git@3.0.4': resolution: { - integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==, + integrity: sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==, } - engines: { node: '>=18' } - cpu: [x64] - os: [darwin] - '@esbuild/freebsd-arm64@0.27.7': + '@changesets/logger@0.1.1': resolution: { - integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==, + integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==, } - engines: { node: '>=18' } - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-arm64@0.28.1': + '@changesets/parse@0.4.3': resolution: { - integrity: sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==, + integrity: sha512-ZDmNc53+dXdWEv7fqIUSgRQOLYoUom5Z40gmLgmATmYR9NbL6FJJHwakcCpzaeCy+1D0m0n7mT4jj2B/MQPl7A==, } - engines: { node: '>=18' } - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-x64@0.27.7': + '@changesets/pre@2.0.2': resolution: { - integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==, + integrity: sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==, } - engines: { node: '>=18' } - cpu: [x64] - os: [freebsd] - '@esbuild/freebsd-x64@0.28.1': + '@changesets/read@0.6.7': resolution: { - integrity: sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==, + integrity: sha512-D1G4AUYGrBEk8vj8MGwf75k9GpN6XL3wg8i42P2jZZwFLXnlr2Pn7r9yuQNbaMCarP7ZQWNJbV6XLeysAIMhTA==, } - engines: { node: '>=18' } - cpu: [x64] - os: [freebsd] - '@esbuild/linux-arm64@0.27.7': + '@changesets/should-skip-package@0.1.2': resolution: { - integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==, + integrity: sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==, } - engines: { node: '>=18' } - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm64@0.28.1': + '@changesets/types@4.1.0': resolution: { - integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==, + integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==, } - engines: { node: '>=18' } - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm@0.27.7': + '@changesets/types@6.1.0': resolution: { - integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==, + integrity: sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==, } - engines: { node: '>=18' } - cpu: [arm] - os: [linux] - '@esbuild/linux-arm@0.28.1': + '@changesets/write@0.4.0': resolution: { - integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==, + integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==, } - engines: { node: '>=18' } - cpu: [arm] - os: [linux] - '@esbuild/linux-ia32@0.27.7': + '@cloudflare/kv-asset-handler@0.5.0': resolution: { - integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==, + integrity: sha512-jxQYkj8dSIzc0cD6cMMNdOc1UVjqSqu8BZdor5s8cGjW2I8BjODt/kWPVdY+u9zj3ms75Q5qaZgnxUad83+eAg==, } - engines: { node: '>=18' } - cpu: [ia32] - os: [linux] + engines: { node: '>=22.0.0' } - '@esbuild/linux-ia32@0.28.1': + '@cloudflare/unenv-preset@2.16.1': resolution: { - integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==, + integrity: sha512-ECxObrMfyTl5bhQf/lZCXwo5G6xX9IAUo+nDMKK4SZ8m4Jvvxp52vilxyySSWh2YTZz8+HQ07qGH/2rEom1vDw==, } - engines: { node: '>=18' } - cpu: [ia32] - os: [linux] + peerDependencies: + unenv: 2.0.0-rc.24 + workerd: '>1.20260305.0 <2.0.0-0' + peerDependenciesMeta: + workerd: + optional: true - '@esbuild/linux-loong64@0.27.7': + '@cloudflare/workerd-darwin-64@1.20260617.1': resolution: { - integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==, + integrity: sha512-jWwmgEVVWbsHNrLSNXzwjJaH90VzRxq1cWkQFUidxyeUPnMxemeNE8I9qFAfrpzGgE11e9sKDcE3ettJW08swQ==, } - engines: { node: '>=18' } - cpu: [loong64] - os: [linux] + engines: { node: '>=16' } + cpu: [x64] + os: [darwin] - '@esbuild/linux-loong64@0.28.1': + '@cloudflare/workerd-darwin-arm64@1.20260617.1': resolution: { - integrity: sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==, + integrity: sha512-LHH7b565g9znfCUOkwbec6FG2rmRbsgCy6aJiU9KN662mNheWl5sw/iKleiFSiljPKQQP3HkjnC/NSkdgi/aSA==, } - engines: { node: '>=18' } - cpu: [loong64] - os: [linux] + engines: { node: '>=16' } + cpu: [arm64] + os: [darwin] - '@esbuild/linux-mips64el@0.27.7': + '@cloudflare/workerd-linux-64@1.20260617.1': resolution: { - integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==, + integrity: sha512-FMnaAKXe4Cfd8TQurCVd9fs2XQVBFRCsP+Id/SRdUv89MlwYu9zXfoyx6BxM+brPTIUK38SHbo8iaxiwzLi9JQ==, } - engines: { node: '>=18' } - cpu: [mips64el] + engines: { node: '>=16' } + cpu: [x64] os: [linux] - '@esbuild/linux-mips64el@0.28.1': + '@cloudflare/workerd-linux-arm64@1.20260617.1': resolution: { - integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==, + integrity: sha512-MRoifFYcqbxxIIQy7PqO5tFY/qPFSnjXzakWl0sO93l+HLyG35jRAgOi6jfqa4kBxc7gKKtH861DcewjxUfkjA==, } - engines: { node: '>=18' } - cpu: [mips64el] + engines: { node: '>=16' } + cpu: [arm64] os: [linux] - '@esbuild/linux-ppc64@0.27.7': + '@cloudflare/workerd-windows-64@1.20260617.1': resolution: { - integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==, + integrity: sha512-rgBV9wQrv0OSKgCTTbhFUFY3sLGNANZ88aqaLvtmEn2gmbFVb1J4PDGochVUdB7NSEp4D/ghHva6/8SZmbONpw==, } - engines: { node: '>=18' } - cpu: [ppc64] - os: [linux] + engines: { node: '>=16' } + cpu: [x64] + os: [win32] - '@esbuild/linux-ppc64@0.28.1': + '@cspotcode/source-map-support@0.8.1': resolution: { - integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==, + integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==, } - engines: { node: '>=18' } - cpu: [ppc64] - os: [linux] + engines: { node: '>=12' } - '@esbuild/linux-riscv64@0.27.7': + '@csstools/color-helpers@6.1.0': resolution: { - integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==, + integrity: sha512-064IFJdjTfUqnjpCVpMOdbr8FLQBhinbZj6yRv2An2E41O/pLEXqfFRWqGq/SxlE5PEUYTlvWsG2r8MswAVvkg==, } - engines: { node: '>=18' } - cpu: [riscv64] - os: [linux] + engines: { node: '>=20.19.0' } - '@esbuild/linux-riscv64@0.28.1': + '@csstools/css-calc@3.3.0': resolution: { - integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==, + integrity: sha512-c5ihYsPkdG6JCkU2zTMm4+k6r7RXuGxtWYhu5DHMIiF1FHzrfmHL5so11AoFpUv/tu61xfcmT4AmKoFfMPoqdQ==, } - engines: { node: '>=18' } - cpu: [riscv64] - os: [linux] + engines: { node: '>=20.19.0' } + peerDependencies: + '@csstools/css-parser-algorithms': ^4.0.0 + '@csstools/css-tokenizer': ^4.0.0 - '@esbuild/linux-s390x@0.27.7': + '@csstools/css-color-parser@4.1.10': resolution: { - integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==, + integrity: sha512-UZhQLIUyJaaMepqehrCODwCg2KW25vFvLWBmqYFaPclYvvxzj/sG8LBOhBFCp11i9uE7t1EyS+RAoV9tztPFyw==, } - engines: { node: '>=18' } - cpu: [s390x] - os: [linux] + engines: { node: '>=20.19.0' } + peerDependencies: + '@csstools/css-parser-algorithms': ^4.0.0 + '@csstools/css-tokenizer': ^4.0.0 - '@esbuild/linux-s390x@0.28.1': + '@csstools/css-parser-algorithms@4.0.0': resolution: { - integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==, + integrity: sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==, } - engines: { node: '>=18' } - cpu: [s390x] - os: [linux] + engines: { node: '>=20.19.0' } + peerDependencies: + '@csstools/css-tokenizer': ^4.0.0 - '@esbuild/linux-x64@0.27.7': + '@csstools/css-syntax-patches-for-csstree@1.1.7': resolution: { - integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==, + integrity: sha512-fQ+05118eQS1cofO3aJpB5efgpBZMvIzwr/sbC8kDLVA5XLG8q1kJV5yzrUAI1f7lvhPnm8fgIjzFB8/O/5Dig==, } - engines: { node: '>=18' } - cpu: [x64] - os: [linux] + peerDependencies: + css-tree: ^3.2.1 + peerDependenciesMeta: + css-tree: + optional: true - '@esbuild/linux-x64@0.28.1': + '@csstools/css-tokenizer@4.0.0': resolution: { - integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==, + integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==, } - engines: { node: '>=18' } - cpu: [x64] - os: [linux] + engines: { node: '>=20.19.0' } - '@esbuild/netbsd-arm64@0.27.7': + '@emnapi/core@1.11.1': resolution: { - integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==, + integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==, } - engines: { node: '>=18' } - cpu: [arm64] - os: [netbsd] - '@esbuild/netbsd-arm64@0.28.1': + '@emnapi/core@1.4.5': resolution: { - integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==, + integrity: sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==, } - engines: { node: '>=18' } - cpu: [arm64] - os: [netbsd] - '@esbuild/netbsd-x64@0.27.7': + '@emnapi/runtime@1.11.1': resolution: { - integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==, + integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==, } - engines: { node: '>=18' } - cpu: [x64] - os: [netbsd] - '@esbuild/netbsd-x64@0.28.1': + '@emnapi/runtime@1.4.5': resolution: { - integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==, + integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==, } - engines: { node: '>=18' } - cpu: [x64] - os: [netbsd] - '@esbuild/openbsd-arm64@0.27.7': + '@emnapi/wasi-threads@1.0.4': resolution: { - integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==, + integrity: sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==, } - engines: { node: '>=18' } - cpu: [arm64] - os: [openbsd] - '@esbuild/openbsd-arm64@0.28.1': + '@emnapi/wasi-threads@1.2.2': resolution: { - integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==, + integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==, } - engines: { node: '>=18' } - cpu: [arm64] - os: [openbsd] - '@esbuild/openbsd-x64@0.27.7': + '@esbuild/aix-ppc64@0.27.7': resolution: { - integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==, + integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==, } engines: { node: '>=18' } - cpu: [x64] - os: [openbsd] + cpu: [ppc64] + os: [aix] - '@esbuild/openbsd-x64@0.28.1': + '@esbuild/aix-ppc64@0.28.1': resolution: { - integrity: sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==, + integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==, } engines: { node: '>=18' } - cpu: [x64] - os: [openbsd] + cpu: [ppc64] + os: [aix] - '@esbuild/openharmony-arm64@0.27.7': + '@esbuild/android-arm64@0.27.7': resolution: { - integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==, + integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==, } engines: { node: '>=18' } cpu: [arm64] - os: [openharmony] + os: [android] - '@esbuild/openharmony-arm64@0.28.1': + '@esbuild/android-arm64@0.28.1': resolution: { - integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==, + integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==, } engines: { node: '>=18' } cpu: [arm64] - os: [openharmony] + os: [android] - '@esbuild/sunos-x64@0.27.7': + '@esbuild/android-arm@0.27.7': resolution: { - integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==, + integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==, } engines: { node: '>=18' } - cpu: [x64] - os: [sunos] + cpu: [arm] + os: [android] - '@esbuild/sunos-x64@0.28.1': + '@esbuild/android-arm@0.28.1': resolution: { - integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==, + integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==, } engines: { node: '>=18' } - cpu: [x64] - os: [sunos] + cpu: [arm] + os: [android] - '@esbuild/win32-arm64@0.27.7': + '@esbuild/android-x64@0.27.7': resolution: { - integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==, + integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==, } engines: { node: '>=18' } - cpu: [arm64] - os: [win32] + cpu: [x64] + os: [android] - '@esbuild/win32-arm64@0.28.1': + '@esbuild/android-x64@0.28.1': resolution: { - integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==, + integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==, } engines: { node: '>=18' } - cpu: [arm64] - os: [win32] + cpu: [x64] + os: [android] - '@esbuild/win32-ia32@0.27.7': + '@esbuild/darwin-arm64@0.27.7': resolution: { - integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==, + integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==, } engines: { node: '>=18' } - cpu: [ia32] - os: [win32] + cpu: [arm64] + os: [darwin] - '@esbuild/win32-ia32@0.28.1': + '@esbuild/darwin-arm64@0.28.1': resolution: { - integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==, + integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==, } engines: { node: '>=18' } - cpu: [ia32] - os: [win32] + cpu: [arm64] + os: [darwin] - '@esbuild/win32-x64@0.27.7': + '@esbuild/darwin-x64@0.27.7': resolution: { - integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==, + integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==, } engines: { node: '>=18' } cpu: [x64] - os: [win32] + os: [darwin] - '@esbuild/win32-x64@0.28.1': + '@esbuild/darwin-x64@0.28.1': resolution: { - integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==, + integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==, } engines: { node: '>=18' } cpu: [x64] - os: [win32] + os: [darwin] - '@exodus/bytes@1.15.1': + '@esbuild/freebsd-arm64@0.27.7': resolution: { - integrity: sha512-S6mL0yNB/Abt9Ei4tq8gDhcczc4S3+vQ4ra7vxnAf+YHC02srtqxKKZghx2Dq6p0e66THKwR6r8N6P95wEty7Q==, + integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==, } - engines: { node: ^20.19.0 || ^22.12.0 || >=24.0.0 } - peerDependencies: - '@noble/hashes': ^1.8.0 || ^2.0.0 - peerDependenciesMeta: - '@noble/hashes': - optional: true + engines: { node: '>=18' } + cpu: [arm64] + os: [freebsd] - '@img/colour@1.1.0': + '@esbuild/freebsd-arm64@0.28.1': resolution: { - integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==, + integrity: sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==, } engines: { node: '>=18' } + cpu: [arm64] + os: [freebsd] - '@img/sharp-darwin-arm64@0.34.5': + '@esbuild/freebsd-x64@0.27.7': resolution: { - integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==, + integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==, } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } - cpu: [arm64] - os: [darwin] + engines: { node: '>=18' } + cpu: [x64] + os: [freebsd] - '@img/sharp-darwin-x64@0.34.5': + '@esbuild/freebsd-x64@0.28.1': resolution: { - integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==, + integrity: sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==, } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + engines: { node: '>=18' } cpu: [x64] - os: [darwin] + os: [freebsd] - '@img/sharp-libvips-darwin-arm64@1.2.4': + '@esbuild/linux-arm64@0.27.7': resolution: { - integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==, + integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==, } + engines: { node: '>=18' } cpu: [arm64] - os: [darwin] + os: [linux] - '@img/sharp-libvips-darwin-x64@1.2.4': + '@esbuild/linux-arm64@0.28.1': resolution: { - integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==, + integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==, } - cpu: [x64] - os: [darwin] + engines: { node: '>=18' } + cpu: [arm64] + os: [linux] - '@img/sharp-libvips-linux-arm64@1.2.4': + '@esbuild/linux-arm@0.27.7': resolution: { - integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==, + integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==, } - cpu: [arm64] + engines: { node: '>=18' } + cpu: [arm] os: [linux] - libc: [glibc] - '@img/sharp-libvips-linux-arm@1.2.4': + '@esbuild/linux-arm@0.28.1': resolution: { - integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==, + integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==, } + engines: { node: '>=18' } cpu: [arm] os: [linux] - libc: [glibc] - '@img/sharp-libvips-linux-ppc64@1.2.4': + '@esbuild/linux-ia32@0.27.7': resolution: { - integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==, + integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==, } - cpu: [ppc64] + engines: { node: '>=18' } + cpu: [ia32] os: [linux] - libc: [glibc] - '@img/sharp-libvips-linux-riscv64@1.2.4': + '@esbuild/linux-ia32@0.28.1': resolution: { - integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==, + integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==, } - cpu: [riscv64] + engines: { node: '>=18' } + cpu: [ia32] os: [linux] - libc: [glibc] - '@img/sharp-libvips-linux-s390x@1.2.4': + '@esbuild/linux-loong64@0.27.7': resolution: { - integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==, + integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==, } - cpu: [s390x] + engines: { node: '>=18' } + cpu: [loong64] os: [linux] - libc: [glibc] - '@img/sharp-libvips-linux-x64@1.2.4': + '@esbuild/linux-loong64@0.28.1': resolution: { - integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==, + integrity: sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==, } - cpu: [x64] + engines: { node: '>=18' } + cpu: [loong64] os: [linux] - libc: [glibc] - '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + '@esbuild/linux-mips64el@0.27.7': resolution: { - integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==, + integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==, } - cpu: [arm64] + engines: { node: '>=18' } + cpu: [mips64el] os: [linux] - libc: [musl] - '@img/sharp-libvips-linuxmusl-x64@1.2.4': + '@esbuild/linux-mips64el@0.28.1': resolution: { - integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==, + integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==, } - cpu: [x64] + engines: { node: '>=18' } + cpu: [mips64el] os: [linux] - libc: [musl] - '@img/sharp-linux-arm64@0.34.5': + '@esbuild/linux-ppc64@0.27.7': resolution: { - integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==, + integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==, } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } - cpu: [arm64] + engines: { node: '>=18' } + cpu: [ppc64] os: [linux] - libc: [glibc] - '@img/sharp-linux-arm@0.34.5': + '@esbuild/linux-ppc64@0.28.1': resolution: { - integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==, + integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==, } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } - cpu: [arm] + engines: { node: '>=18' } + cpu: [ppc64] os: [linux] - libc: [glibc] - '@img/sharp-linux-ppc64@0.34.5': + '@esbuild/linux-riscv64@0.27.7': resolution: { - integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==, + integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==, } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } - cpu: [ppc64] + engines: { node: '>=18' } + cpu: [riscv64] os: [linux] - libc: [glibc] - '@img/sharp-linux-riscv64@0.34.5': + '@esbuild/linux-riscv64@0.28.1': resolution: { - integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==, + integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==, } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + engines: { node: '>=18' } cpu: [riscv64] os: [linux] - libc: [glibc] - '@img/sharp-linux-s390x@0.34.5': + '@esbuild/linux-s390x@0.27.7': resolution: { - integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==, + integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==, } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + engines: { node: '>=18' } cpu: [s390x] os: [linux] - libc: [glibc] - '@img/sharp-linux-x64@0.34.5': + '@esbuild/linux-s390x@0.28.1': resolution: { - integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==, + integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==, } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } - cpu: [x64] + engines: { node: '>=18' } + cpu: [s390x] os: [linux] - libc: [glibc] - '@img/sharp-linuxmusl-arm64@0.34.5': + '@esbuild/linux-x64@0.27.7': resolution: { - integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==, + integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==, } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } - cpu: [arm64] + engines: { node: '>=18' } + cpu: [x64] os: [linux] - libc: [musl] - '@img/sharp-linuxmusl-x64@0.34.5': + '@esbuild/linux-x64@0.28.1': resolution: { - integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==, + integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==, } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + engines: { node: '>=18' } cpu: [x64] os: [linux] - libc: [musl] - '@img/sharp-wasm32@0.34.5': + '@esbuild/netbsd-arm64@0.27.7': resolution: { - integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==, + integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==, } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } - cpu: [wasm32] + engines: { node: '>=18' } + cpu: [arm64] + os: [netbsd] - '@img/sharp-win32-arm64@0.34.5': + '@esbuild/netbsd-arm64@0.28.1': resolution: { - integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==, + integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==, } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + engines: { node: '>=18' } cpu: [arm64] - os: [win32] + os: [netbsd] - '@img/sharp-win32-ia32@0.34.5': + '@esbuild/netbsd-x64@0.27.7': resolution: { - integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==, + integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==, } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } - cpu: [ia32] - os: [win32] + engines: { node: '>=18' } + cpu: [x64] + os: [netbsd] - '@img/sharp-win32-x64@0.34.5': + '@esbuild/netbsd-x64@0.28.1': resolution: { - integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==, + integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==, } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + engines: { node: '>=18' } cpu: [x64] - os: [win32] + os: [netbsd] - '@inquirer/external-editor@1.0.3': + '@esbuild/openbsd-arm64@0.27.7': resolution: { - integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==, + integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==, } engines: { node: '>=18' } - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true + cpu: [arm64] + os: [openbsd] - '@jest/diff-sequences@30.0.1': + '@esbuild/openbsd-arm64@0.28.1': resolution: { - integrity: sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==, + integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==, } - engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + engines: { node: '>=18' } + cpu: [arm64] + os: [openbsd] - '@jridgewell/gen-mapping@0.3.13': + '@esbuild/openbsd-x64@0.27.7': resolution: { - integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==, + integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==, } + engines: { node: '>=18' } + cpu: [x64] + os: [openbsd] - '@jridgewell/remapping@2.3.5': + '@esbuild/openbsd-x64@0.28.1': resolution: { - integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==, + integrity: sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==, } + engines: { node: '>=18' } + cpu: [x64] + os: [openbsd] - '@jridgewell/resolve-uri@3.1.2': + '@esbuild/openharmony-arm64@0.27.7': resolution: { - integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==, + integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==, } - engines: { node: '>=6.0.0' } + engines: { node: '>=18' } + cpu: [arm64] + os: [openharmony] - '@jridgewell/sourcemap-codec@1.5.5': + '@esbuild/openharmony-arm64@0.28.1': resolution: { - integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==, + integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==, } + engines: { node: '>=18' } + cpu: [arm64] + os: [openharmony] - '@jridgewell/trace-mapping@0.3.31': + '@esbuild/sunos-x64@0.27.7': resolution: { - integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==, + integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==, } + engines: { node: '>=18' } + cpu: [x64] + os: [sunos] - '@jridgewell/trace-mapping@0.3.9': + '@esbuild/sunos-x64@0.28.1': resolution: { - integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==, + integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==, } + engines: { node: '>=18' } + cpu: [x64] + os: [sunos] - '@kurkle/color@0.3.4': + '@esbuild/win32-arm64@0.27.7': resolution: { - integrity: sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==, + integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==, } + engines: { node: '>=18' } + cpu: [arm64] + os: [win32] - '@lit-labs/ssr-dom-shim@1.6.0': + '@esbuild/win32-arm64@0.28.1': resolution: { - integrity: sha512-VHb0ALPMTlgKjM6yIxxoQNnpKyUKLD04VzeQdsiXkMqkvYlAHxq9glGLmgbb889/1GsohSOAjvQYoiBppXFqrQ==, + integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==, } + engines: { node: '>=18' } + cpu: [arm64] + os: [win32] - '@lit/reactive-element@2.1.2': + '@esbuild/win32-ia32@0.27.7': resolution: { - integrity: sha512-pbCDiVMnne1lYUIaYNN5wrwQXDtHaYtg7YEFPeW+hws6U47WeFvISGUWekPGKWOP1ygrs0ef0o1VJMk1exos5A==, + integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==, } + engines: { node: '>=18' } + cpu: [ia32] + os: [win32] - '@manypkg/find-root@1.1.0': + '@esbuild/win32-ia32@0.28.1': resolution: { - integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==, + integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==, } + engines: { node: '>=18' } + cpu: [ia32] + os: [win32] - '@manypkg/get-packages@1.1.3': + '@esbuild/win32-x64@0.27.7': resolution: { - integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==, + integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==, } + engines: { node: '>=18' } + cpu: [x64] + os: [win32] - '@napi-rs/nice-android-arm-eabi@1.1.1': + '@esbuild/win32-x64@0.28.1': resolution: { - integrity: sha512-kjirL3N6TnRPv5iuHw36wnucNqXAO46dzK9oPb0wj076R5Xm8PfUVA9nAFB5ZNMmfJQJVKACAPd/Z2KYMppthw==, + integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==, } - engines: { node: '>= 10' } - cpu: [arm] - os: [android] + engines: { node: '>=18' } + cpu: [x64] + os: [win32] - '@napi-rs/nice-android-arm64@1.1.1': + '@exodus/bytes@1.15.1': resolution: { - integrity: sha512-blG0i7dXgbInN5urONoUCNf+DUEAavRffrO7fZSeoRMJc5qD+BJeNcpr54msPF6qfDD6kzs9AQJogZvT2KD5nw==, + integrity: sha512-S6mL0yNB/Abt9Ei4tq8gDhcczc4S3+vQ4ra7vxnAf+YHC02srtqxKKZghx2Dq6p0e66THKwR6r8N6P95wEty7Q==, } - engines: { node: '>= 10' } - cpu: [arm64] - os: [android] + engines: { node: ^20.19.0 || ^22.12.0 || >=24.0.0 } + peerDependencies: + '@noble/hashes': ^1.8.0 || ^2.0.0 + peerDependenciesMeta: + '@noble/hashes': + optional: true - '@napi-rs/nice-darwin-arm64@1.1.1': + '@expo/cli@57.0.11': resolution: { - integrity: sha512-s/E7w45NaLqTGuOjC2p96pct4jRfo61xb9bU1unM/MJ/RFkKlJyJDx7OJI/O0ll/hrfpqKopuAFDV8yo0hfT7A==, + integrity: sha512-ENXCwRyL8Q9qbabUmm0L6w9kXTmdGotW7eDEEWmUDXLPux+nEzNDqw0MzWQ5K3ZsXS51QmUJZg5yETB+6SnNRg==, } - engines: { node: '>= 10' } - cpu: [arm64] - os: [darwin] + hasBin: true + peerDependencies: + expo: '*' + expo-router: '*' + react-native: '*' + peerDependenciesMeta: + expo-router: + optional: true + react-native: + optional: true - '@napi-rs/nice-darwin-x64@1.1.1': + '@expo/code-signing-certificates@0.0.6': resolution: { - integrity: sha512-dGoEBnVpsdcC+oHHmW1LRK5eiyzLwdgNQq3BmZIav+9/5WTZwBYX7r5ZkQC07Nxd3KHOCkgbHSh4wPkH1N1LiQ==, + integrity: sha512-iNe0puxwBNEcuua9gmTGzq+SuMDa0iATai1FlFTMHJ/vUmKvN/V//drXoLJkVb5i5H3iE/n/qIJxyoBnXouD0w==, } - engines: { node: '>= 10' } - cpu: [x64] - os: [darwin] - '@napi-rs/nice-freebsd-x64@1.1.1': + '@expo/config-plugins@57.0.6': resolution: { - integrity: sha512-kHv4kEHAylMYmlNwcQcDtXjklYp4FCf0b05E+0h6nDHsZ+F0bDe04U/tXNOqrx5CmIAth4vwfkjjUmp4c4JktQ==, + integrity: sha512-7CmKrS5Rnu8aSZyNlxH2qzA7Ls1HEa4EQvEVOAkHDKPr1e4Cg/nz7I7dUl09QDTVjMvkKYDH4Th0DuAsgqASaw==, } - engines: { node: '>= 10' } - cpu: [x64] - os: [freebsd] - '@napi-rs/nice-linux-arm-gnueabihf@1.1.1': + '@expo/config-types@57.0.2': resolution: { - integrity: sha512-E1t7K0efyKXZDoZg1LzCOLxgolxV58HCkaEkEvIYQx12ht2pa8hoBo+4OB3qh7e+QiBlp1SRf+voWUZFxyhyqg==, + integrity: sha512-ewW08OonrcRIsRKIlFvvcmmafE5zemb1ocu3HkNwtVPyRtj2w42pZCAkMIROYpcVBaPnc3mDT9UZDzwXWC3i6g==, } - engines: { node: '>= 10' } - cpu: [arm] - os: [linux] - '@napi-rs/nice-linux-arm64-gnu@1.1.1': + '@expo/config@57.0.6': resolution: { - integrity: sha512-CIKLA12DTIZlmTaaKhQP88R3Xao+gyJxNWEn04wZwC2wmRapNnxCUZkVwggInMJvtVElA+D4ZzOU5sX4jV+SmQ==, + integrity: sha512-VpMJpB/De/fb9bBFVVBiK6Ntg9lt0kAleLH9hcZz85CYRUQ3jVFVA8rNC5f8y4cp2+FiiPNFp62+kEOFI6pDiw==, } - engines: { node: '>= 10' } - cpu: [arm64] - os: [linux] - libc: [glibc] - '@napi-rs/nice-linux-arm64-musl@1.1.1': + '@expo/devcert@1.2.1': resolution: { - integrity: sha512-+2Rzdb3nTIYZ0YJF43qf2twhqOCkiSrHx2Pg6DJaCPYhhaxbLcdlV8hCRMHghQ+EtZQWGNcS2xF4KxBhSGeutg==, + integrity: sha512-qC4eaxmKMTmJC2ahwyui6ud8f3W60Ss7pMkpBq40Hu3zyiAaugPXnZ24145U7K36qO9UHdZUVxsCvIpz2RYYCA==, } - engines: { node: '>= 10' } - cpu: [arm64] - os: [linux] - libc: [musl] - '@napi-rs/nice-linux-ppc64-gnu@1.1.1': + '@expo/devtools@57.0.1': resolution: { - integrity: sha512-4FS8oc0GeHpwvv4tKciKkw3Y4jKsL7FRhaOeiPei0X9T4Jd619wHNe4xCLmN2EMgZoeGg+Q7GY7BsvwKpL22Tg==, + integrity: sha512-GyUf+wFNkbttaX0jR7MZa9bm77U0IrLg6d2AjpxdyoXw/w4abHoXG0oFufwLMgP9zLTd5+Ct4X/ffNUTnlzZgg==, } - engines: { node: '>= 10' } - cpu: [ppc64] - os: [linux] - libc: [glibc] + peerDependencies: + react: '*' + react-native: '*' + peerDependenciesMeta: + react: + optional: true + react-native: + optional: true - '@napi-rs/nice-linux-riscv64-gnu@1.1.1': + '@expo/dom-webview@57.0.1': resolution: { - integrity: sha512-HU0nw9uD4FO/oGCCk409tCi5IzIZpH2agE6nN4fqpwVlCn5BOq0MS1dXGjXaG17JaAvrlpV5ZeyZwSon10XOXw==, + integrity: sha512-lAKsME4SAq+8sf56oN0DX5TBYyruupoRxbWbD2xf9RnKY8y6x8eb9LCE5pxSN0qyWdqnp+0wmyWzDkKboThKAw==, } - engines: { node: '>= 10' } - cpu: [riscv64] - os: [linux] - libc: [glibc] + peerDependencies: + expo: '*' + react: '*' + react-native: '*' - '@napi-rs/nice-linux-s390x-gnu@1.1.1': + '@expo/env@2.4.2': resolution: { - integrity: sha512-2YqKJWWl24EwrX0DzCQgPLKQBxYDdBxOHot1KWEq7aY2uYeX+Uvtv4I8xFVVygJDgf6/92h9N3Y43WPx8+PAgQ==, + integrity: sha512-28pqaEqwnmLduZ00Pq9HkSzE5wbj1MTwp5/n8nm8rD8MCjR9eUnVOwmNksPI3Be2ReAPO/DbPn1puy0mvoocsQ==, } - engines: { node: '>= 10' } - cpu: [s390x] - os: [linux] - libc: [glibc] + engines: { node: '>=20.12.0' } - '@napi-rs/nice-linux-x64-gnu@1.1.1': + '@expo/expo-modules-macros-plugin@0.6.1': resolution: { - integrity: sha512-/gaNz3R92t+dcrfCw/96pDopcmec7oCcAQ3l/M+Zxr82KT4DljD37CpgrnXV+pJC263JkW572pdbP3hP+KjcIg==, + integrity: sha512-cpsLZE4rqkc1Y3eZTkxB98jrqY1YXgetmtxFt8q89jBRmk3quRuk1BZo+VcnCSObZardjg99r1k5xijEMONFGA==, } - engines: { node: '>= 10' } - cpu: [x64] - os: [linux] - libc: [glibc] - '@napi-rs/nice-linux-x64-musl@1.1.1': + '@expo/fingerprint@0.20.6': resolution: { - integrity: sha512-xScCGnyj/oppsNPMnevsBe3pvNaoK7FGvMjT35riz9YdhB2WtTG47ZlbxtOLpjeO9SqqQ2J2igCmz6IJOD5JYw==, + integrity: sha512-cmC/6BOPRbdKr77Mgjwszb8aM0hY2RKBpMRCmjSdn9zIcn2FGor/ic4fHVr46cQFa1G6RDGg1GyAjRw3US4CCQ==, } - engines: { node: '>= 10' } - cpu: [x64] - os: [linux] - libc: [musl] + hasBin: true - '@napi-rs/nice-openharmony-arm64@1.1.1': + '@expo/image-utils@0.11.4': resolution: { - integrity: sha512-6uJPRVwVCLDeoOaNyeiW0gp2kFIM4r7PL2MczdZQHkFi9gVlgm+Vn+V6nTWRcu856mJ2WjYJiumEajfSm7arPQ==, + integrity: sha512-pn/4770DIEOcYZr484uazuwg20FX/qaDkeMRF6J+oxejynDmEmO8wLsCudaNShFE0BhyKGQTYrs2rsRhqrqESw==, } - engines: { node: '>= 10' } - cpu: [arm64] - os: [openharmony] - '@napi-rs/nice-win32-arm64-msvc@1.1.1': + '@expo/inline-modules@0.1.4': resolution: { - integrity: sha512-uoTb4eAvM5B2aj/z8j+Nv8OttPf2m+HVx3UjA5jcFxASvNhQriyCQF1OB1lHL43ZhW+VwZlgvjmP5qF3+59atA==, + integrity: sha512-8bPSCm//dv8raYfrQ4x79rCX52vMw0QzmnYYl4eSOAvEbGvDPPRGGdbrhZZ7oihU+hI1sZNS5kYEgqODgFwfsw==, } - engines: { node: '>= 10' } - cpu: [arm64] - os: [win32] - '@napi-rs/nice-win32-ia32-msvc@1.1.1': + '@expo/json-file@11.0.1': resolution: { - integrity: sha512-CNQqlQT9MwuCsg1Vd/oKXiuH+TcsSPJmlAFc5frFyX/KkOh0UpBLEj7aoY656d5UKZQMQFP7vJNa1DNUNORvug==, + integrity: sha512-zxHWj4MKKMAL29ZQSY/Fssx4Thluk40JmuGNaeS078wy/NhlFhnVi+rHHunulE3xJAJ0CM73m8VK2+GkF9eRwQ==, } - engines: { node: '>= 10' } - cpu: [ia32] - os: [win32] - '@napi-rs/nice-win32-x64-msvc@1.1.1': + '@expo/local-build-cache-provider@57.0.5': resolution: { - integrity: sha512-vB+4G/jBQCAh0jelMTY3+kgFy00Hlx2f2/1zjMoH821IbplbWZOkLiTYXQkygNTzQJTq5cvwBDgn2ppHD+bglQ==, + integrity: sha512-OwiNC0Uxu67TOH7TEQ94GLa4oNzNfbbItKGdy3QMfX+hCSZv2VvjcjRo5vttMHfXCnXa9KZIu3GBS9pvtDHWhA==, } - engines: { node: '>= 10' } - cpu: [x64] - os: [win32] - '@napi-rs/nice@1.1.1': + '@expo/log-box@57.0.2': resolution: { - integrity: sha512-xJIPs+bYuc9ASBl+cvGsKbGrJmS6fAKaSZCnT0lhahT5rhA2VVy9/EcIgd2JhtEuFOJNx7UHNn/qiTPTY4nrQw==, + integrity: sha512-ZsFyfIR7YCbQAdVLzuTUmMHofZC7ZS9ywYCJNPlLc78x59cI8GwXFEIVbRjjC0uJERpNtXx/tsNNnkhexXlzMw==, } - engines: { node: '>= 10' } + peerDependencies: + '@expo/dom-webview': ^57.0.1 + expo: '*' + react: '*' + react-native: '*' - '@napi-rs/wasm-runtime@0.2.4': + '@expo/metro-config@57.0.7': resolution: { - integrity: sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==, + integrity: sha512-bVfEkg4zF1cA62OqAdYXmFOooJ6TB/I+REi7Se6Ct+PbSC+89TwSqWXnYx34L08eIs4z+1ilgbATakTZpgefmQ==, } + peerDependencies: + expo: '*' + peerDependenciesMeta: + expo: + optional: true - '@napi-rs/wasm-runtime@1.1.6': + '@expo/metro-file-map@57.0.1': resolution: { - integrity: sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==, + integrity: sha512-8JXfVstZN7QnP4NianZZnlTVboOWR0sG8trUDNajOjnbGlPln29vponXM84tY+3tAHapz5/TxE53L0ixUwqPtA==, } - peerDependencies: - '@emnapi/core': ^1.7.1 - '@emnapi/runtime': ^1.7.1 - '@noble/hashes@2.2.0': + '@expo/metro@56.0.0': resolution: { - integrity: sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg==, + integrity: sha512-5gIgQHtEpjjvsjKfVtIv23a98LLRV0/y07PDShEwYSytAMlE3FSF8RHXqtHc1sUJL6dn7hnuIBpIbrLXXuVi0A==, } - engines: { node: '>= 20.19.0' } - '@nodelib/fs.scandir@2.1.5': + '@expo/osascript@2.7.1': resolution: { - integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, + integrity: sha512-Zn03EX6In7ts2lPUW2ESUSkEhEWQN1qqsiXjadtZMJOuZRkMiAg1ZQHuvz9DjByDWNJ2pBwAGyrts9lj9k389g==, } - engines: { node: '>= 8' } + engines: { node: '>=12' } - '@nodelib/fs.stat@2.0.5': + '@expo/package-manager@1.13.1': resolution: { - integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, + integrity: sha512-y/K+CaYYpZpNGZhSX4HyLT/vyIunFjNfyoxNysPBCefeLKI/VCx6f9LNPzrxayr3rCYO5bl9O8H+HRQK265Nkg==, } - engines: { node: '>= 8' } - '@nodelib/fs.walk@1.2.8': + '@expo/plist@0.8.1': resolution: { - integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, + integrity: sha512-3gTReGIUm0oRaMClsAJYxBnVPCl6fVpsl8HS+DTVxDhW4GyVyxg9E/Znm3BvcHtUJ51RJJI14pC1wvrNilCRHw==, } - engines: { node: '>= 8' } - '@nx/nx-darwin-arm64@22.7.5': + '@expo/prebuild-config@57.0.10': resolution: { - integrity: sha512-eoPtwx0qZqvRUD+VVOHm150AlSYwYoPxkDHBBGqKCn5nzPspb0lLWw8q83crM/L1M928YgK0WmGf3C++7eqsTA==, + integrity: sha512-myrS5NolFAQWD8g7QuqkettnkyJx3GRl603N6rlmqAMxmO5EU7sZu4EX2EsIKkva8QtpX84B0E17PsM9xXMsTQ==, } - cpu: [arm64] - os: [darwin] - '@nx/nx-darwin-x64@22.7.5': + '@expo/require-utils@57.0.4': resolution: { - integrity: sha512-VLOn/ZoEn3HfjSj+yIHLCM56/el79r+9I28CkZNHaSXJQWZ3edSkcgcfYjVxCurpN2VEwDQHLBeFCH8M+lQ7wQ==, + integrity: sha512-e7xbg/9BTQcsZE/oErafZXtI7kh5IgfasLJ97J5sFSzX2cA74pDvdlhW1KHVSaDkQyQv6h1LSLhsY7dEeOk7hw==, } - cpu: [x64] - os: [darwin] + peerDependencies: + typescript: ^5.0.0 || ^5.0.0-0 || ^6.0.0 || ^7.0.0 + peerDependenciesMeta: + typescript: + optional: true - '@nx/nx-freebsd-x64@22.7.5': + '@expo/router-server@57.0.4': resolution: { - integrity: sha512-LEVer/E2xfGvK9Go+imMQoEninOoq/38Z2bhV1SD3AThXrp1xaLFVkW5jQ6juebeVkAeztEoMLFlr576egS0vw==, + integrity: sha512-ucqCP0hK8nZb9+S8QJYdQxNCkfRClzkKdg2RpWYDKDYgRIHyoRyxEDRgDgvbhH+q78yfY83abU8OTx8MMOrf1g==, } - cpu: [x64] - os: [freebsd] + peerDependencies: + '@expo/metro-runtime': ^57.0.7 + expo: '*' + expo-constants: ^57.0.7 + expo-font: ^57.0.1 + expo-router: '*' + expo-server: ^57.0.1 + react: '*' + react-dom: '*' + react-server-dom-webpack: ~19.0.1 || ~19.1.2 || ~19.2.1 + peerDependenciesMeta: + '@expo/metro-runtime': + optional: true + expo-router: + optional: true + react-dom: + optional: true + react-server-dom-webpack: + optional: true - '@nx/nx-linux-arm-gnueabihf@22.7.5': + '@expo/schema-utils@57.0.2': resolution: { - integrity: sha512-NP27EFGpmFJM6RL1Ey/AFJ7gA2xuqtIHaw6jjSNGvfrnZRUNaway30GrVaGGeODf0DsvAty/unqoBMPy6kDHbw==, + integrity: sha512-fMu/jyN0l1Wzv7XkeWR4IYCx1M8ryui3FdBNGrWwbRgJ7EhxXxK8E2jxP2W3pbgUwUY0V3hG8+GyfCZwny+Lxw==, } - cpu: [arm] - os: [linux] - '@nx/nx-linux-arm64-gnu@22.7.5': + '@expo/sdk-runtime-versions@1.0.0': resolution: { - integrity: sha512-QLnkJl3HkHsPfpLiNiAiMfpfAeFpic0U1diAxF8RqChOkCpQ7ulvyBVgE1UrQxvhd+gFQ3ed5RNDxtCRw8nTiw==, + integrity: sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==, } - cpu: [arm64] - os: [linux] - libc: [glibc] - '@nx/nx-linux-arm64-musl@22.7.5': + '@expo/spawn-async@1.8.0': resolution: { - integrity: sha512-cEP6KmwBgnb38+jTTaibWCjwXcHmigqhTfy0tN1be7WZr6bHxbqNLsXqKRN70PSNA3HouZcxw1cdRL8tqbPBBA==, + integrity: sha512-eb9xxd/LbuEGSdua4NumCu/McVB9EM+F/JxB9pWgnERw4HQ9XyTNH1KapG6oqLWR8TuRK2LQfzJlmNi94CVobw==, } - cpu: [arm64] - os: [linux] - libc: [musl] + engines: { node: '>=12' } - '@nx/nx-linux-x64-gnu@22.7.5': + '@expo/sudo-prompt@9.3.2': resolution: { - integrity: sha512-tbaX1tZCSpGifDNBfDdEZAMxVF3Yg4bhFP/bm1needc0diqb+Zflc0u5tM5/6BWDMITQDwenJVsNiQ8ZdtJURA==, + integrity: sha512-HHQigo3rQWKMDzYDLkubN5WQOYXJJE2eNqIQC2axC2iO3mHdwnIR7FgZVvHWtBwAdzBgAP0ECp8KqS8TiMKvgw==, } - cpu: [x64] - os: [linux] - libc: [glibc] - '@nx/nx-linux-x64-musl@22.7.5': + '@expo/ws-tunnel@2.0.0': resolution: { - integrity: sha512-H0M7csOZIgPT822LqjxSXzf4MXRND15vIkAQe3F3Jlr3Si8LC3tzbL52aVcRfgb8MF/xOB5U47mSwxWt1M2bPQ==, + integrity: sha512-j+JfTRdCk820J9dU0sA2SqshQIKFOMo7ED84w9MJFcebfbNQgsLztEY/SABDkGnjatrW4xGqnUhVRxSBVyCkXw==, } - cpu: [x64] - os: [linux] - libc: [musl] + peerDependencies: + ws: ^8.0.0 - '@nx/nx-win32-arm64-msvc@22.7.5': + '@expo/xcpretty@4.4.4': resolution: { - integrity: sha512-JTcZch9YAnDL1gbhqePz3DZ4x7iYemLn1yJzrjbbXAmXju2eiiJiZvJJHbV06+SP9HKXDT8RjTKuAWTdVxnHug==, + integrity: sha512-4aQzz9vgxcNXFfo/iyNgDDYfsU5XGKKxWxZopw0cVotHiW+U8IJbIxMaxsINs6bHhtkG3StKNPcOrn3eBuxKPw==, } - cpu: [arm64] - os: [win32] + hasBin: true - '@nx/nx-win32-x64-msvc@22.7.5': + '@hapi/hoek@9.3.0': resolution: { - integrity: sha512-ngcMyHdBJ9FSz2nHdbZ7gtJlFq0O2b05sPAsVMkZ18CKzdaA1qrBDJfsMO49hPCny505eiT766+CkKdaCDl5kA==, + integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==, } - cpu: [x64] - os: [win32] - '@observablehq/plot@0.6.17': + '@hapi/topo@5.1.0': resolution: { - integrity: sha512-/qaXP/7mc4MUS0s4cPPFASDRjtsWp85/TbfsciqDgU1HwYixbSbbytNuInD8AcTYC3xaxACgVX06agdfQy9W+g==, + integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==, } - engines: { node: '>=12' } - '@observablehq/sample-datasets@1.0.1': + '@img/colour@1.1.0': resolution: { - integrity: sha512-2gc2wteMytPgDalqUPdLHEFInNb8J3vI17oniIYS89B1iwuO4EPXNWgzpfryyB4CH35CpXL0BgHfVeI+qICWwA==, + integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==, } + engines: { node: '>=18' } - '@oxc-project/types@0.139.0': + '@img/sharp-darwin-arm64@0.34.5': resolution: { - integrity: sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==, + integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==, } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [arm64] + os: [darwin] - '@parcel/watcher-android-arm64@2.6.0': + '@img/sharp-darwin-x64@0.34.5': resolution: { - integrity: sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA==, + integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==, } - engines: { node: '>= 10.0.0' } - cpu: [arm64] - os: [android] + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [x64] + os: [darwin] - '@parcel/watcher-darwin-arm64@2.6.0': + '@img/sharp-libvips-darwin-arm64@1.2.4': resolution: { - integrity: sha512-Y3QV0gl7Q1zbfueunkWIERICbEojQFCgpyG7YqOGNFLsckXyI1xu9mAIUpKY9QBYzBtSkN8dBPwd3yiAO9ovMw==, + integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==, } - engines: { node: '>= 10.0.0' } cpu: [arm64] os: [darwin] - '@parcel/watcher-darwin-x64@2.6.0': + '@img/sharp-libvips-darwin-x64@1.2.4': resolution: { - integrity: sha512-Ohv6OpzhUfKYD7Beb8kDvG0jbIxORCYY1JRdZnaBtnjjkJxgD7ZVL0nw2sCYd0yTMKTvz3nnTnOF3cDifK+kvw==, + integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==, } - engines: { node: '>= 10.0.0' } cpu: [x64] os: [darwin] - '@parcel/watcher-freebsd-x64@2.6.0': + '@img/sharp-libvips-linux-arm64@1.2.4': resolution: { - integrity: sha512-5HmXvDgs8VK+74jF9y9/2FE3/OnlcKmc56tjmSrEuZjpSZOGL+fvAu+HKJBdPs9uwoP2hE6TlSUpXZ/C5jUFmQ==, + integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==, } - engines: { node: '>= 10.0.0' } - cpu: [x64] - os: [freebsd] + cpu: [arm64] + os: [linux] + libc: [glibc] - '@parcel/watcher-linux-arm-glibc@2.6.0': + '@img/sharp-libvips-linux-arm@1.2.4': resolution: { - integrity: sha512-Ps/hui3A+vMbjdqlqAowK2ZL8+BO8dBjxeWXj6npTBs3jx4wWmbPpaLuqwrQrSqIVMCnpWo238bJ1U37GhQOYg==, + integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==, } - engines: { node: '>= 10.0.0' } cpu: [arm] os: [linux] libc: [glibc] - '@parcel/watcher-linux-arm-musl@2.6.0': + '@img/sharp-libvips-linux-ppc64@1.2.4': resolution: { - integrity: sha512-9c6AUHgHoG+IY88MRIHupztQiQnrbqHYQjkM2btA+Bf/wQnQMuiD0Wfk1EVv3TlNT3x41uU71rn6E4xh/+zvkw==, + integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==, } - engines: { node: '>= 10.0.0' } - cpu: [arm] + cpu: [ppc64] os: [linux] - libc: [musl] + libc: [glibc] - '@parcel/watcher-linux-arm64-glibc@2.6.0': + '@img/sharp-libvips-linux-riscv64@1.2.4': resolution: { - integrity: sha512-yHRqS2owEXe6Hic9z6Mh1ECsCd+ODVOGvZDyciqRd21+v+o+DnXMOrw50DSpIG2sb8GPEaPPmfeCAWKPJdq46g==, + integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==, } - engines: { node: '>= 10.0.0' } - cpu: [arm64] + cpu: [riscv64] os: [linux] libc: [glibc] - '@parcel/watcher-linux-arm64-musl@2.6.0': + '@img/sharp-libvips-linux-s390x@1.2.4': resolution: { - integrity: sha512-WhB2e/V7rqdHHWZusBSPuy5Ei8S6lSz6FE5TKKQz5h3a0O+C+mhY7vxU9b/stqvMb8beLnPY82ZrFTLKs+SrKA==, + integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==, } - engines: { node: '>= 10.0.0' } - cpu: [arm64] + cpu: [s390x] os: [linux] - libc: [musl] + libc: [glibc] - '@parcel/watcher-linux-x64-glibc@2.6.0': + '@img/sharp-libvips-linux-x64@1.2.4': resolution: { - integrity: sha512-ulGE6x6Oz6iAwg75T8YQSoguBWasniIbX+QWpaYPcCnDOpdWX3k+4xbEYPZVLxOuoJI+svJJPD3sEj8G7lrQ3A==, + integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==, } - engines: { node: '>= 10.0.0' } cpu: [x64] os: [linux] libc: [glibc] - '@parcel/watcher-linux-x64-musl@2.6.0': + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': resolution: { - integrity: sha512-tkBYKt7YQrjIJWYDnto2YgO8MRkjlMTSNoRHzsXinBqbLdeOM3L32wPZJvIZxqaLMfSlS/4sUjH/6STVP/XDLw==, + integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==, + } + cpu: [arm64] + os: [linux] + libc: [musl] + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + resolution: + { + integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==, } - engines: { node: '>= 10.0.0' } cpu: [x64] os: [linux] libc: [musl] - '@parcel/watcher-win32-arm64@2.6.0': + '@img/sharp-linux-arm64@0.34.5': resolution: { - integrity: sha512-gIZAP23jaHjGWasY/TY6yL7NHFClf0Ga7FN+iINvk+KN94rhm94lYZhFsbYFNcA04/onvGD9kKmiJLJB2HbNwQ==, + integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==, } - engines: { node: '>= 10.0.0' } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [arm64] - os: [win32] + os: [linux] + libc: [glibc] - '@parcel/watcher-win32-x64@2.6.0': + '@img/sharp-linux-arm@0.34.5': resolution: { - integrity: sha512-cA+/pXV2YkfxlIcXOQ5fSWqAzzPyD78/x5qbK/I0vUkrlYHA8TIz+MXjAbGouguKVSI4bOmkTSJ1/poVSsgt+A==, + integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==, } - engines: { node: '>= 10.0.0' } - cpu: [x64] - os: [win32] + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [arm] + os: [linux] + libc: [glibc] - '@parcel/watcher@2.6.0': + '@img/sharp-linux-ppc64@0.34.5': resolution: { - integrity: sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w==, + integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==, } - engines: { node: '>= 10.0.0' } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [ppc64] + os: [linux] + libc: [glibc] - '@poppinss/colors@4.1.6': + '@img/sharp-linux-riscv64@0.34.5': resolution: { - integrity: sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==, + integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==, } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [riscv64] + os: [linux] + libc: [glibc] - '@poppinss/dumper@0.6.5': + '@img/sharp-linux-s390x@0.34.5': resolution: { - integrity: sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw==, + integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==, } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [s390x] + os: [linux] + libc: [glibc] - '@poppinss/exception@1.2.3': + '@img/sharp-linux-x64@0.34.5': resolution: { - integrity: sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==, + integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==, } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [x64] + os: [linux] + libc: [glibc] - '@reduxjs/toolkit@2.12.0': + '@img/sharp-linuxmusl-arm64@0.34.5': resolution: { - integrity: sha512-KiT+RzZbp6mQET+Mg+h2c97+9j1sNflUxQkIHI7Yuzf6Peu+OYpmkn6nbHWmLLWj+1ZODUJFwGZ7gx3L9R9EOw==, + integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==, } - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18 || ^19 - react-redux: ^7.2.1 || ^8.1.3 || ^9.0.0 - peerDependenciesMeta: - react: - optional: true - react-redux: - optional: true + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [arm64] + os: [linux] + libc: [musl] - '@rolldown/binding-android-arm64@1.1.5': + '@img/sharp-linuxmusl-x64@0.34.5': resolution: { - integrity: sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==, + integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==, } - engines: { node: ^20.19.0 || >=22.12.0 } - cpu: [arm64] - os: [android] + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [x64] + os: [linux] + libc: [musl] - '@rolldown/binding-darwin-arm64@1.1.5': + '@img/sharp-wasm32@0.34.5': resolution: { - integrity: sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw==, + integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==, } - engines: { node: ^20.19.0 || >=22.12.0 } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [wasm32] + + '@img/sharp-win32-arm64@0.34.5': + resolution: + { + integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [arm64] - os: [darwin] + os: [win32] - '@rolldown/binding-darwin-x64@1.1.5': + '@img/sharp-win32-ia32@0.34.5': resolution: { - integrity: sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g==, + integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==, } - engines: { node: ^20.19.0 || >=22.12.0 } - cpu: [x64] - os: [darwin] + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [ia32] + os: [win32] - '@rolldown/binding-freebsd-x64@1.1.5': + '@img/sharp-win32-x64@0.34.5': resolution: { - integrity: sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA==, + integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==, } - engines: { node: ^20.19.0 || >=22.12.0 } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [x64] - os: [freebsd] + os: [win32] - '@rolldown/binding-linux-arm-gnueabihf@1.1.5': + '@inquirer/external-editor@1.0.3': resolution: { - integrity: sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw==, + integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==, } - engines: { node: ^20.19.0 || >=22.12.0 } - cpu: [arm] - os: [linux] + engines: { node: '>=18' } + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true - '@rolldown/binding-linux-arm64-gnu@1.1.5': + '@isaacs/ttlcache@1.4.1': resolution: { - integrity: sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q==, + integrity: sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==, } - engines: { node: ^20.19.0 || >=22.12.0 } - cpu: [arm64] - os: [linux] - libc: [glibc] + engines: { node: '>=12' } - '@rolldown/binding-linux-arm64-musl@1.1.5': + '@jest/diff-sequences@30.0.1': resolution: { - integrity: sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA==, + integrity: sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==, } - engines: { node: ^20.19.0 || >=22.12.0 } - cpu: [arm64] - os: [linux] - libc: [musl] + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } - '@rolldown/binding-linux-ppc64-gnu@1.1.5': + '@jest/schemas@29.6.3': resolution: { - integrity: sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg==, + integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==, } - engines: { node: ^20.19.0 || >=22.12.0 } - cpu: [ppc64] - os: [linux] - libc: [glibc] + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - '@rolldown/binding-linux-s390x-gnu@1.1.5': + '@jest/types@29.6.3': resolution: { - integrity: sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA==, + integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==, } - engines: { node: ^20.19.0 || >=22.12.0 } - cpu: [s390x] - os: [linux] - libc: [glibc] + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - '@rolldown/binding-linux-x64-gnu@1.1.5': + '@jridgewell/gen-mapping@0.3.13': resolution: { - integrity: sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ==, + integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==, } - engines: { node: ^20.19.0 || >=22.12.0 } - cpu: [x64] - os: [linux] - libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.1.5': + '@jridgewell/remapping@2.3.5': resolution: { - integrity: sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg==, + integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==, } - engines: { node: ^20.19.0 || >=22.12.0 } - cpu: [x64] - os: [linux] - libc: [musl] - '@rolldown/binding-openharmony-arm64@1.1.5': + '@jridgewell/resolve-uri@3.1.2': resolution: { - integrity: sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw==, + integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==, } - engines: { node: ^20.19.0 || >=22.12.0 } - cpu: [arm64] - os: [openharmony] + engines: { node: '>=6.0.0' } - '@rolldown/binding-wasm32-wasi@1.1.5': + '@jridgewell/source-map@0.3.11': resolution: { - integrity: sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA==, + integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==, } - engines: { node: ^20.19.0 || >=22.12.0 } - cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.1.5': + '@jridgewell/sourcemap-codec@1.5.5': resolution: { - integrity: sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw==, + integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==, } - engines: { node: ^20.19.0 || >=22.12.0 } - cpu: [arm64] - os: [win32] - '@rolldown/binding-win32-x64-msvc@1.1.5': + '@jridgewell/trace-mapping@0.3.31': resolution: { - integrity: sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA==, + integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==, } - engines: { node: ^20.19.0 || >=22.12.0 } - cpu: [x64] - os: [win32] - '@rolldown/pluginutils@1.0.1': + '@jridgewell/trace-mapping@0.3.9': resolution: { - integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==, + integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==, } - '@rollup/plugin-json@6.1.0': + '@kurkle/color@0.3.4': resolution: { - integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==, + integrity: sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==, } - engines: { node: '>=14.0.0' } - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - '@rollup/pluginutils@5.4.0': + '@lit-labs/ssr-dom-shim@1.6.0': resolution: { - integrity: sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==, + integrity: sha512-VHb0ALPMTlgKjM6yIxxoQNnpKyUKLD04VzeQdsiXkMqkvYlAHxq9glGLmgbb889/1GsohSOAjvQYoiBppXFqrQ==, } - engines: { node: '>=14.0.0' } - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - '@rollup/rollup-android-arm-eabi@4.62.3': + '@lit/reactive-element@2.1.2': resolution: { - integrity: sha512-c0wdcekXtQvvn5Tsrk/+op/gUArrbWaFduBnTLP2l1cKLSQs4diMWjJw3m6A0DdzT8dAAX95KpkJ3qynCePbmw==, + integrity: sha512-pbCDiVMnne1lYUIaYNN5wrwQXDtHaYtg7YEFPeW+hws6U47WeFvISGUWekPGKWOP1ygrs0ef0o1VJMk1exos5A==, } - cpu: [arm] - os: [android] - '@rollup/rollup-android-arm64@4.62.3': + '@manypkg/find-root@1.1.0': resolution: { - integrity: sha512-3YjElDdWN+qXAFbJ/CzPV+0wspLqh54k/I6GfdYtEJRqg7buSgc1yPM3B+93j1M4neobtkATHZTmxK2AMVGfnA==, + integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==, } - cpu: [arm64] - os: [android] - '@rollup/rollup-darwin-arm64@4.62.3': + '@manypkg/get-packages@1.1.3': resolution: { - integrity: sha512-Pch2pFNOxxz1hTjypIdPyRTR6riiwRl84+VcN9djS680fw+Co1nAJINrdpqp7KV0NvyuU8ilZXZCjd7ykJl1GQ==, + integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==, } - cpu: [arm64] - os: [darwin] - '@rollup/rollup-darwin-x64@4.62.3': + '@napi-rs/nice-android-arm-eabi@1.1.1': resolution: { - integrity: sha512-LEuncFUHFiF8t4yZVZvvZA1wk0pjAscRnsrn1EfTEmN4HXotBi2YtcnLRyaK6UbuczW7xZS5ES+81Rdz8Z0T6g==, + integrity: sha512-kjirL3N6TnRPv5iuHw36wnucNqXAO46dzK9oPb0wj076R5Xm8PfUVA9nAFB5ZNMmfJQJVKACAPd/Z2KYMppthw==, } - cpu: [x64] - os: [darwin] + engines: { node: '>= 10' } + cpu: [arm] + os: [android] - '@rollup/rollup-freebsd-arm64@4.62.3': + '@napi-rs/nice-android-arm64@1.1.1': resolution: { - integrity: sha512-zvBUvsQUpOWALdDsk6qbS8bXf2VxmPisuudNDrY7x0p0jBdsoZl8HsHczIOgkQiZldmcacMKtBzpoGVNeIe2bQ==, + integrity: sha512-blG0i7dXgbInN5urONoUCNf+DUEAavRffrO7fZSeoRMJc5qD+BJeNcpr54msPF6qfDD6kzs9AQJogZvT2KD5nw==, } + engines: { node: '>= 10' } cpu: [arm64] - os: [freebsd] + os: [android] - '@rollup/rollup-freebsd-x64@4.62.3': + '@napi-rs/nice-darwin-arm64@1.1.1': resolution: { - integrity: sha512-C2KmNrcSem/AMg984H/dev+si0lieQGdXdR/lYGJnuumXnFb9Y7QdiI62obFdLlxRYLBv4P0eUVIDbD4c1vVvw==, + integrity: sha512-s/E7w45NaLqTGuOjC2p96pct4jRfo61xb9bU1unM/MJ/RFkKlJyJDx7OJI/O0ll/hrfpqKopuAFDV8yo0hfT7A==, } - cpu: [x64] - os: [freebsd] + engines: { node: '>= 10' } + cpu: [arm64] + os: [darwin] - '@rollup/rollup-linux-arm-gnueabihf@4.62.3': + '@napi-rs/nice-darwin-x64@1.1.1': resolution: { - integrity: sha512-ggXnsTAEzNQx74XpunRsiZ9aBZDsI7XIa0hm2nzR9f4WzH5/f/d73ZSDaC5ejJ8YLY4NW+V3wr0tjOaeCq8hqA==, + integrity: sha512-dGoEBnVpsdcC+oHHmW1LRK5eiyzLwdgNQq3BmZIav+9/5WTZwBYX7r5ZkQC07Nxd3KHOCkgbHSh4wPkH1N1LiQ==, } - cpu: [arm] - os: [linux] - libc: [glibc] + engines: { node: '>= 10' } + cpu: [x64] + os: [darwin] - '@rollup/rollup-linux-arm-musleabihf@4.62.3': + '@napi-rs/nice-freebsd-x64@1.1.1': resolution: { - integrity: sha512-2vng+FlzNUhKZxtej3IUqJgbZoQk2M/dwQM20+ULV0R/E/8tr9/P6uEf2iiGIk4HL0zMKh5Jry7mUHdUOvyGgA==, + integrity: sha512-kHv4kEHAylMYmlNwcQcDtXjklYp4FCf0b05E+0h6nDHsZ+F0bDe04U/tXNOqrx5CmIAth4vwfkjjUmp4c4JktQ==, } - cpu: [arm] - os: [linux] - libc: [musl] + engines: { node: '>= 10' } + cpu: [x64] + os: [freebsd] - '@rollup/rollup-linux-arm64-gnu@4.62.3': + '@napi-rs/nice-linux-arm-gnueabihf@1.1.1': resolution: { - integrity: sha512-LLLFZKt4/Nraf9rxDkhiU8QVgLF4WmCkfr0L4fj0fPfIZFBib0DeiFk1hhaYKd03LFAFJcxHslhDFlNJLylf5Q==, + integrity: sha512-E1t7K0efyKXZDoZg1LzCOLxgolxV58HCkaEkEvIYQx12ht2pa8hoBo+4OB3qh7e+QiBlp1SRf+voWUZFxyhyqg==, } - cpu: [arm64] + engines: { node: '>= 10' } + cpu: [arm] os: [linux] - libc: [glibc] - '@rollup/rollup-linux-arm64-musl@4.62.3': + '@napi-rs/nice-linux-arm64-gnu@1.1.1': resolution: { - integrity: sha512-WJkdQCvS9sWNOUBJZfQRKpZGFBztRzcowI+nndmflKgU4XY+3a420FgTOSKTsVqJbnzSxeT4vaJalpOaPo2YCQ==, + integrity: sha512-CIKLA12DTIZlmTaaKhQP88R3Xao+gyJxNWEn04wZwC2wmRapNnxCUZkVwggInMJvtVElA+D4ZzOU5sX4jV+SmQ==, } + engines: { node: '>= 10' } cpu: [arm64] os: [linux] - libc: [musl] - - '@rollup/rollup-linux-loong64-gnu@4.62.3': - resolution: - { - integrity: sha512-PwHXCCS2n64/1Ot6rP1YEYA02MGYBcQlr8CSZZyrUG2O7NH6NklYmvr9v3Jy+5e/eDeNchc/ukmKJi9LuflMIQ==, - } - cpu: [loong64] - os: [linux] libc: [glibc] - '@rollup/rollup-linux-loong64-musl@4.62.3': + '@napi-rs/nice-linux-arm64-musl@1.1.1': resolution: { - integrity: sha512-vUjxINQu3RC8NZS3ykk1gN65gIz8pAopOq2HXuZhiIxHdx7TFvDG+jgrdSgInu1Eza4/Rfi2VzZgyIgEH4WOaw==, + integrity: sha512-+2Rzdb3nTIYZ0YJF43qf2twhqOCkiSrHx2Pg6DJaCPYhhaxbLcdlV8hCRMHghQ+EtZQWGNcS2xF4KxBhSGeutg==, } - cpu: [loong64] + engines: { node: '>= 10' } + cpu: [arm64] os: [linux] libc: [musl] - '@rollup/rollup-linux-ppc64-gnu@4.62.3': + '@napi-rs/nice-linux-ppc64-gnu@1.1.1': resolution: { - integrity: sha512-wzko4aJ13+0G3kGnviCg5gnXFKd40izKsrf2uOw12US4XqprkDrmwOpeW14aSNa37V8bfPcz5Fkob6LZ3BAPmA==, + integrity: sha512-4FS8oc0GeHpwvv4tKciKkw3Y4jKsL7FRhaOeiPei0X9T4Jd619wHNe4xCLmN2EMgZoeGg+Q7GY7BsvwKpL22Tg==, } + engines: { node: '>= 10' } cpu: [ppc64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-ppc64-musl@4.62.3': - resolution: - { - integrity: sha512-8120ue0JUMSwy11stlwnfdX3pPd+WZYGCDBwEHWtIHi6pOpZmsEF5QKB7a/UN+XFdqvobxz98kv8RTqikyCEBw==, - } - cpu: [ppc64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-riscv64-gnu@4.62.3': + '@napi-rs/nice-linux-riscv64-gnu@1.1.1': resolution: { - integrity: sha512-XLFHnR3tXMjbOCh2vtVJHmxt+995uJsTERQyseFDRA0xxMxyTZPLa3OIUlyFaO4mF/Lu0FjmWHCuPXJT1n/IOg==, + integrity: sha512-HU0nw9uD4FO/oGCCk409tCi5IzIZpH2agE6nN4fqpwVlCn5BOq0MS1dXGjXaG17JaAvrlpV5ZeyZwSon10XOXw==, } + engines: { node: '>= 10' } cpu: [riscv64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-riscv64-musl@4.62.3': - resolution: - { - integrity: sha512-se6yXvNGMIl0f+RQzyh7XAmia8/9kplQx424wnG2w0C1oi6XgO6Y8otKhdXFHbHs88Ihavzmvh1NWjuovE76BQ==, - } - cpu: [riscv64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-s390x-gnu@4.62.3': + '@napi-rs/nice-linux-s390x-gnu@1.1.1': resolution: { - integrity: sha512-gNoxRefktVIiGflpONuxWWXZAzIQG++z9qHO3xKwk4WdDMuQja3JHGfE1u0i3PfPDyvhypdk+WrgIJqLhGG7sg==, + integrity: sha512-2YqKJWWl24EwrX0DzCQgPLKQBxYDdBxOHot1KWEq7aY2uYeX+Uvtv4I8xFVVygJDgf6/92h9N3Y43WPx8+PAgQ==, } + engines: { node: '>= 10' } cpu: [s390x] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.62.3': + '@napi-rs/nice-linux-x64-gnu@1.1.1': resolution: { - integrity: sha512-V4KtWtQfAFMU7+9/A/VDps/VI8CHd3cYz0L8sgJzz8qK7eY7wI4ruFD82UYIYvW9Z4DtlTfhQcsl4XyPHW5uSg==, + integrity: sha512-/gaNz3R92t+dcrfCw/96pDopcmec7oCcAQ3l/M+Zxr82KT4DljD37CpgrnXV+pJC263JkW572pdbP3hP+KjcIg==, } + engines: { node: '>= 10' } cpu: [x64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-musl@4.62.3': + '@napi-rs/nice-linux-x64-musl@1.1.1': resolution: { - integrity: sha512-LBx9LYXvj2CBkMkjLdNAWLwH0MLMin7do2VcVo9kVPibGLkY0BQQut2fv7NVqkXqZ/CrAu9LqDHVV1xHCMpCPw==, + integrity: sha512-xScCGnyj/oppsNPMnevsBe3pvNaoK7FGvMjT35riz9YdhB2WtTG47ZlbxtOLpjeO9SqqQ2J2igCmz6IJOD5JYw==, } + engines: { node: '>= 10' } cpu: [x64] os: [linux] libc: [musl] - '@rollup/rollup-openbsd-x64@4.62.3': - resolution: - { - integrity: sha512-ABVf3Q0RCu7NcyCCOZQI0pJ3GuSdfSl8EXcy88QtdceIMIoCUdfhsJChZ64L9zVM2aJHjde1Bhn5uqSRcX9ySA==, - } - cpu: [x64] - os: [openbsd] - - '@rollup/rollup-openharmony-arm64@4.62.3': + '@napi-rs/nice-openharmony-arm64@1.1.1': resolution: { - integrity: sha512-+2Cy/ldweGBLlPIKsQLF8U5N44a0KDdbrk1rAjHOM9M2K+kGdIVjHLmmrZIcx+9Ny3ke/1JomCsDI1ocb11+sg==, + integrity: sha512-6uJPRVwVCLDeoOaNyeiW0gp2kFIM4r7PL2MczdZQHkFi9gVlgm+Vn+V6nTWRcu856mJ2WjYJiumEajfSm7arPQ==, } + engines: { node: '>= 10' } cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.62.3': + '@napi-rs/nice-win32-arm64-msvc@1.1.1': resolution: { - integrity: sha512-dtZvzc8BedpSaFNy75x6uiWwAGTH+aZHDtdrqP6qk+WcLJrfti6sGje1ZJ9UxyzDLF23d/mV+PaMwuC0hL7UVA==, + integrity: sha512-uoTb4eAvM5B2aj/z8j+Nv8OttPf2m+HVx3UjA5jcFxASvNhQriyCQF1OB1lHL43ZhW+VwZlgvjmP5qF3+59atA==, } + engines: { node: '>= 10' } cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.62.3': + '@napi-rs/nice-win32-ia32-msvc@1.1.1': resolution: { - integrity: sha512-Rj8Ra4noo+aYy7sKBggCx0407mws34kAb1ySyWuq5DAtFBQdkSwnsjCgPrhPe9cvgBKZIukpE+CVHvORCS93kQ==, + integrity: sha512-CNQqlQT9MwuCsg1Vd/oKXiuH+TcsSPJmlAFc5frFyX/KkOh0UpBLEj7aoY656d5UKZQMQFP7vJNa1DNUNORvug==, } + engines: { node: '>= 10' } cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.62.3': + '@napi-rs/nice-win32-x64-msvc@1.1.1': resolution: { - integrity: sha512-vp7N084ew/odXn2gi/mzm9mUkQu9l6AiN6dt4IeUM2Uvm9o+cVmP+YkqbMOteLbiGgqBBlJZjIMYVCfOOIVbVQ==, + integrity: sha512-vB+4G/jBQCAh0jelMTY3+kgFy00Hlx2f2/1zjMoH821IbplbWZOkLiTYXQkygNTzQJTq5cvwBDgn2ppHD+bglQ==, } + engines: { node: '>= 10' } cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.62.3': + '@napi-rs/nice@1.1.1': resolution: { - integrity: sha512-MOG/3gTOn4Fwf574RVOaY61I5o6P90legkFADiTyn1hyjNydT+cerU2rLUwPdZkKKyJ+iT+K9p7WXK4LM1Ka6g==, + integrity: sha512-xJIPs+bYuc9ASBl+cvGsKbGrJmS6fAKaSZCnT0lhahT5rhA2VVy9/EcIgd2JhtEuFOJNx7UHNn/qiTPTY4nrQw==, } - cpu: [x64] - os: [win32] + engines: { node: '>= 10' } - '@rollup/wasm-node@4.62.3': + '@napi-rs/wasm-runtime@0.2.4': resolution: { - integrity: sha512-sEOQWamme1YgXeVcE1JkB1k44RwtPWcpYpGUW1Lso7bOj+Ay9lN2Pak/CcfNeC4xqIPNhYSabQNaWYkJJR7m8Q==, + integrity: sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==, } - engines: { node: '>=18.0.0', npm: '>=8.0.0' } - hasBin: true - '@sindresorhus/is@7.2.0': + '@napi-rs/wasm-runtime@1.1.6': resolution: { - integrity: sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==, + integrity: sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==, } - engines: { node: '>=18' } + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 - '@speed-highlight/core@1.2.17': + '@noble/hashes@2.2.0': resolution: { - integrity: sha512-Z92FwKpCtfaW1V0jTU/fh3QzYEZN8wDwrzRIBoADCJfn4mJCNcJN/XegifX7BDrQ8/h9Xh/JnbyMchL0FqXrkg==, + integrity: sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg==, } + engines: { node: '>= 20.19.0' } - '@standard-schema/spec@1.1.0': + '@nodelib/fs.scandir@2.1.5': resolution: { - integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==, + integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, } + engines: { node: '>= 8' } - '@standard-schema/utils@0.3.0': + '@nodelib/fs.stat@2.0.5': resolution: { - integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==, + integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, } + engines: { node: '>= 8' } - '@sveltejs/acorn-typescript@1.0.11': + '@nodelib/fs.walk@1.2.8': resolution: { - integrity: sha512-LFuZUkjJ9iF7JZye/aG5XM0SFcQ5VyL0oVX4WJ9dc0Va3R3s0OauX1BESVCb+YN/ol8TAfqGDDAQsTG627Y5kw==, + integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, } - peerDependencies: - acorn: ^8.9.0 + engines: { node: '>= 8' } - '@sveltejs/load-config@0.2.1': + '@nx/nx-darwin-arm64@22.7.5': resolution: { - integrity: sha512-5m3B2cbqQ4TbwW6Xkh66Ntw6dD7gNc77cCxABTTesWcq9jxIzMgTk97pZx5vEtvQx8iokgi7GIphqZe+PGwcZA==, + integrity: sha512-eoPtwx0qZqvRUD+VVOHm150AlSYwYoPxkDHBBGqKCn5nzPspb0lLWw8q83crM/L1M928YgK0WmGf3C++7eqsTA==, } - engines: { node: '>= 18.0.0' } + cpu: [arm64] + os: [darwin] - '@sveltejs/package@2.5.8': + '@nx/nx-darwin-x64@22.7.5': resolution: { - integrity: sha512-zeBbsXYvHiBu56v4gJaGQoEHzg96w0E1j3dOMX8vo56s6vI5eQ57ZEZhudjwjnegnVitRRu5MrmhO0eNvaonIw==, + integrity: sha512-VLOn/ZoEn3HfjSj+yIHLCM56/el79r+9I28CkZNHaSXJQWZ3edSkcgcfYjVxCurpN2VEwDQHLBeFCH8M+lQ7wQ==, } - engines: { node: ^16.14 || >=18 } - hasBin: true - peerDependencies: - svelte: ^3.44.0 || ^4.0.0 || ^5.0.0-next.1 + cpu: [x64] + os: [darwin] - '@sveltejs/vite-plugin-svelte@7.2.0': + '@nx/nx-freebsd-x64@22.7.5': resolution: { - integrity: sha512-1SpkuMSRLfugrVX+IrKfE1RUegzo8AQzKQ6qQPfVzbcWi5IhuTPaKb5ZrLpucleFznkc4/RTeSPoRnGWFxX+EQ==, + integrity: sha512-LEVer/E2xfGvK9Go+imMQoEninOoq/38Z2bhV1SD3AThXrp1xaLFVkW5jQ6juebeVkAeztEoMLFlr576egS0vw==, } - engines: { node: ^20.19 || ^22.12 || >=24 } - peerDependencies: - svelte: ^5.46.4 - vite: ^8.0.0-beta.7 || ^8.0.0 + cpu: [x64] + os: [freebsd] - '@tsrx/core@0.1.48': + '@nx/nx-linux-arm-gnueabihf@22.7.5': resolution: { - integrity: sha512-IgkkLjApPKCGvBvwcOtLT6bACFglB5RBKW9fYErYMXJC6bxk/GM1lVAnuV9FiadiZ5jXrTw9uTxbZULncycSQQ==, + integrity: sha512-NP27EFGpmFJM6RL1Ey/AFJ7gA2xuqtIHaw6jjSNGvfrnZRUNaway30GrVaGGeODf0DsvAty/unqoBMPy6kDHbw==, } + cpu: [arm] + os: [linux] - '@tybys/wasm-util@0.10.3': + '@nx/nx-linux-arm64-gnu@22.7.5': resolution: { - integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==, + integrity: sha512-QLnkJl3HkHsPfpLiNiAiMfpfAeFpic0U1diAxF8RqChOkCpQ7ulvyBVgE1UrQxvhd+gFQ3ed5RNDxtCRw8nTiw==, } + cpu: [arm64] + os: [linux] + libc: [glibc] - '@tybys/wasm-util@0.9.0': + '@nx/nx-linux-arm64-musl@22.7.5': resolution: { - integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==, + integrity: sha512-cEP6KmwBgnb38+jTTaibWCjwXcHmigqhTfy0tN1be7WZr6bHxbqNLsXqKRN70PSNA3HouZcxw1cdRL8tqbPBBA==, } + cpu: [arm64] + os: [linux] + libc: [musl] - '@types/babel__core@7.20.5': + '@nx/nx-linux-x64-gnu@22.7.5': resolution: { - integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==, + integrity: sha512-tbaX1tZCSpGifDNBfDdEZAMxVF3Yg4bhFP/bm1needc0diqb+Zflc0u5tM5/6BWDMITQDwenJVsNiQ8ZdtJURA==, } + cpu: [x64] + os: [linux] + libc: [glibc] - '@types/babel__generator@7.27.0': + '@nx/nx-linux-x64-musl@22.7.5': resolution: { - integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==, + integrity: sha512-H0M7csOZIgPT822LqjxSXzf4MXRND15vIkAQe3F3Jlr3Si8LC3tzbL52aVcRfgb8MF/xOB5U47mSwxWt1M2bPQ==, } + cpu: [x64] + os: [linux] + libc: [musl] - '@types/babel__template@7.4.4': + '@nx/nx-win32-arm64-msvc@22.7.5': resolution: { - integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==, + integrity: sha512-JTcZch9YAnDL1gbhqePz3DZ4x7iYemLn1yJzrjbbXAmXju2eiiJiZvJJHbV06+SP9HKXDT8RjTKuAWTdVxnHug==, } + cpu: [arm64] + os: [win32] - '@types/babel__traverse@7.28.0': + '@nx/nx-win32-x64-msvc@22.7.5': resolution: { - integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==, + integrity: sha512-ngcMyHdBJ9FSz2nHdbZ7gtJlFq0O2b05sPAsVMkZ18CKzdaA1qrBDJfsMO49hPCny505eiT766+CkKdaCDl5kA==, } + cpu: [x64] + os: [win32] - '@types/chai@5.2.3': + '@observablehq/plot@0.6.17': resolution: { - integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==, + integrity: sha512-/qaXP/7mc4MUS0s4cPPFASDRjtsWp85/TbfsciqDgU1HwYixbSbbytNuInD8AcTYC3xaxACgVX06agdfQy9W+g==, } + engines: { node: '>=12' } - '@types/d3-array@3.2.2': + '@observablehq/sample-datasets@1.0.1': resolution: { - integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==, + integrity: sha512-2gc2wteMytPgDalqUPdLHEFInNb8J3vI17oniIYS89B1iwuO4EPXNWgzpfryyB4CH35CpXL0BgHfVeI+qICWwA==, } - '@types/d3-brush@3.0.6': + '@oxc-project/types@0.139.0': resolution: { - integrity: sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==, + integrity: sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==, } - '@types/d3-color@3.1.3': + '@parcel/watcher-android-arm64@2.6.0': resolution: { - integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==, + integrity: sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA==, } + engines: { node: '>= 10.0.0' } + cpu: [arm64] + os: [android] - '@types/d3-contour@3.0.6': + '@parcel/watcher-darwin-arm64@2.6.0': resolution: { - integrity: sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==, + integrity: sha512-Y3QV0gl7Q1zbfueunkWIERICbEojQFCgpyG7YqOGNFLsckXyI1xu9mAIUpKY9QBYzBtSkN8dBPwd3yiAO9ovMw==, } + engines: { node: '>= 10.0.0' } + cpu: [arm64] + os: [darwin] - '@types/d3-delaunay@6.0.4': + '@parcel/watcher-darwin-x64@2.6.0': resolution: { - integrity: sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==, + integrity: sha512-Ohv6OpzhUfKYD7Beb8kDvG0jbIxORCYY1JRdZnaBtnjjkJxgD7ZVL0nw2sCYd0yTMKTvz3nnTnOF3cDifK+kvw==, } + engines: { node: '>= 10.0.0' } + cpu: [x64] + os: [darwin] - '@types/d3-ease@3.0.2': + '@parcel/watcher-freebsd-x64@2.6.0': resolution: { - integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==, + integrity: sha512-5HmXvDgs8VK+74jF9y9/2FE3/OnlcKmc56tjmSrEuZjpSZOGL+fvAu+HKJBdPs9uwoP2hE6TlSUpXZ/C5jUFmQ==, } + engines: { node: '>= 10.0.0' } + cpu: [x64] + os: [freebsd] - '@types/d3-force@3.0.10': + '@parcel/watcher-linux-arm-glibc@2.6.0': resolution: { - integrity: sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==, + integrity: sha512-Ps/hui3A+vMbjdqlqAowK2ZL8+BO8dBjxeWXj6npTBs3jx4wWmbPpaLuqwrQrSqIVMCnpWo238bJ1U37GhQOYg==, } + engines: { node: '>= 10.0.0' } + cpu: [arm] + os: [linux] + libc: [glibc] - '@types/d3-format@3.0.4': + '@parcel/watcher-linux-arm-musl@2.6.0': resolution: { - integrity: sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==, + integrity: sha512-9c6AUHgHoG+IY88MRIHupztQiQnrbqHYQjkM2btA+Bf/wQnQMuiD0Wfk1EVv3TlNT3x41uU71rn6E4xh/+zvkw==, } + engines: { node: '>= 10.0.0' } + cpu: [arm] + os: [linux] + libc: [musl] - '@types/d3-geo@3.1.0': + '@parcel/watcher-linux-arm64-glibc@2.6.0': resolution: { - integrity: sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==, + integrity: sha512-yHRqS2owEXe6Hic9z6Mh1ECsCd+ODVOGvZDyciqRd21+v+o+DnXMOrw50DSpIG2sb8GPEaPPmfeCAWKPJdq46g==, } + engines: { node: '>= 10.0.0' } + cpu: [arm64] + os: [linux] + libc: [glibc] - '@types/d3-hexbin@0.2.5': + '@parcel/watcher-linux-arm64-musl@2.6.0': resolution: { - integrity: sha512-EF/1szlis0vN810Q3F//NYeiOjiRZHiRlHADQzc8GMMeaJx9J662LHsxJYBqwqlsTMZuvVk1qLULyvC7p1JNAg==, + integrity: sha512-WhB2e/V7rqdHHWZusBSPuy5Ei8S6lSz6FE5TKKQz5h3a0O+C+mhY7vxU9b/stqvMb8beLnPY82ZrFTLKs+SrKA==, } + engines: { node: '>= 10.0.0' } + cpu: [arm64] + os: [linux] + libc: [musl] - '@types/d3-hierarchy@3.1.7': + '@parcel/watcher-linux-x64-glibc@2.6.0': resolution: { - integrity: sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==, + integrity: sha512-ulGE6x6Oz6iAwg75T8YQSoguBWasniIbX+QWpaYPcCnDOpdWX3k+4xbEYPZVLxOuoJI+svJJPD3sEj8G7lrQ3A==, } + engines: { node: '>= 10.0.0' } + cpu: [x64] + os: [linux] + libc: [glibc] - '@types/d3-interpolate@3.0.4': + '@parcel/watcher-linux-x64-musl@2.6.0': resolution: { - integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==, + integrity: sha512-tkBYKt7YQrjIJWYDnto2YgO8MRkjlMTSNoRHzsXinBqbLdeOM3L32wPZJvIZxqaLMfSlS/4sUjH/6STVP/XDLw==, } + engines: { node: '>= 10.0.0' } + cpu: [x64] + os: [linux] + libc: [musl] - '@types/d3-path@1.0.11': + '@parcel/watcher-win32-arm64@2.6.0': resolution: { - integrity: sha512-4pQMp8ldf7UaB/gR8Fvvy69psNHkTpD/pVw3vmEi8iZAB9EPMBruB1JvHO4BIq9QkUUd2lV1F5YXpMNj7JPBpw==, + integrity: sha512-gIZAP23jaHjGWasY/TY6yL7NHFClf0Ga7FN+iINvk+KN94rhm94lYZhFsbYFNcA04/onvGD9kKmiJLJB2HbNwQ==, } + engines: { node: '>= 10.0.0' } + cpu: [arm64] + os: [win32] - '@types/d3-path@3.1.1': + '@parcel/watcher-win32-x64@2.6.0': resolution: { - integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==, + integrity: sha512-cA+/pXV2YkfxlIcXOQ5fSWqAzzPyD78/x5qbK/I0vUkrlYHA8TIz+MXjAbGouguKVSI4bOmkTSJ1/poVSsgt+A==, } + engines: { node: '>= 10.0.0' } + cpu: [x64] + os: [win32] - '@types/d3-polygon@3.0.2': + '@parcel/watcher@2.6.0': resolution: { - integrity: sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==, + integrity: sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w==, } + engines: { node: '>= 10.0.0' } - '@types/d3-quadtree@3.0.6': + '@poppinss/colors@4.1.6': resolution: { - integrity: sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==, + integrity: sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==, } - '@types/d3-sankey@0.12.5': + '@poppinss/dumper@0.6.5': resolution: { - integrity: sha512-/3RZSew0cLAtzGQ+C89hq/Rp3H20QJuVRSqFy6RKLe7E0B8kd2iOS1oBsodrgds4PcNVpqWhdUEng/SHvBcJ6Q==, + integrity: sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw==, } - '@types/d3-scale@4.0.9': + '@poppinss/exception@1.2.3': resolution: { - integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==, + integrity: sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==, } - '@types/d3-selection@3.0.11': + '@react-native-community/cli-clean@20.1.0': resolution: { - integrity: sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==, + integrity: sha512-77L4DifWfxAT8ByHnkypge7GBMYpbJAjBGV+toowt5FQSGaTBDcBHCX+FFqFRukD5fH6i8sZ41Gtw+nbfCTTIA==, } - '@types/d3-shape@1.3.12': + '@react-native-community/cli-config-android@20.1.0': resolution: { - integrity: sha512-8oMzcd4+poSLGgV0R1Q1rOlx/xdmozS4Xab7np0eamFFUYq71AU9pOCJEFnkXW2aI/oXdVYJzw6pssbSut7Z9Q==, + integrity: sha512-3A01ZDyFeCALzzPcwP/fleHoP3sGNq1UX7FzxkTrOFX8RRL9ntXNXQd27E56VU4BBxGAjAJT4Utw8pcOjJceIA==, } - '@types/d3-shape@3.1.8': + '@react-native-community/cli-config-apple@20.1.0': resolution: { - integrity: sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==, + integrity: sha512-n6JVs8Q3yxRbtZQOy05ofeb1kGtspGN3SgwPmuaqvURF9fsuS7c4/9up2Kp9C+1D2J1remPJXiZLNGOcJvfpOA==, } - '@types/d3-time@3.0.4': + '@react-native-community/cli-config@20.1.0': resolution: { - integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==, + integrity: sha512-1x9rhLLR/dKKb92Lb5O0l0EmUG08FHf+ZVyVEf9M+tX+p5QIm52MRiy43R0UAZ2jJnFApxRk+N3sxoYK4Dtnag==, } - '@types/d3-timer@3.0.2': + '@react-native-community/cli-doctor@20.1.0': resolution: { - integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==, + integrity: sha512-QfJF1GVjA4PBrIT3SJ0vFFIu0km1vwOmLDlOYVqfojajZJ+Dnvl0f94GN1il/jT7fITAxom///XH3/URvi7YTQ==, } - '@types/d3-zoom@3.0.8': + '@react-native-community/cli-platform-android@20.1.0': resolution: { - integrity: sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==, + integrity: sha512-TeHPDThOwDppQRpndm9kCdRCBI8AMy3HSIQ+iy7VYQXL5BtZ5LfmGdusoj7nVN/ZGn0Lc6Gwts5qowyupXdeKg==, } - '@types/deep-eql@4.0.2': + '@react-native-community/cli-platform-apple@20.1.0': resolution: { - integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==, + integrity: sha512-0ih1hrYezSM2cuOlVnwBEFtMwtd8YgpTLmZauDJCv50rIumtkI1cQoOgLoS4tbPCj9U/Vn2a9BFH0DLFOOIacg==, } - '@types/estree-jsx@1.0.5': + '@react-native-community/cli-platform-ios@20.1.0': resolution: { - integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==, + integrity: sha512-XN7Da9z4WsJxtqVtEzY8q2bv22OsvzaFP5zy5+phMWNoJlU4lf7IvBSxqGYMpQ9XhYP7arDw5vmW4W34s06rnA==, } - '@types/estree@1.0.9': + '@react-native-community/cli-server-api@20.1.0': resolution: { - integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==, + integrity: sha512-Tb415Oh8syXNT2zOzLzFkBXznzGaqKCiaichxKzGCDKg6JGHp3jSuCmcTcaPeYC7oc32n/S3Psw7798r4Q/7lA==, } - '@types/geojson@7946.0.16': + '@react-native-community/cli-tools@20.1.0': resolution: { - integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==, + integrity: sha512-/YmzHGOkY6Bgrv4OaA1L8rFqsBlQd1EB2/ipAoKPiieV0EcB5PUamUSuNeFU3sBZZTYQCUENwX4wgOHgFUlDnQ==, } - '@types/jsdom@27.0.0': + '@react-native-community/cli-types@20.1.0': resolution: { - integrity: sha512-NZyFl/PViwKzdEkQg96gtnB8wm+1ljhdDay9ahn4hgb+SfVtPCbm3TlmDUFXTA+MGN3CijicnMhG18SI5H3rFw==, + integrity: sha512-D0kDspcwgbVXyNjwicT7Bb1JgXjijTw1JJd+qxyF/a9+sHv7TU4IchV+gN38QegeXqVyM4Ym7YZIvXMFBmyJqA==, } - '@types/node@12.20.55': + '@react-native-community/cli@20.1.0': resolution: { - integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==, + integrity: sha512-441WsVtRe4nGJ9OzA+QMU1+22lA6Q2hRWqqIMKD0wjEMLqcSfOZyu2UL9a/yRpL/dRpyUsU4n7AxqKfTKO/Csg==, } + engines: { node: '>=20.19.4' } + hasBin: true - '@types/node@25.9.5': + '@react-native/assets-registry@0.86.2': resolution: { - integrity: sha512-OScDchr2fwuUmWdf4kZ9h7PcJiYDVInhJizG/biAq3cAvqwYktuy/TYGGdZNMtNTFUP7rnb0NU4TUdm82kt4Rg==, + integrity: sha512-vcX/mBjWAVnWofu7KecotquI2unZ/tITwA7OGdq/mdY/zmGXIEvYhfEYyOQij/LRqi9WAL+iizInTBWnxDhK/Q==, } + engines: { node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0 } - '@types/react-dom@19.2.3': + '@react-native/babel-plugin-codegen@0.86.2': resolution: { - integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==, + integrity: sha512-NNDZqOlNbH5SzgPks1jFDYH3234Rpa5e/nhZymxhIiBH3NcE3uD+rGj/HWXhH7nHF2ToGK6XbUpqy7nmJPeh+g==, } - peerDependencies: - '@types/react': ^19.2.0 + engines: { node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0 } - '@types/react@19.2.17': + '@react-native/babel-preset@0.86.2': resolution: { - integrity: sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==, + integrity: sha512-4XKEJ6jKW9lXMB1O5o47gBoGgolde1fbX13gLW/erlcn+1ky+MHHo5UjuM3RWGdPJHIvIzekDDumSUHhB9x5iQ==, } + engines: { node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0 } + peerDependencies: + '@babel/core': '*' - '@types/topojson-client@3.1.5': + '@react-native/codegen@0.86.2': resolution: { - integrity: sha512-C79rySTyPxnQNNguTZNI1Ct4D7IXgvyAs3p9HPecnl6mNrJ5+UhvGNYcZfpROYV2lMHI48kJPxwR+F9C6c7nmw==, + integrity: sha512-xKkudsahUJ1n//55g4fXk5BStVqqmZlz8HQveL45ZxcfDnwvhuYe2GymksQANFsSN+slvrarjrfq8kIxJzbceA==, } + engines: { node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0 } + peerDependencies: + '@babel/core': '*' - '@types/topojson-specification@1.0.5': + '@react-native/community-cli-plugin@0.86.2': resolution: { - integrity: sha512-C7KvcQh+C2nr6Y2Ub4YfgvWvWCgP2nOQMtfhlnwsRL4pYmmwzBS7HclGiS87eQfDOU/DLQpX6GEscviaz4yLIQ==, + integrity: sha512-YHXNKoM6Y/HjREySZ5arET2xgiHgg67r1MdwJB//MPJAJ0Xc5g0u6UHxY9VzsHO3Y07dre6s0BinYwjt1SEWvQ==, } + engines: { node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0 } + peerDependencies: + '@react-native-community/cli': '*' + '@react-native/metro-config': 0.86.2 + peerDependenciesMeta: + '@react-native-community/cli': + optional: true + '@react-native/metro-config': + optional: true - '@types/tough-cookie@4.0.5': + '@react-native/debugger-frontend@0.86.2': resolution: { - integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==, + integrity: sha512-KGS1aV5F6cIqpnoIUhLBXyVzy1oAj8jBFGau6vX4Vy0HXRJN7p+68RU7x6NuyraHvQcR14ccMGT5TkFuNjQ4gA==, } + engines: { node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0 } - '@types/trusted-types@2.0.7': + '@react-native/debugger-shell@0.86.2': resolution: { - integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==, + integrity: sha512-/TaVJ2+gGajZPJGrFaObUQmHmlaxAlfmOPZicl6pNKDUjzSgFMpcLkdTOExvb+USYTVdGX1XwxXyvjQdUO2bvg==, } + engines: { node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0 } - '@types/use-sync-external-store@0.0.6': + '@react-native/dev-middleware@0.86.2': resolution: { - integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==, + integrity: sha512-B7L0vKvg+IcEElT7Vpqh1xj5yJAqWUegjbP+bQRaorJMAYnv11GkliTnZV2AdTDfZQJWgOEx8i8LGkHkUg7bnA==, } + engines: { node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0 } - '@vitejs/plugin-react@6.0.4': + '@react-native/gradle-plugin@0.86.2': resolution: { - integrity: sha512-XcCQz0TBpBgljhj0gMuuDj49i6Ytqh5q1osT/Gp5uAVJUCTWxyskk/l1jwYYiu2xcNHHipdMz40EGfM1VdamVg==, + integrity: sha512-2F6x14NcHMpVmfTTFKfMkpV5dZedZrLiv6PE+c3vgnesV2bjleUBydr4U+NI8VkI7OwW71L0A5qQ76I9LCrfoQ==, } - engines: { node: ^20.19.0 || >=22.12.0 } - peerDependencies: - '@rolldown/plugin-babel': ^0.1.7 || ^0.2.0 - babel-plugin-react-compiler: ^1.0.0 - vite: ^8.0.0 - peerDependenciesMeta: - '@rolldown/plugin-babel': - optional: true - babel-plugin-react-compiler: - optional: true + engines: { node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0 } - '@vitest/expect@4.1.10': + '@react-native/js-polyfills@0.86.2': resolution: { - integrity: sha512-YsCn+qAk1GWjQOWFEsEcL2gNQ0zmVmQu3T03qP6UyjhtmdtwtbuI+DASn/7iQB3HGTXkdBwGddzxPlmiql5vlA==, + integrity: sha512-bIwNcGBaQ74shB5z1mRkxOpjikimuwsnOCEkZSzL67Z1FTyK1ObpENfyd2QvcvVW9Cjl+tHuw9ynpBnb2jPoJQ==, } + engines: { node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0 } - '@vitest/mocker@4.1.10': + '@react-native/metro-babel-transformer@0.86.2': resolution: { - integrity: sha512-v0xaezt+DKEmKfaxg133ldzADrwLGd7Ze1MfQQTYfvs8OqZIwbxyxaYURivwV7sWy5fqn3rH5uOrSp07bp44Ow==, + integrity: sha512-mX1wgLErdb2hDgXJr9zM9SWLe+ZteZTFTwRWGOQ53yEJwc9DVSnxdTlAtVdMeOj2ntycKh0R8jYdat2Am43cwQ==, } + engines: { node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0 } peerDependencies: - msw: ^2.4.9 - vite: ^6.0.0 || ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - msw: - optional: true - vite: - optional: true + '@babel/core': '*' - '@vitest/pretty-format@4.1.10': + '@react-native/metro-config@0.86.2': resolution: { - integrity: sha512-W1HsjSH4MXQ9YfmmhLAoIYf1HRfekQCGngeIgcei6MP5QQGWUe0gkopdZQaVCFO+JDJMrAJGwa5pRpNpvy4P8Q==, + integrity: sha512-hJno256j+MS0b3JD1aD3ouTGZVacKNVBuXL2atMQQ8BZ060vl1ptnZ83y569aDW+/rgFSOcqn6ydKeSz4uUKQQ==, } + engines: { node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0 } - '@vitest/runner@4.1.10': + '@react-native/normalize-colors@0.86.2': resolution: { - integrity: sha512-IKI6kpIH+LmpROplyLwBBaCfMgOZOMsygVa6BARD6ahA04VRuJSa6OaVG7kRvSEMD870Vd91rSSw0eegtWyLGg==, + integrity: sha512-EzPFc9Y6lzYOWeso2almwXI7f8+qReHxWvT+algsOczb2UhWXIWXDoSvkdwoSfiwwmGt/ijJgKJoeHlzPkLwRg==, } - '@vitest/snapshot@4.1.10': + '@react-native/typescript-config@0.86.2': resolution: { - integrity: sha512-xRkfOT1qpTAi/Ti4Y1LtfRc3kEuqxGw59eN2jN9pRWMtS/XDevekhcFSqvQqjUNGksfjMJu3Y+oJ+4Ypn2OaJw==, + integrity: sha512-DcIsPc652AD10sSKWZPv2QjsEB63DEXW20XYwDzk3zdl94XbTlTSn1+VZbtx7MzHk0kkSQcaX30yTdVkNUAz8Q==, } - '@vitest/spy@4.1.10': + '@react-native/virtualized-lists@0.86.2': resolution: { - integrity: sha512-PLf/Ugvoq5wO/b4rwYCR1h2PSIdXz7wnkQFMiUpLdtM7l6pqVFcQIBEHyT1+l+cj7mNwAfZHzqXqDyjvOuwbDw==, + integrity: sha512-uO0J72gh3EvE+1/GHRk18QRyBDTRHRB0AraAfojsRjbT7VMuJwKrZYaKGshavoaEud6aw00ZB9/8mTMIKjjcAw==, } + engines: { node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0 } + peerDependencies: + '@types/react': ^19.2.0 + react: '*' + react-native: 0.86.2 + peerDependenciesMeta: + '@types/react': + optional: true - '@vitest/utils@4.1.10': + '@reduxjs/toolkit@2.12.0': resolution: { - integrity: sha512-fy9am/HWxbaGt/Sawrp90vt6Y6jQwf1RX77cz3uwoJwJVMli/e1IEwRPnMNJ7vKfPTwo0diXifkpPvwH9v7nGA==, + integrity: sha512-KiT+RzZbp6mQET+Mg+h2c97+9j1sNflUxQkIHI7Yuzf6Peu+OYpmkn6nbHWmLLWj+1ZODUJFwGZ7gx3L9R9EOw==, } + peerDependencies: + react: ^16.9.0 || ^17.0.0 || ^18 || ^19 + react-redux: ^7.2.1 || ^8.1.3 || ^9.0.0 + peerDependenciesMeta: + react: + optional: true + react-redux: + optional: true - '@vue/compiler-core@3.5.40': + '@rolldown/binding-android-arm64@1.1.5': resolution: { - integrity: sha512-39E8IgOhTbVDnoJFMKc2DvYnypcZwUqgUhQkccva/0m6FUwtIKSGV7n1hpVmYcFaoRAwf9pBcwnKlCEsN63ZEQ==, + integrity: sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==, } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm64] + os: [android] - '@vue/compiler-dom@3.5.40': + '@rolldown/binding-darwin-arm64@1.1.5': resolution: { - integrity: sha512-pwkx4vqlqOspFstrcmzwkKLePVMD3PT65imRzLhanU2V1Fj4K13g6OXjanOyzw3aTAuRk84BOmY8f3rEHqPaVA==, + integrity: sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw==, } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm64] + os: [darwin] - '@vue/compiler-sfc@3.5.40': + '@rolldown/binding-darwin-x64@1.1.5': resolution: { - integrity: sha512-gIf497P4kpuALcvs5n3AEg1Vdn0pSY4XbjASIfHNYF1/MP3T2Mf2STERTubysBxCRxzJGJYtF/O7vwJrxFB3Vw==, + integrity: sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g==, } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [x64] + os: [darwin] - '@vue/compiler-ssr@3.5.40': + '@rolldown/binding-freebsd-x64@1.1.5': resolution: { - integrity: sha512-rrE5xiXG663+vHCHa3J9p2z5OcBRjXmoqenprJxAFQxg5pSshzeBiCE6pu46axapRJ2Adk0YDA2BRZVjiHXnhg==, + integrity: sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA==, } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [x64] + os: [freebsd] - '@vue/reactivity@3.1.5': + '@rolldown/binding-linux-arm-gnueabihf@1.1.5': resolution: { - integrity: sha512-1tdfLmNjWG6t/CsPldh+foumYFo3cpyCHgBYQ34ylaMsJ+SNHQ1kApMIa8jN+i593zQuaw3AdWH0nJTARzCFhg==, + integrity: sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw==, } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm] + os: [linux] - '@vue/reactivity@3.5.40': + '@rolldown/binding-linux-arm64-gnu@1.1.5': resolution: { - integrity: sha512-B7ot9UlUZOi1zbq61/LvE88ZLTV8IlajTdiZTAEiDQgrnIMIZoPr9kGw0Zw46ObW62O9+H/Be3kMbfb7kYPQZA==, + integrity: sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q==, } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm64] + os: [linux] + libc: [glibc] - '@vue/runtime-core@3.5.40': + '@rolldown/binding-linux-arm64-musl@1.1.5': resolution: { - integrity: sha512-KAZLweuZ6uUJPK1PMSQPgBU5gCjgrrfjUhSglmU9NhH+Zjepa8cnwSydPWDWHDwOgY4g3VcZ+PljbiHlURNCbw==, + integrity: sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA==, } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm64] + os: [linux] + libc: [musl] - '@vue/runtime-dom@3.5.40': + '@rolldown/binding-linux-ppc64-gnu@1.1.5': resolution: { - integrity: sha512-ZfrX8ssZQds900L9pr8AuK05ddnMsR4MPMZr8cPN9GoqoPWcXLhjvvbIA2SMv+7a97sJ1vv9pj/zxK0Cq/eEFQ==, + integrity: sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg==, } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [ppc64] + os: [linux] + libc: [glibc] - '@vue/server-renderer@3.5.40': + '@rolldown/binding-linux-s390x-gnu@1.1.5': resolution: { - integrity: sha512-XNJym9WpevhTVt1HuwOrCRJ5Q+9z4BjTMrDtjTrvx74SmUll8spNTw6whWJa9mEkO4PKn5TihI/bm/8ds2QVJw==, + integrity: sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA==, } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [s390x] + os: [linux] + libc: [glibc] - '@vue/shared@3.1.5': + '@rolldown/binding-linux-x64-gnu@1.1.5': resolution: { - integrity: sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA==, + integrity: sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ==, } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [x64] + os: [linux] + libc: [glibc] - '@vue/shared@3.5.40': + '@rolldown/binding-linux-x64-musl@1.1.5': resolution: { - integrity: sha512-WxnBtruIqOoV3rA4jeKDWzrYI5h7Cp4+pjwDi8kWGHz+IslhiN+wguLVVhtv2l8VoU02rzDCVfDjgCl1lNpZVg==, + integrity: sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg==, } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [x64] + os: [linux] + libc: [musl] - '@yarnpkg/lockfile@1.1.0': + '@rolldown/binding-openharmony-arm64@1.1.5': resolution: { - integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==, + integrity: sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw==, } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm64] + os: [openharmony] - '@zkochan/js-yaml@0.0.7': + '@rolldown/binding-wasm32-wasi@1.1.5': resolution: { - integrity: sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ==, + integrity: sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA==, } - hasBin: true + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [wasm32] - acorn@8.17.0: + '@rolldown/binding-win32-arm64-msvc@1.1.5': resolution: { - integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==, + integrity: sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw==, } - engines: { node: '>=0.4.0' } - hasBin: true + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm64] + os: [win32] - ajv@8.20.0: + '@rolldown/binding-win32-x64-msvc@1.1.5': resolution: { - integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==, + integrity: sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA==, } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [x64] + os: [win32] - alpinejs@3.15.12: + '@rolldown/pluginutils@1.0.1': resolution: { - integrity: sha512-nJvPAQVNPdZZ0NrExJ/kzQco3ijR8LwvCOadQecllESiqT4NyZ/57sN9V2XyvhlBGAbmlKYgeWZvYdKq99ij/Q==, + integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==, } - ansi-colors@4.1.3: + '@rollup/plugin-json@6.1.0': resolution: { - integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==, + integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==, } - engines: { node: '>=6' } + engines: { node: '>=14.0.0' } + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true - ansi-regex@5.0.1: + '@rollup/pluginutils@5.4.0': resolution: { - integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, + integrity: sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==, } - engines: { node: '>=8' } + engines: { node: '>=14.0.0' } + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true - ansi-regex@6.2.2: + '@rollup/rollup-android-arm-eabi@4.62.3': resolution: { - integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==, + integrity: sha512-c0wdcekXtQvvn5Tsrk/+op/gUArrbWaFduBnTLP2l1cKLSQs4diMWjJw3m6A0DdzT8dAAX95KpkJ3qynCePbmw==, } - engines: { node: '>=12' } + cpu: [arm] + os: [android] - ansi-styles@4.3.0: + '@rollup/rollup-android-arm64@4.62.3': resolution: { - integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, + integrity: sha512-3YjElDdWN+qXAFbJ/CzPV+0wspLqh54k/I6GfdYtEJRqg7buSgc1yPM3B+93j1M4neobtkATHZTmxK2AMVGfnA==, } - engines: { node: '>=8' } + cpu: [arm64] + os: [android] - ansi-styles@6.2.3: + '@rollup/rollup-darwin-arm64@4.62.3': resolution: { - integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==, + integrity: sha512-Pch2pFNOxxz1hTjypIdPyRTR6riiwRl84+VcN9djS680fw+Co1nAJINrdpqp7KV0NvyuU8ilZXZCjd7ykJl1GQ==, } - engines: { node: '>=12' } + cpu: [arm64] + os: [darwin] - argparse@1.0.10: + '@rollup/rollup-darwin-x64@4.62.3': resolution: { - integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==, + integrity: sha512-LEuncFUHFiF8t4yZVZvvZA1wk0pjAscRnsrn1EfTEmN4HXotBi2YtcnLRyaK6UbuczW7xZS5ES+81Rdz8Z0T6g==, } + cpu: [x64] + os: [darwin] - argparse@2.0.1: + '@rollup/rollup-freebsd-arm64@4.62.3': resolution: { - integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, + integrity: sha512-zvBUvsQUpOWALdDsk6qbS8bXf2VxmPisuudNDrY7x0p0jBdsoZl8HsHczIOgkQiZldmcacMKtBzpoGVNeIe2bQ==, } + cpu: [arm64] + os: [freebsd] - aria-query@5.3.1: + '@rollup/rollup-freebsd-x64@4.62.3': resolution: { - integrity: sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==, + integrity: sha512-C2KmNrcSem/AMg984H/dev+si0lieQGdXdR/lYGJnuumXnFb9Y7QdiI62obFdLlxRYLBv4P0eUVIDbD4c1vVvw==, } - engines: { node: '>= 0.4' } + cpu: [x64] + os: [freebsd] - array-union@2.1.0: + '@rollup/rollup-linux-arm-gnueabihf@4.62.3': resolution: { - integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==, + integrity: sha512-ggXnsTAEzNQx74XpunRsiZ9aBZDsI7XIa0hm2nzR9f4WzH5/f/d73ZSDaC5ejJ8YLY4NW+V3wr0tjOaeCq8hqA==, } - engines: { node: '>=8' } + cpu: [arm] + os: [linux] + libc: [glibc] - assertion-error@2.0.1: + '@rollup/rollup-linux-arm-musleabihf@4.62.3': resolution: { - integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==, + integrity: sha512-2vng+FlzNUhKZxtej3IUqJgbZoQk2M/dwQM20+ULV0R/E/8tr9/P6uEf2iiGIk4HL0zMKh5Jry7mUHdUOvyGgA==, } - engines: { node: '>=12' } + cpu: [arm] + os: [linux] + libc: [musl] - asynckit@0.4.0: + '@rollup/rollup-linux-arm64-gnu@4.62.3': resolution: { - integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==, + integrity: sha512-LLLFZKt4/Nraf9rxDkhiU8QVgLF4WmCkfr0L4fj0fPfIZFBib0DeiFk1hhaYKd03LFAFJcxHslhDFlNJLylf5Q==, } + cpu: [arm64] + os: [linux] + libc: [glibc] - axios@1.16.0: + '@rollup/rollup-linux-arm64-musl@4.62.3': resolution: { - integrity: sha512-6hp5CwvTPlN2A31g5dxnwAX0orzM7pmCRDLnZSX772mv8WDqICwFjowHuPs04Mc8deIld1+ejhtaMn5vp6b+1w==, + integrity: sha512-WJkdQCvS9sWNOUBJZfQRKpZGFBztRzcowI+nndmflKgU4XY+3a420FgTOSKTsVqJbnzSxeT4vaJalpOaPo2YCQ==, } - - axobject-query@4.1.0: + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-loong64-gnu@4.62.3': resolution: { - integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==, + integrity: sha512-PwHXCCS2n64/1Ot6rP1YEYA02MGYBcQlr8CSZZyrUG2O7NH6NklYmvr9v3Jy+5e/eDeNchc/ukmKJi9LuflMIQ==, } - engines: { node: '>= 0.4' } + cpu: [loong64] + os: [linux] + libc: [glibc] - babel-plugin-jsx-dom-expressions@0.40.7: + '@rollup/rollup-linux-loong64-musl@4.62.3': resolution: { - integrity: sha512-/O6JWUmjv03OI9lL2ry9bUjpD5S3PclM55RRJEyCdcFZ5W2SEA/59d+l2hNsk3gI6kiWRdRPdOtqZmsQzFN1pQ==, + integrity: sha512-vUjxINQu3RC8NZS3ykk1gN65gIz8pAopOq2HXuZhiIxHdx7TFvDG+jgrdSgInu1Eza4/Rfi2VzZgyIgEH4WOaw==, } - peerDependencies: - '@babel/core': ^7.20.12 + cpu: [loong64] + os: [linux] + libc: [musl] - babel-preset-solid@1.9.12: + '@rollup/rollup-linux-ppc64-gnu@4.62.3': resolution: { - integrity: sha512-LLqnuKVDlKpyBlMPcH6qEvs/wmS9a+NczppxJ3ryS/c0O5IiSFOIBQi9GzyiGDSbcJpx4Gr87jyFTos1MyEuWg==, + integrity: sha512-wzko4aJ13+0G3kGnviCg5gnXFKd40izKsrf2uOw12US4XqprkDrmwOpeW14aSNa37V8bfPcz5Fkob6LZ3BAPmA==, } - peerDependencies: - '@babel/core': ^7.0.0 - solid-js: ^1.9.12 - peerDependenciesMeta: - solid-js: - optional: true + cpu: [ppc64] + os: [linux] + libc: [glibc] - balanced-match@4.0.3: + '@rollup/rollup-linux-ppc64-musl@4.62.3': resolution: { - integrity: sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g==, + integrity: sha512-8120ue0JUMSwy11stlwnfdX3pPd+WZYGCDBwEHWtIHi6pOpZmsEF5QKB7a/UN+XFdqvobxz98kv8RTqikyCEBw==, } - engines: { node: 20 || >=22 } + cpu: [ppc64] + os: [linux] + libc: [musl] - base64-js@1.5.1: + '@rollup/rollup-linux-riscv64-gnu@4.62.3': resolution: { - integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==, + integrity: sha512-XLFHnR3tXMjbOCh2vtVJHmxt+995uJsTERQyseFDRA0xxMxyTZPLa3OIUlyFaO4mF/Lu0FjmWHCuPXJT1n/IOg==, } + cpu: [riscv64] + os: [linux] + libc: [glibc] - baseline-browser-mapping@2.11.5: + '@rollup/rollup-linux-riscv64-musl@4.62.3': resolution: { - integrity: sha512-xJo6a6YZnwZfnyGmQKWMbVOcii7XRibjOskRh+WJ9UHQoX16xrQrcIgAMQOzfvs8XiLMx6ih/fsLPF73iY2D1A==, + integrity: sha512-se6yXvNGMIl0f+RQzyh7XAmia8/9kplQx424wnG2w0C1oi6XgO6Y8otKhdXFHbHs88Ihavzmvh1NWjuovE76BQ==, } - engines: { node: '>=6.0.0' } - hasBin: true + cpu: [riscv64] + os: [linux] + libc: [musl] - better-path-resolve@1.0.0: + '@rollup/rollup-linux-s390x-gnu@4.62.3': resolution: { - integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==, + integrity: sha512-gNoxRefktVIiGflpONuxWWXZAzIQG++z9qHO3xKwk4WdDMuQja3JHGfE1u0i3PfPDyvhypdk+WrgIJqLhGG7sg==, } - engines: { node: '>=4' } + cpu: [s390x] + os: [linux] + libc: [glibc] - bidi-js@1.0.3: + '@rollup/rollup-linux-x64-gnu@4.62.3': resolution: { - integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==, + integrity: sha512-V4KtWtQfAFMU7+9/A/VDps/VI8CHd3cYz0L8sgJzz8qK7eY7wI4ruFD82UYIYvW9Z4DtlTfhQcsl4XyPHW5uSg==, } + cpu: [x64] + os: [linux] + libc: [glibc] - binary-search-bounds@2.0.5: + '@rollup/rollup-linux-x64-musl@4.62.3': resolution: { - integrity: sha512-H0ea4Fd3lS1+sTEB2TgcLoK21lLhwEJzlQv3IN47pJS976Gx4zoWe0ak3q+uYh60ppQxg9F16Ri4tS1sfD4+jA==, + integrity: sha512-LBx9LYXvj2CBkMkjLdNAWLwH0MLMin7do2VcVo9kVPibGLkY0BQQut2fv7NVqkXqZ/CrAu9LqDHVV1xHCMpCPw==, } + cpu: [x64] + os: [linux] + libc: [musl] - bl@4.1.0: + '@rollup/rollup-openbsd-x64@4.62.3': resolution: { - integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==, + integrity: sha512-ABVf3Q0RCu7NcyCCOZQI0pJ3GuSdfSl8EXcy88QtdceIMIoCUdfhsJChZ64L9zVM2aJHjde1Bhn5uqSRcX9ySA==, } + cpu: [x64] + os: [openbsd] - blake3-wasm@2.1.5: + '@rollup/rollup-openharmony-arm64@4.62.3': resolution: { - integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==, + integrity: sha512-+2Cy/ldweGBLlPIKsQLF8U5N44a0KDdbrk1rAjHOM9M2K+kGdIVjHLmmrZIcx+9Ny3ke/1JomCsDI1ocb11+sg==, } + cpu: [arm64] + os: [openharmony] - brace-expansion@5.0.6: + '@rollup/rollup-win32-arm64-msvc@4.62.3': resolution: { - integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==, + integrity: sha512-dtZvzc8BedpSaFNy75x6uiWwAGTH+aZHDtdrqP6qk+WcLJrfti6sGje1ZJ9UxyzDLF23d/mV+PaMwuC0hL7UVA==, } - engines: { node: 18 || 20 || >=22 } + cpu: [arm64] + os: [win32] - brace-expansion@5.0.8: + '@rollup/rollup-win32-ia32-msvc@4.62.3': resolution: { - integrity: sha512-JZyDyq3D4AUifKTPOB7DELf6XsB3WdPuNxCtob1vFXPsSXhdAiHBWJ/tJ8HAc9aH84BK+5JFZLNkJKx3G9kzQg==, + integrity: sha512-Rj8Ra4noo+aYy7sKBggCx0407mws34kAb1ySyWuq5DAtFBQdkSwnsjCgPrhPe9cvgBKZIukpE+CVHvORCS93kQ==, } - engines: { node: 20 || >=22 } + cpu: [ia32] + os: [win32] - braces@3.0.3: + '@rollup/rollup-win32-x64-gnu@4.62.3': resolution: { - integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==, + integrity: sha512-vp7N084ew/odXn2gi/mzm9mUkQu9l6AiN6dt4IeUM2Uvm9o+cVmP+YkqbMOteLbiGgqBBlJZjIMYVCfOOIVbVQ==, } - engines: { node: '>=8' } + cpu: [x64] + os: [win32] - browserslist@4.28.7: + '@rollup/rollup-win32-x64-msvc@4.62.3': resolution: { - integrity: sha512-JxV13hNrFxqjOc8alRbq9dK1MM79NEXYpma2B2J4wAtpWS5zIEIKqWPGCl7N4o7Uc7B7itylh7SuDujATRyyTw==, + integrity: sha512-MOG/3gTOn4Fwf574RVOaY61I5o6P90legkFADiTyn1hyjNydT+cerU2rLUwPdZkKKyJ+iT+K9p7WXK4LM1Ka6g==, } - engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } - hasBin: true + cpu: [x64] + os: [win32] - buffer@5.7.1: + '@rollup/wasm-node@4.62.3': resolution: { - integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==, + integrity: sha512-sEOQWamme1YgXeVcE1JkB1k44RwtPWcpYpGUW1Lso7bOj+Ay9lN2Pak/CcfNeC4xqIPNhYSabQNaWYkJJR7m8Q==, } + engines: { node: '>=18.0.0', npm: '>=8.0.0' } + hasBin: true - call-bind-apply-helpers@1.0.2: + '@sideway/address@4.1.5': resolution: { - integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==, + integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==, } - engines: { node: '>= 0.4' } - caniuse-lite@1.0.30001806: + '@sideway/formula@3.0.1': resolution: { - integrity: sha512-72Cuvd95zbSYPKq6Fhg8eDJRlzgWDf7/mtoZv6Qe/DYNCEBdNxoA3+rZAU2ZhGCpZlns3EssFavaZomckT5Uuw==, + integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==, } - chai@6.2.2: + '@sideway/pinpoint@2.0.0': resolution: { - integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==, + integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==, } - engines: { node: '>=18' } - chalk@4.1.2: + '@sinclair/typebox@0.27.12': resolution: { - integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, + integrity: sha512-hhyNJ+nbR6ZR7pToHvllEFun9TL0sbL+tk/ON75lo+Xas054uez98qRbsuNt7MBCyZKK4+8Yli/OAGZhmfBZ/g==, } - engines: { node: '>=10' } - chalk@5.6.2: + '@sindresorhus/is@7.2.0': resolution: { - integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==, + integrity: sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==, } - engines: { node: ^12.17.0 || ^14.13 || >=16.0.0 } + engines: { node: '>=18' } - chardet@2.2.0: + '@speed-highlight/core@1.2.17': resolution: { - integrity: sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA==, + integrity: sha512-Z92FwKpCtfaW1V0jTU/fh3QzYEZN8wDwrzRIBoADCJfn4mJCNcJN/XegifX7BDrQ8/h9Xh/JnbyMchL0FqXrkg==, } - chart.js@4.5.1: + '@standard-schema/spec@1.1.0': resolution: { - integrity: sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==, + integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==, } - engines: { pnpm: '>=8' } - chokidar@4.0.3: + '@standard-schema/utils@0.3.0': resolution: { - integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==, + integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==, } - engines: { node: '>= 14.16.0' } - chokidar@5.0.0: + '@sveltejs/acorn-typescript@1.0.11': resolution: { - integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==, + integrity: sha512-LFuZUkjJ9iF7JZye/aG5XM0SFcQ5VyL0oVX4WJ9dc0Va3R3s0OauX1BESVCb+YN/ol8TAfqGDDAQsTG627Y5kw==, } - engines: { node: '>= 20.19.0' } + peerDependencies: + acorn: ^8.9.0 - cli-cursor@3.1.0: + '@sveltejs/load-config@0.2.1': resolution: { - integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==, + integrity: sha512-5m3B2cbqQ4TbwW6Xkh66Ntw6dD7gNc77cCxABTTesWcq9jxIzMgTk97pZx5vEtvQx8iokgi7GIphqZe+PGwcZA==, } - engines: { node: '>=8' } + engines: { node: '>= 18.0.0' } - cli-cursor@5.0.0: + '@sveltejs/package@2.5.8': resolution: { - integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==, + integrity: sha512-zeBbsXYvHiBu56v4gJaGQoEHzg96w0E1j3dOMX8vo56s6vI5eQ57ZEZhudjwjnegnVitRRu5MrmhO0eNvaonIw==, } - engines: { node: '>=18' } + engines: { node: ^16.14 || >=18 } + hasBin: true + peerDependencies: + svelte: ^3.44.0 || ^4.0.0 || ^5.0.0-next.1 - cli-spinners@2.6.1: + '@sveltejs/vite-plugin-svelte@7.2.0': resolution: { - integrity: sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==, + integrity: sha512-1SpkuMSRLfugrVX+IrKfE1RUegzo8AQzKQ6qQPfVzbcWi5IhuTPaKb5ZrLpucleFznkc4/RTeSPoRnGWFxX+EQ==, } - engines: { node: '>=6' } + engines: { node: ^20.19 || ^22.12 || >=24 } + peerDependencies: + svelte: ^5.46.4 + vite: ^8.0.0-beta.7 || ^8.0.0 - cli-spinners@3.4.0: + '@tsrx/core@0.1.48': resolution: { - integrity: sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw==, + integrity: sha512-IgkkLjApPKCGvBvwcOtLT6bACFglB5RBKW9fYErYMXJC6bxk/GM1lVAnuV9FiadiZ5jXrTw9uTxbZULncycSQQ==, } - engines: { node: '>=18.20' } - cliui@8.0.1: + '@tybys/wasm-util@0.10.3': resolution: { - integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==, + integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==, } - engines: { node: '>=12' } - cliui@9.0.1: + '@tybys/wasm-util@0.9.0': resolution: { - integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==, + integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==, } - engines: { node: '>=20' } - clone@1.0.4: + '@types/babel__core@7.20.5': resolution: { - integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==, + integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==, } - engines: { node: '>=0.8' } - clsx@2.1.1: + '@types/babel__generator@7.27.0': resolution: { - integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==, + integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==, } - engines: { node: '>=6' } - color-convert@2.0.1: + '@types/babel__template@7.4.4': resolution: { - integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, + integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==, } - engines: { node: '>=7.0.0' } - color-name@1.1.4: + '@types/babel__traverse@7.28.0': resolution: { - integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, + integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==, } - combined-stream@1.0.8: + '@types/chai@5.2.3': resolution: { - integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==, + integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==, } - engines: { node: '>= 0.8' } - commander@14.0.3: + '@types/d3-array@3.2.2': resolution: { - integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==, + integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==, } - engines: { node: '>=20' } - commander@2.20.3: + '@types/d3-brush@3.0.6': resolution: { - integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==, + integrity: sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==, } - commander@7.2.0: + '@types/d3-color@3.1.3': resolution: { - integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==, + integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==, } - engines: { node: '>= 10' } - common-path-prefix@3.0.0: + '@types/d3-contour@3.0.6': resolution: { - integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==, + integrity: sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==, } - convert-source-map@1.9.0: + '@types/d3-delaunay@6.0.4': resolution: { - integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==, + integrity: sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==, } - convert-source-map@2.0.0: + '@types/d3-ease@3.0.2': resolution: { - integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==, + integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==, } - cookie@1.1.1: + '@types/d3-force@3.0.10': resolution: { - integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==, + integrity: sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==, } - engines: { node: '>=18' } - copy-anything@3.0.5: + '@types/d3-format@3.0.4': resolution: { - integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==, + integrity: sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==, } - engines: { node: '>=12.13' } - cross-spawn@7.0.6: + '@types/d3-geo@3.1.0': resolution: { - integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==, + integrity: sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==, } - engines: { node: '>= 8' } - css-tree@3.2.1: + '@types/d3-hexbin@0.2.5': resolution: { - integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==, + integrity: sha512-EF/1szlis0vN810Q3F//NYeiOjiRZHiRlHADQzc8GMMeaJx9J662LHsxJYBqwqlsTMZuvVk1qLULyvC7p1JNAg==, } - engines: { node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0 } - csstype@3.2.3: + '@types/d3-hierarchy@3.1.7': resolution: { - integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==, + integrity: sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==, } - d3-array@2.12.1: + '@types/d3-interpolate@3.0.4': resolution: { - integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==, + integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==, } - d3-array@3.2.4: + '@types/d3-path@1.0.11': resolution: { - integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==, + integrity: sha512-4pQMp8ldf7UaB/gR8Fvvy69psNHkTpD/pVw3vmEi8iZAB9EPMBruB1JvHO4BIq9QkUUd2lV1F5YXpMNj7JPBpw==, } - engines: { node: '>=12' } - d3-axis@3.0.0: + '@types/d3-path@3.1.1': resolution: { - integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==, + integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==, } - engines: { node: '>=12' } - d3-brush@3.0.0: + '@types/d3-polygon@3.0.2': resolution: { - integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==, + integrity: sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==, } - engines: { node: '>=12' } - d3-chord@3.0.1: + '@types/d3-quadtree@3.0.6': resolution: { - integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==, + integrity: sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==, } - engines: { node: '>=12' } - d3-color@3.1.0: + '@types/d3-sankey@0.12.5': resolution: { - integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==, + integrity: sha512-/3RZSew0cLAtzGQ+C89hq/Rp3H20QJuVRSqFy6RKLe7E0B8kd2iOS1oBsodrgds4PcNVpqWhdUEng/SHvBcJ6Q==, } - engines: { node: '>=12' } - d3-contour@4.0.2: + '@types/d3-scale@4.0.9': resolution: { - integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==, + integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==, } - engines: { node: '>=12' } - d3-delaunay@6.0.4: + '@types/d3-selection@3.0.11': resolution: { - integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==, + integrity: sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==, } - engines: { node: '>=12' } - d3-dispatch@3.0.1: + '@types/d3-shape@1.3.12': resolution: { - integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==, + integrity: sha512-8oMzcd4+poSLGgV0R1Q1rOlx/xdmozS4Xab7np0eamFFUYq71AU9pOCJEFnkXW2aI/oXdVYJzw6pssbSut7Z9Q==, } - engines: { node: '>=12' } - d3-drag@3.0.0: + '@types/d3-shape@3.1.8': resolution: { - integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==, + integrity: sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==, } - engines: { node: '>=12' } - d3-dsv@3.0.1: + '@types/d3-time@3.0.4': resolution: { - integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==, + integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==, } - engines: { node: '>=12' } - hasBin: true - d3-ease@3.0.1: + '@types/d3-timer@3.0.2': resolution: { - integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==, + integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==, } - engines: { node: '>=12' } - d3-fetch@3.0.1: + '@types/d3-zoom@3.0.8': resolution: { - integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==, + integrity: sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==, } - engines: { node: '>=12' } - d3-force@3.0.0: + '@types/deep-eql@4.0.2': resolution: { - integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==, + integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==, } - engines: { node: '>=12' } - d3-format@3.1.2: + '@types/estree-jsx@1.0.5': resolution: { - integrity: sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==, + integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==, } - engines: { node: '>=12' } - d3-geo@3.1.1: + '@types/estree@1.0.9': resolution: { - integrity: sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==, + integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==, } - engines: { node: '>=12' } - d3-hexbin@0.2.2: + '@types/geojson@7946.0.16': resolution: { - integrity: sha512-KS3fUT2ReD4RlGCjvCEm1RgMtp2NFZumdMu4DBzQK8AZv3fXRM6Xm8I4fSU07UXvH4xxg03NwWKWdvxfS/yc4w==, + integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==, } - d3-hierarchy@3.1.2: + '@types/istanbul-lib-coverage@2.0.6': resolution: { - integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==, + integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==, } - engines: { node: '>=12' } - d3-interpolate@3.0.1: + '@types/istanbul-lib-report@3.0.3': resolution: { - integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==, + integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==, } - engines: { node: '>=12' } - d3-path@1.0.9: + '@types/istanbul-reports@3.0.4': resolution: { - integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==, + integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==, } - d3-path@3.1.0: + '@types/jsdom@27.0.0': resolution: { - integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==, + integrity: sha512-NZyFl/PViwKzdEkQg96gtnB8wm+1ljhdDay9ahn4hgb+SfVtPCbm3TlmDUFXTA+MGN3CijicnMhG18SI5H3rFw==, } - engines: { node: '>=12' } - d3-polygon@3.0.1: + '@types/node@12.20.55': resolution: { - integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==, + integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==, } - engines: { node: '>=12' } - d3-quadtree@3.0.1: + '@types/node@25.9.5': resolution: { - integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==, + integrity: sha512-OScDchr2fwuUmWdf4kZ9h7PcJiYDVInhJizG/biAq3cAvqwYktuy/TYGGdZNMtNTFUP7rnb0NU4TUdm82kt4Rg==, } - engines: { node: '>=12' } - d3-random@3.0.1: + '@types/react-dom@19.2.3': resolution: { - integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==, + integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==, } - engines: { node: '>=12' } + peerDependencies: + '@types/react': ^19.2.0 - d3-sankey@0.12.3: + '@types/react@19.2.17': resolution: { - integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==, + integrity: sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==, } - d3-scale-chromatic@3.1.0: + '@types/topojson-client@3.1.5': resolution: { - integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==, + integrity: sha512-C79rySTyPxnQNNguTZNI1Ct4D7IXgvyAs3p9HPecnl6mNrJ5+UhvGNYcZfpROYV2lMHI48kJPxwR+F9C6c7nmw==, } - engines: { node: '>=12' } - d3-scale@4.0.2: + '@types/topojson-specification@1.0.5': resolution: { - integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==, + integrity: sha512-C7KvcQh+C2nr6Y2Ub4YfgvWvWCgP2nOQMtfhlnwsRL4pYmmwzBS7HclGiS87eQfDOU/DLQpX6GEscviaz4yLIQ==, } - engines: { node: '>=12' } - d3-selection@3.0.0: + '@types/tough-cookie@4.0.5': resolution: { - integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==, + integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==, } - engines: { node: '>=12' } - d3-shape@1.3.7: + '@types/trusted-types@2.0.7': resolution: { - integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==, + integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==, } - d3-shape@3.2.0: + '@types/use-sync-external-store@0.0.6': resolution: { - integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==, + integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==, } - engines: { node: '>=12' } - d3-time-format@4.1.0: + '@types/yargs-parser@21.0.3': resolution: { - integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==, + integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==, } - engines: { node: '>=12' } - d3-time@3.1.0: + '@types/yargs@17.0.35': resolution: { - integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==, + integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==, } - engines: { node: '>=12' } - d3-timer@3.0.1: + '@ungap/structured-clone@1.3.3': resolution: { - integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==, + integrity: sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==, } - engines: { node: '>=12' } - d3-transition@3.0.1: + '@vitejs/plugin-react@6.0.4': resolution: { - integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==, + integrity: sha512-XcCQz0TBpBgljhj0gMuuDj49i6Ytqh5q1osT/Gp5uAVJUCTWxyskk/l1jwYYiu2xcNHHipdMz40EGfM1VdamVg==, } - engines: { node: '>=12' } + engines: { node: ^20.19.0 || >=22.12.0 } peerDependencies: - d3-selection: 2 - 3 + '@rolldown/plugin-babel': ^0.1.7 || ^0.2.0 + babel-plugin-react-compiler: ^1.0.0 + vite: ^8.0.0 + peerDependenciesMeta: + '@rolldown/plugin-babel': + optional: true + babel-plugin-react-compiler: + optional: true - d3-zoom@3.0.0: + '@vitest/expect@4.1.10': resolution: { - integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==, + integrity: sha512-YsCn+qAk1GWjQOWFEsEcL2gNQ0zmVmQu3T03qP6UyjhtmdtwtbuI+DASn/7iQB3HGTXkdBwGddzxPlmiql5vlA==, } - engines: { node: '>=12' } - d3@7.9.0: + '@vitest/mocker@4.1.10': resolution: { - integrity: sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==, + integrity: sha512-v0xaezt+DKEmKfaxg133ldzADrwLGd7Ze1MfQQTYfvs8OqZIwbxyxaYURivwV7sWy5fqn3rH5uOrSp07bp44Ow==, } - engines: { node: '>=12' } + peerDependencies: + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true - data-urls@7.0.0: + '@vitest/pretty-format@4.1.10': resolution: { - integrity: sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==, + integrity: sha512-W1HsjSH4MXQ9YfmmhLAoIYf1HRfekQCGngeIgcei6MP5QQGWUe0gkopdZQaVCFO+JDJMrAJGwa5pRpNpvy4P8Q==, } - engines: { node: ^20.19.0 || ^22.12.0 || >=24.0.0 } - dataloader@1.4.0: + '@vitest/runner@4.1.10': resolution: { - integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==, + integrity: sha512-IKI6kpIH+LmpROplyLwBBaCfMgOZOMsygVa6BARD6ahA04VRuJSa6OaVG7kRvSEMD870Vd91rSSw0eegtWyLGg==, } - debug@2.6.9: + '@vitest/snapshot@4.1.10': resolution: { - integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==, + integrity: sha512-xRkfOT1qpTAi/Ti4Y1LtfRc3kEuqxGw59eN2jN9pRWMtS/XDevekhcFSqvQqjUNGksfjMJu3Y+oJ+4Ypn2OaJw==, } - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@3.2.7: + '@vitest/spy@4.1.10': resolution: { - integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==, + integrity: sha512-PLf/Ugvoq5wO/b4rwYCR1h2PSIdXz7wnkQFMiUpLdtM7l6pqVFcQIBEHyT1+l+cj7mNwAfZHzqXqDyjvOuwbDw==, } - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.4.3: + '@vitest/utils@4.1.10': resolution: { - integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==, + integrity: sha512-fy9am/HWxbaGt/Sawrp90vt6Y6jQwf1RX77cz3uwoJwJVMli/e1IEwRPnMNJ7vKfPTwo0diXifkpPvwH9v7nGA==, } - engines: { node: '>=6.0' } - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - decimal.js-light@2.5.1: + '@vscode/sudo-prompt@9.3.2': resolution: { - integrity: sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==, + integrity: sha512-gcXoCN00METUNFeQOFJ+C9xUI0DKB+0EGMVg7wbVYRHBw2Eq3fKisDZOkRdOz3kqXRKOENMfShPOmypw1/8nOw==, } - decimal.js@10.6.0: + '@vue/compiler-core@3.5.40': resolution: { - integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==, + integrity: sha512-39E8IgOhTbVDnoJFMKc2DvYnypcZwUqgUhQkccva/0m6FUwtIKSGV7n1hpVmYcFaoRAwf9pBcwnKlCEsN63ZEQ==, } - dedent-js@1.0.1: + '@vue/compiler-dom@3.5.40': resolution: { - integrity: sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==, + integrity: sha512-pwkx4vqlqOspFstrcmzwkKLePVMD3PT65imRzLhanU2V1Fj4K13g6OXjanOyzw3aTAuRk84BOmY8f3rEHqPaVA==, } - deepmerge@4.3.1: + '@vue/compiler-sfc@3.5.40': resolution: { - integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==, + integrity: sha512-gIf497P4kpuALcvs5n3AEg1Vdn0pSY4XbjASIfHNYF1/MP3T2Mf2STERTubysBxCRxzJGJYtF/O7vwJrxFB3Vw==, } - engines: { node: '>=0.10.0' } - defaults@1.0.4: + '@vue/compiler-ssr@3.5.40': resolution: { - integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==, + integrity: sha512-rrE5xiXG663+vHCHa3J9p2z5OcBRjXmoqenprJxAFQxg5pSshzeBiCE6pu46axapRJ2Adk0YDA2BRZVjiHXnhg==, } - define-lazy-prop@2.0.0: + '@vue/reactivity@3.1.5': resolution: { - integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==, + integrity: sha512-1tdfLmNjWG6t/CsPldh+foumYFo3cpyCHgBYQ34ylaMsJ+SNHQ1kApMIa8jN+i593zQuaw3AdWH0nJTARzCFhg==, } - engines: { node: '>=8' } - delaunator@5.1.0: + '@vue/reactivity@3.5.40': resolution: { - integrity: sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ==, + integrity: sha512-B7ot9UlUZOi1zbq61/LvE88ZLTV8IlajTdiZTAEiDQgrnIMIZoPr9kGw0Zw46ObW62O9+H/Be3kMbfb7kYPQZA==, } - delayed-stream@1.0.0: + '@vue/runtime-core@3.5.40': resolution: { - integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==, + integrity: sha512-KAZLweuZ6uUJPK1PMSQPgBU5gCjgrrfjUhSglmU9NhH+Zjepa8cnwSydPWDWHDwOgY4g3VcZ+PljbiHlURNCbw==, } - engines: { node: '>=0.4.0' } - dependency-graph@1.0.0: + '@vue/runtime-dom@3.5.40': resolution: { - integrity: sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==, + integrity: sha512-ZfrX8ssZQds900L9pr8AuK05ddnMsR4MPMZr8cPN9GoqoPWcXLhjvvbIA2SMv+7a97sJ1vv9pj/zxK0Cq/eEFQ==, } - engines: { node: '>=4' } - detect-indent@6.1.0: + '@vue/server-renderer@3.5.40': resolution: { - integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==, + integrity: sha512-XNJym9WpevhTVt1HuwOrCRJ5Q+9z4BjTMrDtjTrvx74SmUll8spNTw6whWJa9mEkO4PKn5TihI/bm/8ds2QVJw==, } - engines: { node: '>=8' } - detect-libc@2.1.2: + '@vue/shared@3.1.5': resolution: { - integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==, + integrity: sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA==, } - engines: { node: '>=8' } - devalue@5.8.2: + '@vue/shared@3.5.40': resolution: { - integrity: sha512-DObPPAfdtFbXjxLqK8s2Xk9ZuWz5+ZoFEhC7J76es4GU/rEiXwHTmbImoCdyoCOcBH1UF3+Cz6Z2sYD4hyl5TA==, + integrity: sha512-WxnBtruIqOoV3rA4jeKDWzrYI5h7Cp4+pjwDi8kWGHz+IslhiN+wguLVVhtv2l8VoU02rzDCVfDjgCl1lNpZVg==, } - dir-glob@3.0.1: + '@xmldom/xmldom@0.8.13': resolution: { - integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==, + integrity: sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw==, } - engines: { node: '>=8' } + engines: { node: '>=10.0.0' } - dotenv-expand@12.0.3: + '@xmldom/xmldom@0.9.10': resolution: { - integrity: sha512-uc47g4b+4k/M/SeaW1y4OApx+mtLWl92l5LMPP0GNXctZqELk+YGgOPIIC5elYmUH4OuoK3JLhuRUYegeySiFA==, + integrity: sha512-A9gOqLdi6cV4ibazAjcQufGj0B1y/vDqYrcuP6d/6x8P27gRS8643Dj9o1dEKtB6O7fwxb2FgBmJS2mX7gpvdw==, } - engines: { node: '>=12' } + engines: { node: '>=14.6' } - dotenv@16.4.7: + '@yarnpkg/lockfile@1.1.0': resolution: { - integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==, + integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==, } - engines: { node: '>=12' } - dotenv@8.6.0: + '@zkochan/js-yaml@0.0.7': resolution: { - integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==, + integrity: sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ==, } - engines: { node: '>=10' } + hasBin: true - dunder-proto@1.0.1: + abort-controller@3.0.0: resolution: { - integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==, + integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==, } - engines: { node: '>= 0.4' } + engines: { node: '>=6.5' } - echarts@6.1.0: + accepts@1.3.8: resolution: { - integrity: sha512-q0yaFPggC9FUdsWH4blavRWFmxdrIodbkoKNAjJudAI6CA9gNPxHtV2RcZNEepZVlk4yvBYkOkbk6HIVpIyHZA==, + integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==, } + engines: { node: '>= 0.6' } - ejs@5.0.1: + accepts@2.0.0: resolution: { - integrity: sha512-COqBPFMxuPTPspXl2DkVYaDS3HtrD1GpzOGkNTJ1IYkifq/r9h8SVEFrjA3D9/VJGOEoMQcrlhpntcSUrM8k6A==, + integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==, } - engines: { node: '>=0.12.18' } - hasBin: true + engines: { node: '>= 0.6' } - electron-to-chromium@1.5.397: + acorn@8.17.0: resolution: { - integrity: sha512-khGTy9U9x02KEtsKM8vx5A62BsRmcOsIgDpWr1ImE32Ax8GxHGPHZf+Eu9H8zOOyHJnB0jTbseyTHbq2XCT8yw==, + integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==, } + engines: { node: '>=0.4.0' } + hasBin: true - emoji-regex@10.6.0: + agent-base@7.1.4: resolution: { - integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==, + integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==, } + engines: { node: '>= 14' } - emoji-regex@8.0.0: + agent-cli-detector@0.1.4: resolution: { - integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==, + integrity: sha512-qPgevFvpaQoBaRJVKzr8R7h1WPvV3DtbgRIQlne4le66KBzXx5hNBwo/+NTw67LgkKBlhCzksrdautpUdlls0Q==, } + engines: { node: '>=18.18' } + hasBin: true - end-of-stream@1.4.5: + ajv@8.20.0: resolution: { - integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==, + integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==, } - enquirer@2.3.6: + alpinejs@3.15.12: resolution: { - integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==, + integrity: sha512-nJvPAQVNPdZZ0NrExJ/kzQco3ijR8LwvCOadQecllESiqT4NyZ/57sN9V2XyvhlBGAbmlKYgeWZvYdKq99ij/Q==, } - engines: { node: '>=8.6' } - enquirer@2.4.1: + anser@1.4.10: resolution: { - integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==, + integrity: sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==, } - engines: { node: '>=8.6' } - entities@6.0.1: + ansi-colors@4.1.3: resolution: { - integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==, + integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==, } - engines: { node: '>=0.12' } + engines: { node: '>=6' } - entities@7.0.1: + ansi-escapes@4.3.2: resolution: { - integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==, + integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==, } - engines: { node: '>=0.12' } + engines: { node: '>=8' } - entities@8.0.0: + ansi-fragments@0.2.1: resolution: { - integrity: sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==, + integrity: sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==, } - engines: { node: '>=20.19.0' } - errno@0.1.8: + ansi-regex@4.1.1: resolution: { - integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==, + integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==, } - hasBin: true + engines: { node: '>=6' } - error-stack-parser-es@1.0.5: + ansi-regex@5.0.1: resolution: { - integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==, + integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, } + engines: { node: '>=8' } - es-define-property@1.0.1: + ansi-regex@6.2.2: resolution: { - integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==, + integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==, } - engines: { node: '>= 0.4' } + engines: { node: '>=12' } - es-errors@1.3.0: + ansi-styles@3.2.1: resolution: { - integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==, + integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==, } - engines: { node: '>= 0.4' } + engines: { node: '>=4' } - es-module-lexer@2.3.1: + ansi-styles@4.3.0: resolution: { - integrity: sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==, + integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, } + engines: { node: '>=8' } - es-object-atoms@1.1.1: + ansi-styles@5.2.0: resolution: { - integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==, + integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==, } - engines: { node: '>= 0.4' } + engines: { node: '>=10' } - es-set-tostringtag@2.1.0: + ansi-styles@6.2.3: resolution: { - integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==, + integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==, } - engines: { node: '>= 0.4' } + engines: { node: '>=12' } - es-toolkit@1.50.0: + appdirsjs@1.2.8: resolution: { - integrity: sha512-OyZKhUVvEep9ITEiwHn8GKnMRQIVqoSIX7WnRbkWgJkllCujilqP2rD0u979tkl8wqyc8ICwlc1UBVv/Sl1G6w==, + integrity: sha512-8zl1xlxeS4a0/36CT6LOaVioPOL8TeLT1b9OHk0j9xSbzmPBuM7lUgWMSTh6SbuF8fbwjcP1rr30OCLpd1fl+A==, } - esbuild@0.27.7: + arg@5.0.2: resolution: { - integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==, + integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==, } - engines: { node: '>=18' } - hasBin: true - esbuild@0.28.1: + argparse@1.0.10: resolution: { - integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==, + integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==, } - engines: { node: '>=18' } - hasBin: true - escalade@3.2.0: + argparse@2.0.1: resolution: { - integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==, + integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, } - engines: { node: '>=6' } - escape-string-regexp@1.0.5: + aria-query@5.3.1: resolution: { - integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==, + integrity: sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==, } - engines: { node: '>=0.8.0' } + engines: { node: '>= 0.4' } - esm-env@1.2.2: + array-union@2.1.0: resolution: { - integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==, + integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==, } + engines: { node: '>=8' } - esprima@4.0.1: + asap@2.0.6: resolution: { - integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==, + integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==, } - engines: { node: '>=4' } - hasBin: true - esrap@2.3.0: + assertion-error@2.0.1: resolution: { - integrity: sha512-GQ/7RN8uOtEfNpzZzBMTzW9JBcX42oaSVtPzdF+6cEL8pqIL094iUpr9jzYGn4O4P/1S60dJ6izyT8F4LYARng==, + integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==, } - peerDependencies: - '@typescript-eslint/types': ^8.2.0 - peerDependenciesMeta: - '@typescript-eslint/types': - optional: true + engines: { node: '>=12' } - estree-walker@2.0.2: + astral-regex@1.0.0: resolution: { - integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==, + integrity: sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==, } + engines: { node: '>=4' } - estree-walker@3.0.3: + async-limiter@1.0.1: resolution: { - integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==, + integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==, } - eventemitter3@5.0.4: + asynckit@0.4.0: resolution: { - integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==, + integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==, } - expect-type@1.4.0: + axios@1.16.0: resolution: { - integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==, + integrity: sha512-6hp5CwvTPlN2A31g5dxnwAX0orzM7pmCRDLnZSX772mv8WDqICwFjowHuPs04Mc8deIld1+ejhtaMn5vp6b+1w==, } - engines: { node: '>=12.0.0' } - extendable-error@0.1.7: + axobject-query@4.1.0: resolution: { - integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==, + integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==, } + engines: { node: '>= 0.4' } - fast-deep-equal@3.1.3: + babel-plugin-jsx-dom-expressions@0.40.7: resolution: { - integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, + integrity: sha512-/O6JWUmjv03OI9lL2ry9bUjpD5S3PclM55RRJEyCdcFZ5W2SEA/59d+l2hNsk3gI6kiWRdRPdOtqZmsQzFN1pQ==, } + peerDependencies: + '@babel/core': ^7.20.12 - fast-glob@3.3.3: + babel-plugin-polyfill-corejs2@0.4.17: resolution: { - integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==, + integrity: sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==, } - engines: { node: '>=8.6.0' } + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - fast-uri@3.1.4: + babel-plugin-polyfill-corejs3@0.13.0: resolution: { - integrity: sha512-8JnbkQ4juDyvYs4mgFGQqg4yCYtFDtUtmp2QIQq11ZZe5CFQ5wcqm1rqDgAh/QdMySuBnPzMUiJUNZG5N/AiQw==, + integrity: sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==, } + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - fastq@1.20.1: + babel-plugin-polyfill-regenerator@0.6.8: resolution: { - integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==, + integrity: sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==, } + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - fdir@6.5.0: + babel-plugin-react-compiler@1.0.0: resolution: { - integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==, + integrity: sha512-Ixm8tFfoKKIPYdCCKYTsqv+Fd4IJ0DQqMyEimo+pxUOMUR9cVPlwTrFt9Avu+3cb6Zp3mAzl+t1MrG2fxxKsxw==, } - engines: { node: '>=12.0.0' } - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - figures@3.2.0: + babel-plugin-react-native-web@0.21.2: resolution: { - integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==, + integrity: sha512-SPD0J6qjJn8231i0HZhlAGH6NORe+QvRSQM2mwQEzJ2Fb3E4ruWTiiicPlHjmeWShDXLcvoorOCXjeR7k/lyWA==, } - engines: { node: '>=8' } - fill-range@7.1.1: + babel-plugin-syntax-hermes-parser@0.36.0: resolution: { - integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==, + integrity: sha512-LhD0xdoedDw7ansQgXbB2DADLZIK/LRXuWNBPuVzMc5S2WK5GyT89tCM+cQzxFGO0mGyLK6D5TrVOJJzAoDy8Q==, } - engines: { node: '>=8' } - find-cache-directory@6.0.0: + babel-plugin-transform-flow-enums@0.0.2: resolution: { - integrity: sha512-CvFd5ivA6HcSHbD+59P7CyzINHXzwhuQK8RY7CxJZtgDSAtRlHiCaQpZQ2lMR/WRyUIEmzUvL6G2AGurMfegZA==, + integrity: sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==, } - engines: { node: '>=20' } - find-up-simple@1.0.1: + babel-preset-expo@57.0.5: resolution: { - integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==, + integrity: sha512-sz9ZBTiUAlu5P9VORVNKoeAaY2qKFQRC6eQV5Y8aMkqcorvXKEv97UeCkFMLmMBEPKA+QeWImREKkX9/H21WQA==, } - engines: { node: '>=18' } + peerDependencies: + '@babel/runtime': ^7.20.0 + expo: '*' + expo-widgets: ^57.0.7 + react-refresh: '>=0.14.0 <1.0.0' + peerDependenciesMeta: + '@babel/runtime': + optional: true + expo: + optional: true + expo-widgets: + optional: true - find-up@4.1.0: + babel-preset-solid@1.9.12: resolution: { - integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==, + integrity: sha512-LLqnuKVDlKpyBlMPcH6qEvs/wmS9a+NczppxJ3ryS/c0O5IiSFOIBQi9GzyiGDSbcJpx4Gr87jyFTos1MyEuWg==, } - engines: { node: '>=8' } + peerDependencies: + '@babel/core': ^7.0.0 + solid-js: ^1.9.12 + peerDependenciesMeta: + solid-js: + optional: true - flat@5.0.2: + balanced-match@4.0.3: resolution: { - integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==, + integrity: sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g==, } - hasBin: true + engines: { node: 20 || >=22 } - follow-redirects@1.16.0: + base64-js@1.5.1: resolution: { - integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==, + integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==, } - engines: { node: '>=4.0' } - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - form-data@4.0.5: + baseline-browser-mapping@2.11.5: resolution: { - integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==, + integrity: sha512-xJo6a6YZnwZfnyGmQKWMbVOcii7XRibjOskRh+WJ9UHQoX16xrQrcIgAMQOzfvs8XiLMx6ih/fsLPF73iY2D1A==, } - engines: { node: '>= 6' } + engines: { node: '>=6.0.0' } + hasBin: true - form-data@4.0.6: + better-path-resolve@1.0.0: resolution: { - integrity: sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==, + integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==, } - engines: { node: '>= 6' } + engines: { node: '>=4' } - fs-constants@1.0.0: + bidi-js@1.0.3: resolution: { - integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==, + integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==, } - fs-extra@7.0.1: + big-integer@1.6.52: resolution: { - integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==, + integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==, } - engines: { node: '>=6 <7 || >=8' } + engines: { node: '>=0.6' } - fs-extra@8.1.0: + binary-search-bounds@2.0.5: resolution: { - integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==, + integrity: sha512-H0ea4Fd3lS1+sTEB2TgcLoK21lLhwEJzlQv3IN47pJS976Gx4zoWe0ak3q+uYh60ppQxg9F16Ri4tS1sfD4+jA==, } - engines: { node: '>=6 <7 || >=8' } - fsevents@2.3.2: + bl@4.1.0: resolution: { - integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==, + integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==, } - engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } - os: [darwin] - fsevents@2.3.3: + blake3-wasm@2.1.5: resolution: { - integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, + integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==, } - engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } - os: [darwin] - function-bind@1.1.2: + body-parser@1.20.6: resolution: { - integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==, + integrity: sha512-p5tAzS57i5MV9fZFDj9LeIiTZEufbSe2eDozP+ElheSUq1m74CRq1jI4mYNDdVs9vQztXFLuk/Gd6BWTdwRJ5g==, } + engines: { node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16 } - gensync@1.0.0-beta.2: + boolbase@1.0.0: resolution: { - integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==, + integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==, } - engines: { node: '>=6.9.0' } - get-caller-file@2.0.5: + bplist-creator@0.1.0: resolution: { - integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==, + integrity: sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg==, } - engines: { node: 6.* || 8.* || >= 10.* } - get-east-asian-width@1.6.0: + bplist-parser@0.3.1: resolution: { - integrity: sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==, + integrity: sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA==, } - engines: { node: '>=18' } + engines: { node: '>= 5.10.0' } - get-intrinsic@1.3.0: + bplist-parser@0.3.2: resolution: { - integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==, + integrity: sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==, } - engines: { node: '>= 0.4' } + engines: { node: '>= 5.10.0' } - get-proto@1.0.1: + brace-expansion@5.0.6: resolution: { - integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==, + integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==, } - engines: { node: '>= 0.4' } + engines: { node: 18 || 20 || >=22 } - glob-parent@5.1.2: + brace-expansion@5.0.8: resolution: { - integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, + integrity: sha512-JZyDyq3D4AUifKTPOB7DELf6XsB3WdPuNxCtob1vFXPsSXhdAiHBWJ/tJ8HAc9aH84BK+5JFZLNkJKx3G9kzQg==, } - engines: { node: '>= 6' } + engines: { node: 20 || >=22 } - globby@11.1.0: + braces@3.0.3: resolution: { - integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==, + integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==, } - engines: { node: '>=10' } + engines: { node: '>=8' } - gopd@1.2.0: + browserslist@4.28.7: resolution: { - integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==, + integrity: sha512-JxV13hNrFxqjOc8alRbq9dK1MM79NEXYpma2B2J4wAtpWS5zIEIKqWPGCl7N4o7Uc7B7itylh7SuDujATRyyTw==, } - engines: { node: '>= 0.4' } + engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } + hasBin: true - graceful-fs@4.2.11: + bser@2.1.1: resolution: { - integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, + integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==, } - has-flag@4.0.0: + buffer-from@1.1.2: resolution: { - integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, + integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==, } - engines: { node: '>=8' } - has-symbols@1.1.0: + buffer@5.7.1: resolution: { - integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==, + integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==, } - engines: { node: '>= 0.4' } - has-tostringtag@1.0.2: + bytes@3.1.2: resolution: { - integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==, + integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==, } - engines: { node: '>= 0.4' } + engines: { node: '>= 0.8' } - hasown@2.0.2: + call-bind-apply-helpers@1.0.2: resolution: { - integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==, + integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==, } engines: { node: '>= 0.4' } - hasown@2.0.4: + call-bound@1.0.4: resolution: { - integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==, + integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==, } engines: { node: '>= 0.4' } - html-encoding-sniffer@6.0.0: + callsites@3.1.0: resolution: { - integrity: sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==, + integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, } - engines: { node: ^20.19.0 || ^22.12.0 || >=24.0.0 } + engines: { node: '>=6' } - html-entities@2.3.3: + camelcase@5.3.1: resolution: { - integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==, + integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==, } + engines: { node: '>=6' } - human-id@4.2.0: + camelcase@6.3.0: resolution: { - integrity: sha512-K3GbkIWqyvvlpfhBPlbEvD97TtqBpAYA4kt+cn2lD2x2HuohzZCibcA2nOlnJT6exqvJLggoB5nv2dNf192nEA==, + integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==, } - hasBin: true + engines: { node: '>=10' } - iconv-lite@0.4.24: + caniuse-lite@1.0.30001806: resolution: { - integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==, + integrity: sha512-72Cuvd95zbSYPKq6Fhg8eDJRlzgWDf7/mtoZv6Qe/DYNCEBdNxoA3+rZAU2ZhGCpZlns3EssFavaZomckT5Uuw==, } - engines: { node: '>=0.10.0' } - iconv-lite@0.6.3: + chai@6.2.2: resolution: { - integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==, + integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==, } - engines: { node: '>=0.10.0' } + engines: { node: '>=18' } - iconv-lite@0.7.3: + chalk@2.4.2: resolution: { - integrity: sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==, + integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==, } - engines: { node: '>=0.10.0' } + engines: { node: '>=4' } - ieee754@1.2.1: + chalk@4.1.2: resolution: { - integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==, + integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, } + engines: { node: '>=10' } - ignore@5.3.2: + chalk@5.6.2: resolution: { - integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==, + integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==, } - engines: { node: '>= 4' } + engines: { node: ^12.17.0 || ^14.13 || >=16.0.0 } - ignore@7.0.5: + chardet@2.2.0: resolution: { - integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==, + integrity: sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA==, } - engines: { node: '>= 4' } - immer@11.1.15: + chart.js@4.5.1: resolution: { - integrity: sha512-VrNANlmnWQnh5COXIIOQXM9oOJw7naGKlBT74ZOOR6lpVXc3gFEu9FJLDFcpCJ2j+NWr8TIwtWD//T6ZX6TKiQ==, + integrity: sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==, } + engines: { pnpm: '>=8' } - immutable@5.1.9: + chokidar@4.0.3: resolution: { - integrity: sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==, + integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==, } + engines: { node: '>= 14.16.0' } - inherits@2.0.4: + chokidar@5.0.0: resolution: { - integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, + integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==, } + engines: { node: '>= 20.19.0' } - injection-js@2.6.1: + chrome-launcher@0.15.2: resolution: { - integrity: sha512-dbR5bdhi7TWDoCye9cByZqeg/gAfamm8Vu3G1KZOTYkOif8WkuM8CD0oeDPtZYMzT5YH76JAFB7bkmyY9OJi2A==, + integrity: sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==, } + engines: { node: '>=12.13.0' } + hasBin: true - internmap@1.0.1: + chromium-edge-launcher@0.3.0: resolution: { - integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==, + integrity: sha512-p03azHlGjtyRvFEee3cyvtsRYdniSkwjkzmM/KmVnqT5d7QkkwpJBhis/zCLMYdQMVJ5tt140TBNqqrZPaWeFA==, } - internmap@2.0.3: + ci-info@2.0.0: resolution: { - integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==, + integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==, } - engines: { node: '>=12' } - interval-tree-1d@1.0.4: + ci-info@3.9.0: resolution: { - integrity: sha512-wY8QJH+6wNI0uh4pDQzMvl+478Qh7Rl4qLmqiluxALlNvl+I+o5x38Pw3/z7mDPTPS1dQalZJXsmbvxx5gclhQ==, + integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==, } + engines: { node: '>=8' } - is-docker@2.2.1: + cli-cursor@2.1.0: resolution: { - integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==, + integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==, } - engines: { node: '>=8' } - hasBin: true + engines: { node: '>=4' } - is-extglob@2.1.1: + cli-cursor@3.1.0: resolution: { - integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, + integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==, } - engines: { node: '>=0.10.0' } + engines: { node: '>=8' } - is-fullwidth-code-point@3.0.0: + cli-cursor@5.0.0: resolution: { - integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==, + integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==, } - engines: { node: '>=8' } + engines: { node: '>=18' } - is-glob@4.0.3: + cli-spinners@2.6.1: resolution: { - integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, + integrity: sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==, } - engines: { node: '>=0.10.0' } + engines: { node: '>=6' } - is-interactive@1.0.0: + cli-spinners@3.4.0: resolution: { - integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==, + integrity: sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw==, } - engines: { node: '>=8' } + engines: { node: '>=18.20' } - is-interactive@2.0.0: + cliui@6.0.0: resolution: { - integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==, + integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==, } - engines: { node: '>=12' } - is-number@7.0.0: + cliui@8.0.1: resolution: { - integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, + integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==, } - engines: { node: '>=0.12.0' } + engines: { node: '>=12' } - is-potential-custom-element-name@1.0.1: + cliui@9.0.1: resolution: { - integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==, + integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==, } + engines: { node: '>=20' } - is-reference@3.0.3: + clone@1.0.4: resolution: { - integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==, + integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==, } + engines: { node: '>=0.8' } - is-subdir@1.2.0: + clsx@2.1.1: resolution: { - integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==, + integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==, } - engines: { node: '>=4' } + engines: { node: '>=6' } - is-unicode-supported@0.1.0: + color-convert@1.9.3: resolution: { - integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==, + integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==, } - engines: { node: '>=10' } - is-unicode-supported@2.1.0: + color-convert@2.0.1: resolution: { - integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==, + integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, } - engines: { node: '>=18' } + engines: { node: '>=7.0.0' } - is-what@4.1.16: + color-name@1.1.3: resolution: { - integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==, + integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==, } - engines: { node: '>=12.13' } - is-windows@1.0.2: + color-name@1.1.4: resolution: { - integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==, + integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, } - engines: { node: '>=0.10.0' } - is-wsl@2.2.0: + colorette@1.4.0: resolution: { - integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==, + integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==, } - engines: { node: '>=8' } - isexe@2.0.0: + combined-stream@1.0.8: resolution: { - integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, + integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==, } + engines: { node: '>= 0.8' } - isoformat@0.2.1: + command-exists@1.2.9: resolution: { - integrity: sha512-tFLRAygk9NqrRPhJSnNGh7g7oaVWDwR0wKh/GM2LgmPa50Eg4UfyaCO4I8k6EqJHl1/uh2RAD6g06n5ygEnrjQ==, + integrity: sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==, } - js-tokens@4.0.0: + commander@12.1.0: resolution: { - integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, + integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==, } + engines: { node: '>=18' } - js-yaml@3.15.0: + commander@14.0.3: resolution: { - integrity: sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==, + integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==, } - hasBin: true + engines: { node: '>=20' } - js-yaml@4.3.0: + commander@2.20.3: resolution: { - integrity: sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==, + integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==, } - hasBin: true - jsdom@29.1.1: + commander@7.2.0: resolution: { - integrity: sha512-ECi4Fi2f7BdJtUKTflYRTiaMxIB0O6zfR1fX0GXpUrf6flp8QIYn1UT20YQqdSOfk2dfkCwS8LAFoJDEppNK5Q==, + integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==, } - engines: { node: ^20.19.0 || ^22.13.0 || >=24.0.0 } - peerDependencies: - canvas: ^3.0.0 - peerDependenciesMeta: - canvas: - optional: true + engines: { node: '>= 10' } - jsesc@3.1.0: + commander@9.5.0: resolution: { - integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==, + integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==, } - engines: { node: '>=6' } - hasBin: true + engines: { node: ^12.20.0 || >=14 } - json-schema-traverse@1.0.0: + common-path-prefix@3.0.0: resolution: { - integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==, + integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==, } - json5@2.2.3: + compressible@2.0.18: resolution: { - integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==, + integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==, } - engines: { node: '>=6' } - hasBin: true + engines: { node: '>= 0.6' } - jsonc-parser@3.2.0: + compression@1.8.1: resolution: { - integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==, + integrity: sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==, } + engines: { node: '>= 0.8.0' } - jsonc-parser@3.3.1: + connect@3.7.0: resolution: { - integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==, + integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==, } + engines: { node: '>= 0.10.0' } - jsonfile@4.0.0: + content-type@1.0.5: resolution: { - integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==, + integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==, } + engines: { node: '>= 0.6' } - kleur@4.1.5: + convert-source-map@1.9.0: resolution: { - integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==, + integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==, } - engines: { node: '>=6' } - less@4.8.1: + convert-source-map@2.0.0: resolution: { - integrity: sha512-jQ3lRIo1aUtiWVYXZ7mk4+V4BjCGswF3IxTLJ+4RUta8ZiHh8lhkig2G8dya2eCcyR1dYUvzuV46EkJN8PSwww==, + integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==, } - engines: { node: '>=18' } - hasBin: true - lightningcss-android-arm64@1.33.0: + cookie@1.1.1: resolution: { - integrity: sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==, + integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==, } - engines: { node: '>= 12.0.0' } - cpu: [arm64] - os: [android] + engines: { node: '>=18' } - lightningcss-darwin-arm64@1.33.0: + copy-anything@3.0.5: resolution: { - integrity: sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==, + integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==, } - engines: { node: '>= 12.0.0' } - cpu: [arm64] - os: [darwin] + engines: { node: '>=12.13' } - lightningcss-darwin-x64@1.33.0: + core-js-compat@3.49.0: resolution: { - integrity: sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==, + integrity: sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==, } - engines: { node: '>= 12.0.0' } - cpu: [x64] - os: [darwin] - lightningcss-freebsd-x64@1.33.0: + cosmiconfig@9.0.2: resolution: { - integrity: sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==, + integrity: sha512-gtTZxTDau1wL7Y7zifc2dd8jHSK/k6BTx/2Xp/BpdlAdnlYWFVt7qhJqgwi7637yRwRQ3qL4ZidbB4I8tA5VOg==, } - engines: { node: '>= 12.0.0' } - cpu: [x64] - os: [freebsd] + engines: { node: '>=14' } + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true - lightningcss-linux-arm-gnueabihf@1.33.0: + cross-spawn@7.0.6: resolution: { - integrity: sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==, + integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==, } - engines: { node: '>= 12.0.0' } - cpu: [arm] - os: [linux] + engines: { node: '>= 8' } - lightningcss-linux-arm64-gnu@1.33.0: + css-select@5.2.2: resolution: { - integrity: sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==, + integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==, } - engines: { node: '>= 12.0.0' } - cpu: [arm64] - os: [linux] - libc: [glibc] - lightningcss-linux-arm64-musl@1.33.0: + css-tree@1.1.3: resolution: { - integrity: sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==, + integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==, } - engines: { node: '>= 12.0.0' } - cpu: [arm64] - os: [linux] - libc: [musl] + engines: { node: '>=8.0.0' } - lightningcss-linux-x64-gnu@1.33.0: + css-tree@3.2.1: resolution: { - integrity: sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==, + integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==, } - engines: { node: '>= 12.0.0' } - cpu: [x64] - os: [linux] - libc: [glibc] + engines: { node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0 } - lightningcss-linux-x64-musl@1.33.0: + css-what@6.2.2: resolution: { - integrity: sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==, + integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==, } - engines: { node: '>= 12.0.0' } - cpu: [x64] - os: [linux] - libc: [musl] + engines: { node: '>= 6' } - lightningcss-win32-arm64-msvc@1.33.0: + csstype@3.2.3: resolution: { - integrity: sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==, + integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==, } - engines: { node: '>= 12.0.0' } - cpu: [arm64] - os: [win32] - lightningcss-win32-x64-msvc@1.33.0: + d3-array@2.12.1: resolution: { - integrity: sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==, + integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==, } - engines: { node: '>= 12.0.0' } - cpu: [x64] - os: [win32] - lightningcss@1.33.0: + d3-array@3.2.4: resolution: { - integrity: sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==, + integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==, } - engines: { node: '>= 12.0.0' } + engines: { node: '>=12' } - lines-and-columns@2.0.3: + d3-axis@3.0.0: resolution: { - integrity: sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==, + integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==, } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + engines: { node: '>=12' } - lit-element@4.2.2: + d3-brush@3.0.0: resolution: { - integrity: sha512-aFKhNToWxoyhkNDmWZwEva2SlQia+jfG0fjIWV//YeTaWrVnOxD89dPKfigCUspXFmjzOEUQpOkejH5Ly6sG0w==, + integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==, } + engines: { node: '>=12' } - lit-html@3.3.3: + d3-chord@3.0.1: resolution: { - integrity: sha512-el8M6jK2o3RXBnrSHX3ZKrsN8zEV63pSExTO1wYJz7QndGYZ8353e2a5PPX+qHe2aGayfnchQmkAojaWAREOIA==, + integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==, } + engines: { node: '>=12' } - lit@3.3.3: + d3-color@3.1.0: resolution: { - integrity: sha512-fycuvZg/hkpozL00lm1pEJH5nN/lr9ZXd6mJI2HSN4+Bzc+LDNdEApJ6HFbPkdFNHLvOplIIuJvxkS4XUxqirw==, + integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==, } + engines: { node: '>=12' } - locate-character@3.0.0: + d3-contour@4.0.2: resolution: { - integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==, + integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==, } + engines: { node: '>=12' } - locate-path@5.0.0: + d3-delaunay@6.0.4: resolution: { - integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==, + integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==, } - engines: { node: '>=8' } + engines: { node: '>=12' } - lodash.merge@4.6.2: + d3-dispatch@3.0.1: resolution: { - integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==, + integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==, } + engines: { node: '>=12' } - lodash.startcase@4.4.0: + d3-drag@3.0.0: resolution: { - integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==, + integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==, } + engines: { node: '>=12' } - log-symbols@4.1.0: + d3-dsv@3.0.1: resolution: { - integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==, + integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==, } - engines: { node: '>=10' } + engines: { node: '>=12' } + hasBin: true - log-symbols@7.0.1: + d3-ease@3.0.1: resolution: { - integrity: sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==, + integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==, } - engines: { node: '>=18' } + engines: { node: '>=12' } - lru-cache@11.5.2: + d3-fetch@3.0.1: resolution: { - integrity: sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==, + integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==, } - engines: { node: 20 || >=22 } + engines: { node: '>=12' } - lru-cache@5.1.1: + d3-force@3.0.0: resolution: { - integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==, + integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==, } + engines: { node: '>=12' } - magic-string@0.30.21: + d3-format@3.1.2: resolution: { - integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==, + integrity: sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==, } + engines: { node: '>=12' } - make-dir@5.1.0: + d3-geo@3.1.1: resolution: { - integrity: sha512-IfpFq6UM39dUNiphpA6uDezNx/AvWyhwfICWPR3t1VspkgkMZrL+Rk1RbN1bx+aeNYwOrqGJgEgV3yotk+ZUVw==, + integrity: sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==, } - engines: { node: '>=18' } + engines: { node: '>=12' } - math-intrinsics@1.1.0: + d3-hexbin@0.2.2: resolution: { - integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==, + integrity: sha512-KS3fUT2ReD4RlGCjvCEm1RgMtp2NFZumdMu4DBzQK8AZv3fXRM6Xm8I4fSU07UXvH4xxg03NwWKWdvxfS/yc4w==, } - engines: { node: '>= 0.4' } - mdn-data@2.27.1: + d3-hierarchy@3.1.2: resolution: { - integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==, + integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==, } + engines: { node: '>=12' } - merge-anything@5.1.7: + d3-interpolate@3.0.1: resolution: { - integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==, + integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==, } - engines: { node: '>=12.13' } + engines: { node: '>=12' } - merge2@1.4.1: + d3-path@1.0.9: resolution: { - integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, + integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==, } - engines: { node: '>= 8' } - micromatch@4.0.8: + d3-path@3.1.0: resolution: { - integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==, + integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==, } - engines: { node: '>=8.6' } + engines: { node: '>=12' } - mime-db@1.52.0: + d3-polygon@3.0.1: resolution: { - integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==, + integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==, } - engines: { node: '>= 0.6' } + engines: { node: '>=12' } - mime-types@2.1.35: + d3-quadtree@3.0.1: resolution: { - integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==, + integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==, } - engines: { node: '>= 0.6' } - - mime@1.6.0: - resolution: - { - integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==, - } - engines: { node: '>=4' } - hasBin: true + engines: { node: '>=12' } - mimic-fn@2.1.0: + d3-random@3.0.1: resolution: { - integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==, + integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==, } - engines: { node: '>=6' } + engines: { node: '>=12' } - mimic-function@5.0.1: + d3-sankey@0.12.3: resolution: { - integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==, + integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==, } - engines: { node: '>=18' } - miniflare@4.20260617.1: + d3-scale-chromatic@3.1.0: resolution: { - integrity: sha512-Go3/gzStm99QHptsSgU+q1S+xDfLoRgwjJNY80kaTVi0ENhTyqKq+sc4xZiWBSbM7uUcJwmzm8+QFKtcYLJ9nw==, + integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==, } - engines: { node: '>=22.0.0' } - hasBin: true + engines: { node: '>=12' } - minimatch@10.2.5: + d3-scale@4.0.2: resolution: { - integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==, + integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==, } - engines: { node: 18 || 20 || >=22 } + engines: { node: '>=12' } - minimist@1.2.8: + d3-selection@3.0.0: resolution: { - integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==, + integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==, } + engines: { node: '>=12' } - mri@1.2.0: + d3-shape@1.3.7: resolution: { - integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==, + integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==, } - engines: { node: '>=4' } - ms@2.0.0: + d3-shape@3.2.0: resolution: { - integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==, + integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==, } + engines: { node: '>=12' } - ms@2.1.3: + d3-time-format@4.1.0: resolution: { - integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==, + integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==, } + engines: { node: '>=12' } - nanoid@3.3.16: + d3-time@3.1.0: resolution: { - integrity: sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==, + integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==, } - engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } - hasBin: true + engines: { node: '>=12' } - needle@2.9.1: + d3-timer@3.0.1: resolution: { - integrity: sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==, + integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==, } - engines: { node: '>= 4.4.x' } - hasBin: true + engines: { node: '>=12' } - needle@3.5.0: + d3-transition@3.0.1: resolution: { - integrity: sha512-jaQyPKKk2YokHrEg+vFDYxXIHTCBgiZwSHOoVx/8V3GIBS8/VN6NdVRmg8q1ERtPkMvmOvebsgga4sAj5hls/w==, + integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==, } - engines: { node: '>= 4.4.x' } - hasBin: true + engines: { node: '>=12' } + peerDependencies: + d3-selection: 2 - 3 - ng-packagr@22.0.2: + d3-zoom@3.0.0: resolution: { - integrity: sha512-8qQ+RWm0W3gK8Sch1kmo3EzIUiCTXIOP2gS7b+vtqCMBf4KBjBP0wFBikW5qRau9lGOzRTML0GPFGoARPR4+fw==, + integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==, } - engines: { node: ^22.22.3 || ^24.15.0 || >=26.0.0 } - hasBin: true - peerDependencies: - '@angular/compiler-cli': ^22.0.0 || ^22.1.0-next.0 - tailwindcss: ^2.0.0 || ^3.0.0 || ^4.0.0 - tslib: ^2.3.0 - typescript: '>=6.0 <6.1' - peerDependenciesMeta: - tailwindcss: - optional: true + engines: { node: '>=12' } - node-addon-api@7.1.1: + d3@7.9.0: resolution: { - integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==, + integrity: sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==, } + engines: { node: '>=12' } - node-fetch@2.7.0: + data-urls@7.0.0: resolution: { - integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==, + integrity: sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==, } - engines: { node: 4.x || >=6.0.0 } - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true + engines: { node: ^20.19.0 || ^22.12.0 || >=24.0.0 } - node-releases@2.0.51: + dataloader@1.4.0: resolution: { - integrity: sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==, + integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==, } - engines: { node: '>=18' } - npm-run-path@4.0.1: + dayjs@1.11.21: resolution: { - integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==, + integrity: sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==, } - engines: { node: '>=8' } - nx@22.7.5: + debug@2.6.9: resolution: { - integrity: sha512-zoxsJabb33jl1QYnalDn0bicryrEBgSzdKp90d7VGGv/jDgzKrcLg/hw2ZxeYiOjWPIT/o8QNT9G9vTs4dv3AQ==, + integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==, } - hasBin: true peerDependencies: - '@swc-node/register': ^1.11.1 - '@swc/core': ^1.15.8 + supports-color: '*' peerDependenciesMeta: - '@swc-node/register': - optional: true - '@swc/core': + supports-color: optional: true - obug@2.1.4: - resolution: - { - integrity: sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==, - } - engines: { node: '>=12.20.0' } - - octane@0.1.13: + debug@3.2.7: resolution: { - integrity: sha512-bjmuF0hjLnBPOqOLTWyOtq6U5tklKw/JKF/qbAlZ2gfAZsoL9NiK7tQSWibuIUSerXELvLfmPmpbyt0fItemsg==, + integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==, } - engines: { node: '>=22' } peerDependencies: - react: ^19.0.0 - react-dom: ^19.0.0 - vite: ^8.0.16 + supports-color: '*' peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - vite: + supports-color: optional: true - once@1.4.0: + debug@4.4.3: resolution: { - integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==, + integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==, } + engines: { node: '>=6.0' } + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true - onetime@5.1.2: + decamelize@1.2.0: resolution: { - integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==, + integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==, } - engines: { node: '>=6' } + engines: { node: '>=0.10.0' } - onetime@7.0.0: + decimal.js-light@2.5.1: resolution: { - integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==, + integrity: sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==, } - engines: { node: '>=18' } - open@8.4.2: + decimal.js@10.6.0: resolution: { - integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==, + integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==, } - engines: { node: '>=12' } - ora@5.3.0: + dedent-js@1.0.1: resolution: { - integrity: sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==, + integrity: sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==, } - engines: { node: '>=10' } - ora@9.4.1: + deepmerge@4.3.1: resolution: { - integrity: sha512-6VlU9MLXbjVQD04AZCMX28hVtA5bUoadvUqO76MUCVA0ilwJbMiHsITRPfyVm6p/BC0Av/BXMujx39WCe1LEqw==, + integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==, } - engines: { node: '>=20' } + engines: { node: '>=0.10.0' } - outdent@0.5.0: + defaults@1.0.4: resolution: { - integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==, + integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==, } - p-filter@2.1.0: + define-lazy-prop@2.0.0: resolution: { - integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==, + integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==, } engines: { node: '>=8' } - p-limit@2.3.0: + delaunator@5.1.0: resolution: { - integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==, + integrity: sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ==, } - engines: { node: '>=6' } - p-locate@4.1.0: + delayed-stream@1.0.0: resolution: { - integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==, + integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==, } - engines: { node: '>=8' } + engines: { node: '>=0.4.0' } - p-map@2.1.0: + depd@2.0.0: resolution: { - integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==, + integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==, } - engines: { node: '>=6' } + engines: { node: '>= 0.8' } - p-try@2.2.0: + dependency-graph@1.0.0: resolution: { - integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==, + integrity: sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==, } - engines: { node: '>=6' } + engines: { node: '>=4' } - package-manager-detector@0.2.11: + destroy@1.2.0: resolution: { - integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==, + integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==, } + engines: { node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16 } - parse-node-version@1.0.1: + detect-indent@6.1.0: resolution: { - integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==, + integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==, } - engines: { node: '>= 0.10' } + engines: { node: '>=8' } - parse5@7.3.0: + detect-libc@2.1.2: resolution: { - integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==, + integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==, } + engines: { node: '>=8' } - parse5@8.0.1: + devalue@5.8.2: resolution: { - integrity: sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==, + integrity: sha512-DObPPAfdtFbXjxLqK8s2Xk9ZuWz5+ZoFEhC7J76es4GU/rEiXwHTmbImoCdyoCOcBH1UF3+Cz6Z2sYD4hyl5TA==, } - path-exists@4.0.0: + dir-glob@3.0.1: resolution: { - integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==, + integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==, } engines: { node: '>=8' } - path-key@3.1.1: + dnssd-advertise@1.1.6: resolution: { - integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, + integrity: sha512-Ndrrf6BMPalkQPd/zubL+4YghH2J9NspapQ09uDXwYbvOPkP0oaqf5CkcwJ0b50kS2O3ul6yVu+jz+RY62Cejg==, } - engines: { node: '>=8' } - path-to-regexp@6.3.0: + dom-serializer@2.0.0: resolution: { - integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==, + integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==, } - path-type@4.0.0: + domelementtype@2.3.0: resolution: { - integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==, + integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==, } - engines: { node: '>=8' } - pathe@2.0.3: + domhandler@5.0.3: resolution: { - integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==, + integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==, } + engines: { node: '>= 4' } - picocolors@1.1.1: + domutils@3.2.2: resolution: { - integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==, + integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==, } - picomatch@2.3.2: + dotenv-expand@12.0.3: resolution: { - integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==, + integrity: sha512-uc47g4b+4k/M/SeaW1y4OApx+mtLWl92l5LMPP0GNXctZqELk+YGgOPIIC5elYmUH4OuoK3JLhuRUYegeySiFA==, } - engines: { node: '>=8.6' } + engines: { node: '>=12' } - picomatch@4.0.5: + dotenv@16.4.7: resolution: { - integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==, + integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==, } engines: { node: '>=12' } - pify@4.0.1: + dotenv@8.6.0: resolution: { - integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==, + integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==, } - engines: { node: '>=6' } + engines: { node: '>=10' } - piscina@5.3.0: + dunder-proto@1.0.1: resolution: { - integrity: sha512-9D3tPBayfoal6l9l4Y8NrMn1jkV718qJoYrla6P51+hh9h0Q+9/1c8KgEnoBQqhguyfgjay4biADI8HJG3pkoA==, + integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==, } - engines: { node: '>=20.x' } + engines: { node: '>= 0.4' } - pkg-dir@8.0.0: + echarts@6.1.0: resolution: { - integrity: sha512-4peoBq4Wks0riS0z8741NVv+/8IiTvqnZAr8QGgtdifrtpdXbNw/FxRS1l6NFqm4EMzuS0EDqNNx4XGaz8cuyQ==, + integrity: sha512-q0yaFPggC9FUdsWH4blavRWFmxdrIodbkoKNAjJudAI6CA9gNPxHtV2RcZNEepZVlk4yvBYkOkbk6HIVpIyHZA==, } - engines: { node: '>=18' } - playwright-core@1.62.0: + ee-first@1.1.1: resolution: { - integrity: sha512-nsNRyq0r2zsG8AcRHWknc9QRA5XCueC7gWMrs+Gx2tlZn9hcl8zudfh00lhJPY1DE7NmZ6bDsT9g2yey8mXljA==, + integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==, } - engines: { node: '>=20' } - hasBin: true - playwright@1.62.0: + ejs@5.0.1: resolution: { - integrity: sha512-Z14dG305dgaLu6foB1TXQagFiW8JfSUIUaUuPaKQ6NtBPKF1P/qXcqfh6c6K/icPqdy37JmjbiBXf6JNg6Sylw==, + integrity: sha512-COqBPFMxuPTPspXl2DkVYaDS3HtrD1GpzOGkNTJ1IYkifq/r9h8SVEFrjA3D9/VJGOEoMQcrlhpntcSUrM8k6A==, } - engines: { node: '>=20' } + engines: { node: '>=0.12.18' } hasBin: true - postcss@8.5.23: + electron-to-chromium@1.5.397: resolution: { - integrity: sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg==, + integrity: sha512-khGTy9U9x02KEtsKM8vx5A62BsRmcOsIgDpWr1ImE32Ax8GxHGPHZf+Eu9H8zOOyHJnB0jTbseyTHbq2XCT8yw==, } - engines: { node: ^10 || ^12 || >=14 } - preact-render-to-string@6.7.0: + emoji-regex@10.6.0: resolution: { - integrity: sha512-Z4WR8fmLMRpdYqJ9i7vrlXSsSrxVJydwrkEXHapexfARbWfGb7vGcnvNQnIzN0cXciMVOlz/XLoiMCi9gUsy9Q==, + integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==, } - peerDependencies: - preact: '>=10 || >= 11.0.0-0' - preact@10.29.7: + emoji-regex@8.0.0: resolution: { - integrity: sha512-DCHYrK/B10yUD3ZjLfhZ3WIE/9Vf9VFUODcRE2dRomTYDpJk6z6L9wecSfhfE6M9ZTHUdyQkoC46arIDhEV84Q==, + integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==, } - peerDependencies: - preact-render-to-string: '>=5' - peerDependenciesMeta: - preact-render-to-string: - optional: true - prettier@2.8.8: + encodeurl@1.0.2: resolution: { - integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==, + integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==, } - engines: { node: '>=10.13.0' } - hasBin: true + engines: { node: '>= 0.8' } - prettier@3.9.6: + encodeurl@2.0.0: resolution: { - integrity: sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g==, + integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==, } - engines: { node: '>=14' } - hasBin: true + engines: { node: '>= 0.8' } - probe-image-size@7.3.0: + end-of-stream@1.4.5: resolution: { - integrity: sha512-7CaDeBwiAbh6ohXsvLbAZhO7wzsZAmaevfxe39qvCwRh8LyaZfDlBGGLU1CCTgrTLtCOdwBBhjOrIHaIIimHfQ==, + integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==, } - proxy-from-env@2.1.0: + enquirer@2.3.6: resolution: { - integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==, + integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==, } - engines: { node: '>=10' } + engines: { node: '>=8.6' } - prr@1.0.1: + enquirer@2.4.1: resolution: { - integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==, + integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==, } + engines: { node: '>=8.6' } - punycode@2.3.1: + entities@4.5.0: resolution: { - integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==, + integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==, } - engines: { node: '>=6' } + engines: { node: '>=0.12' } - quansync@0.2.11: + entities@6.0.1: resolution: { - integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==, + integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==, } + engines: { node: '>=0.12' } - queue-microtask@1.2.3: + entities@7.0.1: resolution: { - integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, + integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==, } + engines: { node: '>=0.12' } - react-dom@19.2.3: + entities@8.0.0: resolution: { - integrity: sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==, + integrity: sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==, } - peerDependencies: - react: ^19.2.3 + engines: { node: '>=20.19.0' } - react-is@19.2.8: + env-paths@2.2.1: resolution: { - integrity: sha512-s5un28nYxKJw5gvUHyW5PCC28CvBqLu9r3cWgzHT4Vo/5fqqkFcdRYsGcKf50WMPpjjFZS5d76fn3YCo2njKwQ==, + integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==, } + engines: { node: '>=6' } - react-redux@9.3.0: + envinfo@7.21.0: resolution: { - integrity: sha512-KQopgqFo/p/fgmAs5qz6p5RWaNAzq40WAu7fJIXnQpYxFPbJYtsJPWvGeF2rOBaY/kEuV77AVsX8TsQzKm+A/g==, + integrity: sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow==, } - peerDependencies: - '@types/react': ^18.2.25 || ^19 - react: ^18.0 || ^19 - redux: ^5.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - redux: - optional: true + engines: { node: '>=4' } + hasBin: true - react@19.2.3: + errno@0.1.8: resolution: { - integrity: sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==, + integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==, } - engines: { node: '>=0.10.0' } + hasBin: true - read-yaml-file@1.1.0: + error-ex@1.3.4: resolution: { - integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==, + integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==, } - engines: { node: '>=6' } - readable-stream@3.6.2: + error-stack-parser-es@1.0.5: resolution: { - integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==, + integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==, } - engines: { node: '>= 6' } - readdirp@4.1.2: + error-stack-parser@2.1.4: resolution: { - integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==, + integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==, } - engines: { node: '>= 14.18.0' } - readdirp@5.0.0: + errorhandler@1.5.2: resolution: { - integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==, + integrity: sha512-kNAL7hESndBCrWwS72QyV3IVOTrVmj9D062FV5BQswNL5zEdeRmz/WJFyh6Aj/plvvSOrzddkxW57HgkZcR9Fw==, } - engines: { node: '>= 20.19.0' } + engines: { node: '>= 0.8' } - recharts@3.10.1: + es-define-property@1.0.1: resolution: { - integrity: sha512-QXFrvt6IVcw7eeZCoyXTwkIJAX3Dv1nyVhMicXJ47GsGDDpcN8z6o644DibE9XjpBTThtsomLKnTV6lc+cVFUA==, + integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==, } - engines: { node: '>=18' } - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-is: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + engines: { node: '>= 0.4' } - redux-thunk@3.1.0: + es-errors@1.3.0: resolution: { - integrity: sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==, + integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==, } - peerDependencies: - redux: ^5.0.0 + engines: { node: '>= 0.4' } - redux@5.0.1: + es-module-lexer@2.3.1: resolution: { - integrity: sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==, + integrity: sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==, } - reflect-metadata@0.2.2: + es-object-atoms@1.1.1: resolution: { - integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==, + integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==, } + engines: { node: '>= 0.4' } - require-directory@2.1.1: + es-set-tostringtag@2.1.0: resolution: { - integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==, + integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==, } - engines: { node: '>=0.10.0' } + engines: { node: '>= 0.4' } - require-from-string@2.0.2: + es-toolkit@1.50.0: resolution: { - integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==, + integrity: sha512-OyZKhUVvEep9ITEiwHn8GKnMRQIVqoSIX7WnRbkWgJkllCujilqP2rD0u979tkl8wqyc8ICwlc1UBVv/Sl1G6w==, } - engines: { node: '>=0.10.0' } - reselect@5.2.0: + esbuild@0.27.7: resolution: { - integrity: sha512-AgZ3UOZm3YndfrJ4OYjgrT7bmCm/1iqkjvEfH/oYjzh6PD2qw4QuT3jjnXIrpdt4MTpMXclMT3lXbmRY+XRakw==, + integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==, } + engines: { node: '>=18' } + hasBin: true - resolve-from@5.0.0: + esbuild@0.28.1: resolution: { - integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==, + integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==, } - engines: { node: '>=8' } + engines: { node: '>=18' } + hasBin: true - resolve.exports@2.0.3: + escalade@3.2.0: resolution: { - integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==, + integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==, } - engines: { node: '>=10' } + engines: { node: '>=6' } - restore-cursor@3.1.0: + escape-html@1.0.3: resolution: { - integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==, + integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==, } - engines: { node: '>=8' } - restore-cursor@5.1.0: + escape-string-regexp@1.0.5: resolution: { - integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==, + integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==, } - engines: { node: '>=18' } + engines: { node: '>=0.8.0' } - reusify@1.1.0: + escape-string-regexp@4.0.0: resolution: { - integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==, + integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==, } - engines: { iojs: '>=1.0.0', node: '>=0.10.0' } + engines: { node: '>=10' } - robust-predicates@3.0.3: + esm-env@1.2.2: resolution: { - integrity: sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==, + integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==, } - rolldown@1.1.5: + esprima@4.0.1: resolution: { - integrity: sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA==, + integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==, } - engines: { node: ^20.19.0 || >=22.12.0 } + engines: { node: '>=4' } hasBin: true - rollup-plugin-dts@6.4.1: + esrap@2.3.0: resolution: { - integrity: sha512-l//F3Zf7ID5GoOfLfD8kroBjQKEKpy1qfhtAdnpibFZMffPaylrg1CoDC2vGkPeTeyxUe4bVFCln2EFuL7IGGg==, + integrity: sha512-GQ/7RN8uOtEfNpzZzBMTzW9JBcX42oaSVtPzdF+6cEL8pqIL094iUpr9jzYGn4O4P/1S60dJ6izyT8F4LYARng==, } - engines: { node: '>=20' } peerDependencies: - rollup: ^3.29.4 || ^4 - typescript: ^4.5 || ^5.0 || ^6.0 + '@typescript-eslint/types': ^8.2.0 + peerDependenciesMeta: + '@typescript-eslint/types': + optional: true - rollup@4.62.3: + estree-walker@2.0.2: resolution: { - integrity: sha512-Gu0c0iH9FzgX1L1t7ByIbbS3Vmdz+6KHm/EsqmmC71gUQ82yvZRkTK6XzrFObSka91WUVdynqp6nsfilzr5k6Q==, + integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==, } - engines: { node: '>=18.0.0', npm: '>=8.0.0' } - hasBin: true - run-parallel@1.2.0: + estree-walker@3.0.3: resolution: { - integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, + integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==, } - rw@1.3.3: + etag@1.8.1: resolution: { - integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==, + integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==, } + engines: { node: '>= 0.6' } - rxjs@7.8.2: + event-target-shim@5.0.1: resolution: { - integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==, + integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==, } + engines: { node: '>=6' } - sade@1.8.1: + eventemitter3@5.0.4: resolution: { - integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==, + integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==, } - engines: { node: '>=6' } - safe-buffer@5.2.1: + execa@5.1.1: resolution: { - integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==, + integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==, } + engines: { node: '>=10' } - safer-buffer@2.1.2: + expect-type@1.4.0: resolution: { - integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==, + integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==, } + engines: { node: '>=12.0.0' } - sass@1.102.0: + expo-asset@57.0.8: resolution: { - integrity: sha512-NSOyTnaQF7rTAEOtI2fwb386vL+akyiQLBZu8Na7hXCb+umJy0GAqlcMIaqACZ6Z1VgTBS4K9PG6B3IdjHGJsw==, + integrity: sha512-sGocG+Wd2WcZ1KjKyB2LfUZXzrBM0VHEATGcpJKF9T3HM56M/sMbH73vv+n85u5Zr0FkJjEbV1DWhGPimCR1QQ==, } - engines: { node: '>=20.19.0' } - hasBin: true + peerDependencies: + expo: '*' + react: '*' + react-native: '*' - sax@1.6.1: + expo-constants@57.0.8: resolution: { - integrity: sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==, + integrity: sha512-ts+B7E5076BtkblrKGy7+Sm/R2obHfTwqhmYQVYbWRtilv3+C/xNwHZhyNEnAvzM/JjKqx7UdaITUBYaeFreZw==, } - engines: { node: '>=11.0.0' } + peerDependencies: + expo: '*' + react-native: '*' - saxes@6.0.0: + expo-file-system@57.0.1: resolution: { - integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==, + integrity: sha512-w7/ERvQFrGP2apTO9lDtZ+O6JQIhfakL7+Xqzh+rfMO9B4LB4qwrz+YvLgir8KFRVX64JHBnRuYBVLY1oQZcqw==, } - engines: { node: '>=v12.22.7' } + peerDependencies: + expo: '*' + react-native: '*' - scheduler@0.27.0: + expo-font@57.0.1: resolution: { - integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==, + integrity: sha512-QyS9L1Kh9sKJg4gfU6rdbpxpmH+DyzBX8z6jVvXMUDoqLr1GqmkO/Wu379KCXjL///kWbhpNlbi7AgBuj4VdIQ==, } + peerDependencies: + expo: '*' + react: '*' + react-native: '*' - scule@1.3.0: + expo-keep-awake@57.0.1: resolution: { - integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==, + integrity: sha512-28lkFImeXTS+bhAjuCFV7w7tW5bXg27BJVrxv+nC/nyYa86qEa0oFeHwqol6ha5k4pdVDQgBF09GM4A1k76Ssg==, } + peerDependencies: + expo: '*' + react: '*' - semver@6.3.1: + expo-modules-autolinking@57.0.9: resolution: { - integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==, + integrity: sha512-lj2nsAKMMRLXSFnGgaaQrWJ2fdSpLPc/bca6Rkiw4g8zYPn7qX4MRUJgavvzm/hBrzvMnlhXVgJtidOGuwBh+w==, } hasBin: true - semver@7.7.4: + expo-modules-core@57.0.8: resolution: { - integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==, + integrity: sha512-ZUU943Oso3B8jFggC+2+LOk8oa+im66IQlleYay6WP5iexbdF2fqpgC4BcYsN4xhCkDKh7KDINSt1FlcxyRRjQ==, } - engines: { node: '>=10' } - hasBin: true + peerDependencies: + react: '*' + react-native: '*' + react-native-worklets: ^0.7.4 || ^0.8.0 || ^0.9.0 || ^0.10.0 + peerDependenciesMeta: + react-native-worklets: + optional: true - semver@7.8.5: + expo-modules-jsi@57.0.4: resolution: { - integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==, + integrity: sha512-vt7FyqUqqFXiRVnBqYD7y+GSPTgeua5Ocoy0+SYt+RSHkZEA2Fyop7If3g1TYDzQObYybPRo7TG2Rle1XLaWFw==, } - engines: { node: '>=10' } - hasBin: true + peerDependencies: + react-native: '*' - seroval-plugins@1.5.6: + expo-server@57.0.1: resolution: { - integrity: sha512-HXuLAX2pu/UByPpaeo/TaMfvMIi+1QqIoPJYCcAtU8QkVNwgR6MPlGuCQTErV1JwraaMbYaWVIBX7mppzGLATQ==, + integrity: sha512-sBfVDH6dmKVHZxqUxbfkzS00PZELMZt1IpnHKxcOTMZtR/t7CtRAFrbXcisG+EyzeqHSVDacZT+1tbYfZt5D8w==, } - engines: { node: '>=10' } - peerDependencies: - seroval: ^1.0 + engines: { node: '>=20.16.0' } - seroval@1.5.6: + expo@57.0.9: resolution: { - integrity: sha512-rVQVWjjSvlINzaQPZH5JFqsqEsIWdTxY3iJZCnTL/5gQbXIRooVZKI60tVCkOVfzcRPejboxO2t0P89dg5mQaA==, + integrity: sha512-NDEvnU+vjRdMbtOyDC25OSok9/E97al97pyx+bMphQgNRGAED0D7oF8ha7oGYsLE+7jFzpPADVM9S60dGbpHIA==, } - engines: { node: '>=10' } + hasBin: true + peerDependencies: + '@expo/dom-webview': '*' + '@expo/metro-runtime': '*' + react: '*' + react-dom: '*' + react-native: '*' + react-native-web: '*' + react-native-webview: '*' + peerDependenciesMeta: + '@expo/dom-webview': + optional: true + '@expo/metro-runtime': + optional: true + react-dom: + optional: true + react-native-web: + optional: true + react-native-webview: + optional: true - sharp@0.34.5: + exponential-backoff@3.1.3: resolution: { - integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==, + integrity: sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==, } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } - shebang-command@2.0.0: + extendable-error@0.1.7: resolution: { - integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, + integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==, } - engines: { node: '>=8' } - shebang-regex@3.0.0: + fast-deep-equal@3.1.3: resolution: { - integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, + integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, } - engines: { node: '>=8' } - siginfo@2.0.0: + fast-glob@3.3.3: resolution: { - integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==, + integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==, } + engines: { node: '>=8.6.0' } - signal-exit@3.0.7: + fast-uri@3.1.4: resolution: { - integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==, + integrity: sha512-8JnbkQ4juDyvYs4mgFGQqg4yCYtFDtUtmp2QIQq11ZZe5CFQ5wcqm1rqDgAh/QdMySuBnPzMUiJUNZG5N/AiQw==, } - signal-exit@4.1.0: + fast-xml-parser@4.5.7: resolution: { - integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==, + integrity: sha512-a6Qh1RMCNbSrU1+sAyAAZH3rTe+OaWJbNZIq0S+ifZciUUOQtlVxBJwoTUE2bYhysmG/RYyI5WJFIKdBahJdrQ==, } - engines: { node: '>=14' } + hasBin: true - slash@3.0.0: + fastq@1.20.1: resolution: { - integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==, + integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==, } - engines: { node: '>=8' } - smol-toml@1.6.1: + fb-dotslash@0.5.8: resolution: { - integrity: sha512-dWUG8F5sIIARXih1DTaQAX4SsiTXhInKf1buxdY9DIg4ZYPZK5nGM1VRIYmEbDbsHt7USo99xSLFu5Q1IqTmsg==, + integrity: sha512-XHYLKk9J4BupDxi9bSEhkfss0m+Vr9ChTrjhf9l2iw3jB5C7BnY4GVPoMcqbrTutsKJso6yj2nAB6BI/F2oZaA==, } - engines: { node: '>= 18' } + engines: { node: '>=20' } + hasBin: true - solid-js@1.9.14: + fb-watchman@2.0.2: resolution: { - integrity: sha512-sAEXC0Kk0S1EDg+8ysEWJDbYhA3RRoEjwuySUGlKIemeo0I5YZfOyumNjNs9Sv3y2nmhD+0rW66ag2HsMuQiGQ==, + integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==, } - solid-refresh@0.6.3: + fdir@6.5.0: resolution: { - integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==, + integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==, } + engines: { node: '>=12.0.0' } peerDependencies: - solid-js: ^1.3 + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true - source-map-js@1.2.1: + fetch-nodeshim@0.4.10: resolution: { - integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==, + integrity: sha512-m6I8ALe4L4XpdETy7MJZWs6L1IVMbjs99bwbpIKphxX+0CTns4IKDWJY0LWfr4YsFjfg+z1TjzTMU8lKl8rG0w==, } - engines: { node: '>=0.10.0' } - source-map@0.6.1: + figures@3.2.0: resolution: { - integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, + integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==, } - engines: { node: '>=0.10.0' } + engines: { node: '>=8' } - spawndamnit@3.0.1: + fill-range@7.1.1: resolution: { - integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==, + integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==, } + engines: { node: '>=8' } - sprintf-js@1.0.3: + finalhandler@1.1.2: resolution: { - integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==, + integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==, } + engines: { node: '>= 0.8' } - stackback@0.0.2: + find-cache-directory@6.0.0: resolution: { - integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==, + integrity: sha512-CvFd5ivA6HcSHbD+59P7CyzINHXzwhuQK8RY7CxJZtgDSAtRlHiCaQpZQ2lMR/WRyUIEmzUvL6G2AGurMfegZA==, } + engines: { node: '>=20' } - std-env@4.2.0: + find-up-simple@1.0.1: resolution: { - integrity: sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==, + integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==, } + engines: { node: '>=18' } - stdin-discarder@0.3.2: + find-up@4.1.0: resolution: { - integrity: sha512-eCPu1qRxPVkl5605OTWF8Wz40b4Mf45NY5LQmVPQ599knfs5QhASUm9GbJ5BDMDOXgrnh0wyEdvzmL//YMlw0A==, + integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==, } - engines: { node: '>=18' } + engines: { node: '>=8' } - stream-parser@0.3.1: + find-up@5.0.0: resolution: { - integrity: sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ==, + integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==, } + engines: { node: '>=10' } - string-width@4.2.3: + flat@5.0.2: resolution: { - integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==, + integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==, } - engines: { node: '>=8' } + hasBin: true - string-width@7.2.0: + flow-enums-runtime@0.0.6: resolution: { - integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==, + integrity: sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==, } - engines: { node: '>=18' } - string-width@8.2.2: + follow-redirects@1.16.0: resolution: { - integrity: sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==, + integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==, } - engines: { node: '>=20' } + engines: { node: '>=4.0' } + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true - string_decoder@1.3.0: + fontfaceobserver@2.3.0: resolution: { - integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==, + integrity: sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg==, } - strip-ansi@6.0.1: + form-data@4.0.5: resolution: { - integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==, + integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==, } - engines: { node: '>=8' } + engines: { node: '>= 6' } - strip-ansi@7.2.0: + form-data@4.0.6: resolution: { - integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==, + integrity: sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==, } - engines: { node: '>=12' } + engines: { node: '>= 6' } - strip-bom@3.0.0: + fresh@0.5.2: resolution: { - integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==, + integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==, } - engines: { node: '>=4' } + engines: { node: '>= 0.6' } - supports-color@10.2.2: + fs-constants@1.0.0: resolution: { - integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==, + integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==, } - engines: { node: '>=18' } - supports-color@7.2.0: + fs-extra@7.0.1: resolution: { - integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, + integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==, } - engines: { node: '>=8' } + engines: { node: '>=6 <7 || >=8' } - svelte-check@4.7.4: + fs-extra@8.1.0: resolution: { - integrity: sha512-IW9ot9YqAoyv8FvyN+eb4ZTe8zgcKZrJLNYU6dzSKkGwEBsSPc4K7lmQ8bKn8W2YMXM6WDfZSSVOaGtekyUfOQ==, + integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==, } - engines: { node: '>= 18.0.0' } - hasBin: true - peerDependencies: - svelte: ^4.0.0 || ^5.0.0-next.0 - typescript: ^5.0.0 || ^6.0.0 + engines: { node: '>=6 <7 || >=8' } - svelte2tsx@0.7.59: + fsevents@2.3.2: resolution: { - integrity: sha512-Itj7Wz9WIiGFl/uJa58+rf43ajezaljKK/KTOHq5abUjto56xe+o5SOzLwSoeJ5hma9NZEstpZiazFW2q1nZPQ==, + integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==, } - peerDependencies: - svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0 - typescript: ^4.9.4 || ^5.0.0 || ^6.0.0 + engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } + os: [darwin] - svelte@5.56.8: + fsevents@2.3.3: resolution: { - integrity: sha512-PY8LOw7xP6c8IOiVqdo0sbbZVYhXRSfklOQLAUyGBKqjTX0wx/z4l/9J+PmBpmlLnxzEb1NqltxQ5/wZme/Cmg==, + integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, } - engines: { node: '>=18' } + engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } + os: [darwin] - symbol-tree@3.2.4: + function-bind@1.1.2: resolution: { - integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==, + integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==, } - tar-stream@2.2.0: + gensync@1.0.0-beta.2: resolution: { - integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==, + integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==, } - engines: { node: '>=6' } + engines: { node: '>=6.9.0' } - term-size@2.2.1: + get-caller-file@2.0.5: resolution: { - integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==, + integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==, } - engines: { node: '>=8' } + engines: { node: 6.* || 8.* || >= 10.* } - tiny-invariant@1.3.3: + get-east-asian-width@1.6.0: resolution: { - integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==, + integrity: sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==, } + engines: { node: '>=18' } - tinybench@2.9.0: + get-intrinsic@1.3.0: resolution: { - integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==, + integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==, } + engines: { node: '>= 0.4' } - tinyexec@1.2.4: + get-proto@1.0.1: resolution: { - integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==, + integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==, } - engines: { node: '>=18' } + engines: { node: '>= 0.4' } - tinyglobby@0.2.17: + get-stream@6.0.1: resolution: { - integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==, + integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==, } - engines: { node: '>=12.0.0' } + engines: { node: '>=10' } - tinyrainbow@3.1.0: + getenv@2.0.0: resolution: { - integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==, + integrity: sha512-VilgtJj/ALgGY77fiLam5iD336eSWi96Q15JSAG1zi8NRBysm3LXKdGnHb4m5cuyxvOLQQKWpBZAT6ni4FI2iQ==, } - engines: { node: '>=14.0.0' } + engines: { node: '>=6' } - tldts-core@7.4.9: + glob-parent@5.1.2: resolution: { - integrity: sha512-DxKfPBI52p2msTEu7MPhdpdDTBhhVQg1a/8PjQckeyAvO13eMYElX545grIp6nnTGIMZlRvFZPvFhvI/WIz2Vg==, + integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, } + engines: { node: '>= 6' } - tldts@7.4.9: + glob@13.0.6: resolution: { - integrity: sha512-3kZ8wQQ/k5DrChD4X4FVvr2D7E5uoRgAqkPyLpSCGUvqOvqu+JEdr3mwMUaVWb+vMHZaKhF5fp2PBigKsui7hA==, + integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==, } - hasBin: true + engines: { node: 18 || 20 || >=22 } - tmp@0.2.6: + globby@11.1.0: resolution: { - integrity: sha512-5sJPdPjfI5Kx+qbrDesxkglRBxW//g7hCsqspEjwkewGvBMGIKMOTKzLt1hFVJzyadba3lDUN20O9qhvbQUSTA==, + integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==, } - engines: { node: '>=14.14' } + engines: { node: '>=10' } - to-regex-range@5.0.1: + gopd@1.2.0: resolution: { - integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, + integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==, } - engines: { node: '>=8.0' } + engines: { node: '>= 0.4' } - topojson-client@3.1.0: + graceful-fs@4.2.11: resolution: { - integrity: sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==, + integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, } - hasBin: true - tough-cookie@6.0.2: + has-flag@3.0.0: resolution: { - integrity: sha512-exgYmnmL/sJpR3upZfXG5PoatXQii55xAiXGXzY+sROLZ/Y+SLcp9PgJNI9Vz37HpQ74WvDcLT8eqm+kV3FzrA==, + integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==, } - engines: { node: '>=16' } + engines: { node: '>=4' } - tr46@0.0.3: + has-flag@4.0.0: resolution: { - integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==, + integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, } + engines: { node: '>=8' } - tr46@6.0.0: + has-symbols@1.1.0: resolution: { - integrity: sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==, + integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==, } - engines: { node: '>=20' } + engines: { node: '>= 0.4' } - tree-kill@1.2.2: + has-tostringtag@1.0.2: resolution: { - integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==, + integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==, } - hasBin: true + engines: { node: '>= 0.4' } - tsconfig-paths@4.2.0: + hasown@2.0.2: resolution: { - integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==, + integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==, } - engines: { node: '>=6' } + engines: { node: '>= 0.4' } - tslib@2.3.0: + hasown@2.0.4: resolution: { - integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==, + integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==, } + engines: { node: '>= 0.4' } - tslib@2.8.1: + hermes-compiler@250829098.0.16: resolution: { - integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==, + integrity: sha512-xsgzk+mUyvt9t1nUbF8USBlYxajTUtPJhVZ86q85s/SEoMKCF+52YZcudb0ENSnV3T3lV9mgB3s6R7+pH90zgw==, } - typescript@6.0.3: + hermes-estree@0.35.0: resolution: { - integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==, + integrity: sha512-xVx5Opwy8Oo1I5yGpVRhCvWL/iV3M+ylksSKVNlxxD90cpDpR/AR1jLYqK8HWihm065a6UI3HeyAmYzwS8NOOg==, } - engines: { node: '>=14.17' } - hasBin: true - undici-types@7.24.6: + hermes-estree@0.36.0: resolution: { - integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==, + integrity: sha512-A1+8zn5oss2CFP7pKsOaxorQG6FNIz1WU1VDqruLPPZl3LVgeE2C5xfFg8Ow6/Ow4mSslLLtYP1J3n38eKyW9w==, } - undici@7.28.0: + hermes-parser@0.35.0: resolution: { - integrity: sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA==, + integrity: sha512-9JLjeHxBx8T4CAsydZR49PNZUaix+WpQJwu9p2010lu+7Kwl6D/7wYFFJxoz+aXkaaClp9Zfg6W6/zVlSJORaA==, } - engines: { node: '>=20.18.1' } - undici@7.29.0: + hermes-parser@0.36.0: resolution: { - integrity: sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw==, + integrity: sha512-GdpwMmH5x6IpC1cijvcvYnlPB60Mh6kTSF/NFdYV/j56gYdi+0RIakYs+eqOV+bbO0SW7mgVVGSsTJxyPQfo3w==, } - engines: { node: '>=20.18.1' } - unenv@2.0.0-rc.24: + hosted-git-info@7.0.2: resolution: { - integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==, + integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==, } + engines: { node: ^16.14.0 || >=18.0.0 } - universalify@0.1.2: + html-encoding-sniffer@6.0.0: resolution: { - integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==, + integrity: sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==, } - engines: { node: '>= 4.0.0' } + engines: { node: ^20.19.0 || ^22.12.0 || >=24.0.0 } - update-browserslist-db@1.2.3: + html-entities@2.3.3: resolution: { - integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==, + integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==, } - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - us-atlas@3.0.1: + http-errors@2.0.1: resolution: { - integrity: sha512-wEIZCq0ImPvGblTd8gZMqNNCPkQshugMUG/8nkSWXb02+XqNFREg9atHOKP9w6prLZTpqcLhSvdBW81MkV3/0Q==, + integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==, } + engines: { node: '>= 0.8' } - use-sync-external-store@1.6.0: + https-proxy-agent@7.0.6: resolution: { - integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==, + integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==, } - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + engines: { node: '>= 14' } - util-deprecate@1.0.2: + human-id@4.2.0: resolution: { - integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==, + integrity: sha512-K3GbkIWqyvvlpfhBPlbEvD97TtqBpAYA4kt+cn2lD2x2HuohzZCibcA2nOlnJT6exqvJLggoB5nv2dNf192nEA==, } + hasBin: true - victory-vendor@37.3.6: + human-signals@2.1.0: resolution: { - integrity: sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ==, + integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==, } + engines: { node: '>=10.17.0' } - vite-plugin-solid@2.11.14: + iconv-lite@0.4.24: resolution: { - integrity: sha512-7ZVBt8rpoyqmlwin2kRIUveaHoF6/kulY7gsnD+qFh4nS29V4OPAnw+ojoAspXIjObiL9o1xh9a/nTuYHm02Rw==, + integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==, } - peerDependencies: - '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.0.0 || ^7.0.0 - solid-js: ^1.7.2 - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 - peerDependenciesMeta: - '@testing-library/jest-dom': - optional: true + engines: { node: '>=0.10.0' } - vite@8.1.5: + iconv-lite@0.6.3: resolution: { - integrity: sha512-7ULLwsCdYx/nRyrpiEwvqb5TFHrMVZyBt+rg/OAXT7rgj/z+DtTDyKFeLAdDkubDVDKD8jOsndmy7m55XcfUsw==, + integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==, } - engines: { node: ^20.19.0 || >=22.12.0 } - hasBin: true - peerDependencies: - '@types/node': ^20.19.0 || >=22.12.0 - '@vitejs/devtools': ^0.3.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 + engines: { node: '>=0.10.0' } - vitefu@1.1.3: + iconv-lite@0.7.3: resolution: { - integrity: sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==, + integrity: sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==, } - peerDependencies: - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - vite: - optional: true + engines: { node: '>=0.10.0' } - vitest@4.1.10: + ieee754@1.2.1: resolution: { - integrity: sha512-R9jUTe5S4Qb0HCd4TNqpC7oGcrMssMRGXLW80ubjWsW9VH5GF8y1Y0SFLY9AbqSk6nt0PnOx4H4WNJYZ13GUPw==, + integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==, } - engines: { node: ^20.0.0 || ^22.0.0 || >=24.0.0 } - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@opentelemetry/api': ^1.9.0 - '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.1.10 - '@vitest/browser-preview': 4.1.10 - '@vitest/browser-webdriverio': 4.1.10 - '@vitest/coverage-istanbul': 4.1.10 - '@vitest/coverage-v8': 4.1.10 - '@vitest/ui': 4.1.10 - happy-dom: '*' - jsdom: '*' - vite: ^6.0.0 || ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@opentelemetry/api': - optional: true - '@types/node': - optional: true - '@vitest/browser-playwright': - optional: true - '@vitest/browser-preview': - optional: true - '@vitest/browser-webdriverio': - optional: true - '@vitest/coverage-istanbul': - optional: true - '@vitest/coverage-v8': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - vue@3.5.40: + ignore@5.3.2: resolution: { - integrity: sha512-+8PJ4SJXdn/cHGImF4CKdxlWHIN5Dkt7DoufRREM6h6uVCx2m7QxgcEQmmzyOK8A9mcafg7sFbJFYsdFVubTig==, + integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==, } - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + engines: { node: '>= 4' } - w3c-xmlserializer@5.0.0: + ignore@7.0.5: resolution: { - integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==, + integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==, } - engines: { node: '>=18' } + engines: { node: '>= 4' } - wcwidth@1.0.1: + image-size@1.2.1: resolution: { - integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==, + integrity: sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==, } + engines: { node: '>=16.x' } + hasBin: true - webidl-conversions@3.0.1: + immer@11.1.15: resolution: { - integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==, + integrity: sha512-VrNANlmnWQnh5COXIIOQXM9oOJw7naGKlBT74ZOOR6lpVXc3gFEu9FJLDFcpCJ2j+NWr8TIwtWD//T6ZX6TKiQ==, } - webidl-conversions@8.0.1: + immutable@5.1.9: resolution: { - integrity: sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==, + integrity: sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==, } - engines: { node: '>=20' } - whatwg-mimetype@5.0.0: + import-fresh@3.3.1: resolution: { - integrity: sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==, + integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==, } - engines: { node: '>=20' } + engines: { node: '>=6' } - whatwg-url@16.0.1: + inherits@2.0.4: resolution: { - integrity: sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw==, + integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, } - engines: { node: ^20.19.0 || ^22.12.0 || >=24.0.0 } - whatwg-url@5.0.0: + injection-js@2.6.1: resolution: { - integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==, + integrity: sha512-dbR5bdhi7TWDoCye9cByZqeg/gAfamm8Vu3G1KZOTYkOif8WkuM8CD0oeDPtZYMzT5YH76JAFB7bkmyY9OJi2A==, } - which@2.0.2: + internmap@1.0.1: resolution: { - integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, + integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==, } - engines: { node: '>= 8' } - hasBin: true - why-is-node-running@2.3.0: + internmap@2.0.3: resolution: { - integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==, + integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==, } - engines: { node: '>=8' } - hasBin: true + engines: { node: '>=12' } - workerd@1.20260617.1: + interval-tree-1d@1.0.4: resolution: { - integrity: sha512-Re5pl6pdowt3ZmWUzGlOuB7jbRIIPetgKalmo4cYmucQnVhpo7/3e4MfpekbhLi2EhZZz5EY9NWRu8zFzuEZew==, + integrity: sha512-wY8QJH+6wNI0uh4pDQzMvl+478Qh7Rl4qLmqiluxALlNvl+I+o5x38Pw3/z7mDPTPS1dQalZJXsmbvxx5gclhQ==, + } + + invariant@2.2.4: + resolution: + { + integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==, + } + + is-arrayish@0.2.1: + resolution: + { + integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==, + } + + is-core-module@2.16.2: + resolution: + { + integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==, + } + engines: { node: '>= 0.4' } + + is-docker@2.2.1: + resolution: + { + integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==, + } + engines: { node: '>=8' } + hasBin: true + + is-extglob@2.1.1: + resolution: + { + integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, + } + engines: { node: '>=0.10.0' } + + is-fullwidth-code-point@2.0.0: + resolution: + { + integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==, + } + engines: { node: '>=4' } + + is-fullwidth-code-point@3.0.0: + resolution: + { + integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==, + } + engines: { node: '>=8' } + + is-glob@4.0.3: + resolution: + { + integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, + } + engines: { node: '>=0.10.0' } + + is-interactive@1.0.0: + resolution: + { + integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==, + } + engines: { node: '>=8' } + + is-interactive@2.0.0: + resolution: + { + integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==, + } + engines: { node: '>=12' } + + is-number@7.0.0: + resolution: + { + integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, + } + engines: { node: '>=0.12.0' } + + is-potential-custom-element-name@1.0.1: + resolution: + { + integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==, + } + + is-reference@3.0.3: + resolution: + { + integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==, + } + + is-stream@2.0.1: + resolution: + { + integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==, + } + engines: { node: '>=8' } + + is-subdir@1.2.0: + resolution: + { + integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==, + } + engines: { node: '>=4' } + + is-unicode-supported@0.1.0: + resolution: + { + integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==, + } + engines: { node: '>=10' } + + is-unicode-supported@2.1.0: + resolution: + { + integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==, + } + engines: { node: '>=18' } + + is-what@4.1.16: + resolution: + { + integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==, + } + engines: { node: '>=12.13' } + + is-windows@1.0.2: + resolution: + { + integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==, + } + engines: { node: '>=0.10.0' } + + is-wsl@1.1.0: + resolution: + { + integrity: sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==, + } + engines: { node: '>=4' } + + is-wsl@2.2.0: + resolution: + { + integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==, + } + engines: { node: '>=8' } + + isexe@2.0.0: + resolution: + { + integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, + } + + isoformat@0.2.1: + resolution: + { + integrity: sha512-tFLRAygk9NqrRPhJSnNGh7g7oaVWDwR0wKh/GM2LgmPa50Eg4UfyaCO4I8k6EqJHl1/uh2RAD6g06n5ygEnrjQ==, + } + + jest-get-type@29.6.3: + resolution: + { + integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-util@29.7.0: + resolution: + { + integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-validate@29.7.0: + resolution: + { + integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-worker@29.7.0: + resolution: + { + integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jimp-compact@0.16.1: + resolution: + { + integrity: sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==, + } + + joi@17.13.4: + resolution: + { + integrity: sha512-1RuuER6kmt8K8I3nIWvPZKi5RQCb568ZPyY4Pwjlua+yo+63ZTmIwxLZH0heBmiKN4uxjvCiarDrjaeH84xicQ==, + } + + js-tokens@4.0.0: + resolution: + { + integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, + } + + js-yaml@3.15.0: + resolution: + { + integrity: sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==, + } + hasBin: true + + js-yaml@4.3.0: + resolution: + { + integrity: sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==, + } + hasBin: true + + jsc-safe-url@0.2.4: + resolution: + { + integrity: sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==, + } + + jsdom@29.1.1: + resolution: + { + integrity: sha512-ECi4Fi2f7BdJtUKTflYRTiaMxIB0O6zfR1fX0GXpUrf6flp8QIYn1UT20YQqdSOfk2dfkCwS8LAFoJDEppNK5Q==, + } + engines: { node: ^20.19.0 || ^22.13.0 || >=24.0.0 } + peerDependencies: + canvas: ^3.0.0 + peerDependenciesMeta: + canvas: + optional: true + + jsesc@3.1.0: + resolution: + { + integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==, + } + engines: { node: '>=6' } + hasBin: true + + json-parse-even-better-errors@2.3.1: + resolution: + { + integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==, + } + + json-schema-traverse@1.0.0: + resolution: + { + integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==, + } + + json5@2.2.3: + resolution: + { + integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==, + } + engines: { node: '>=6' } + hasBin: true + + jsonc-parser@3.2.0: + resolution: + { + integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==, + } + + jsonc-parser@3.3.1: + resolution: + { + integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==, + } + + jsonfile@4.0.0: + resolution: + { + integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==, + } + + kleur@3.0.3: + resolution: + { + integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==, + } + engines: { node: '>=6' } + + kleur@4.1.5: + resolution: + { + integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==, + } + engines: { node: '>=6' } + + lan-network@0.2.1: + resolution: + { + integrity: sha512-ONPnazC96VKDntab9j9JKwIWhZ4ZUceB4A9Epu4Ssg0hYFmtHZSeQ+n15nIwTFmcBUKtExOer8WTJ4GF9MO64A==, + } + hasBin: true + + launch-editor@2.14.1: + resolution: + { + integrity: sha512-QWBrQsMpH7gPr965dsKD/3cKWiNoTjpATQf++Xq63N6sKRGMwlVXz41O1IZTMfZQgBctD/K5Zt06+/I6pP6+HA==, + } + + less@4.8.1: + resolution: + { + integrity: sha512-jQ3lRIo1aUtiWVYXZ7mk4+V4BjCGswF3IxTLJ+4RUta8ZiHh8lhkig2G8dya2eCcyR1dYUvzuV46EkJN8PSwww==, + } + engines: { node: '>=18' } + hasBin: true + + leven@3.1.0: + resolution: + { + integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==, + } + engines: { node: '>=6' } + + lighthouse-logger@1.4.2: + resolution: + { + integrity: sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==, + } + + lightningcss-android-arm64@1.33.0: + resolution: + { + integrity: sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==, + } + engines: { node: '>= 12.0.0' } + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.33.0: + resolution: + { + integrity: sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==, + } + engines: { node: '>= 12.0.0' } + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.33.0: + resolution: + { + integrity: sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==, + } + engines: { node: '>= 12.0.0' } + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.33.0: + resolution: + { + integrity: sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==, + } + engines: { node: '>= 12.0.0' } + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.33.0: + resolution: + { + integrity: sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==, + } + engines: { node: '>= 12.0.0' } + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.33.0: + resolution: + { + integrity: sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==, + } + engines: { node: '>= 12.0.0' } + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.33.0: + resolution: + { + integrity: sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==, + } + engines: { node: '>= 12.0.0' } + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.33.0: + resolution: + { + integrity: sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==, + } + engines: { node: '>= 12.0.0' } + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-musl@1.33.0: + resolution: + { + integrity: sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==, + } + engines: { node: '>= 12.0.0' } + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-arm64-msvc@1.33.0: + resolution: + { + integrity: sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==, + } + engines: { node: '>= 12.0.0' } + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.33.0: + resolution: + { + integrity: sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==, + } + engines: { node: '>= 12.0.0' } + cpu: [x64] + os: [win32] + + lightningcss@1.33.0: + resolution: + { + integrity: sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==, + } + engines: { node: '>= 12.0.0' } + + lines-and-columns@1.2.4: + resolution: + { + integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==, + } + + lines-and-columns@2.0.3: + resolution: + { + integrity: sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + + lit-element@4.2.2: + resolution: + { + integrity: sha512-aFKhNToWxoyhkNDmWZwEva2SlQia+jfG0fjIWV//YeTaWrVnOxD89dPKfigCUspXFmjzOEUQpOkejH5Ly6sG0w==, + } + + lit-html@3.3.3: + resolution: + { + integrity: sha512-el8M6jK2o3RXBnrSHX3ZKrsN8zEV63pSExTO1wYJz7QndGYZ8353e2a5PPX+qHe2aGayfnchQmkAojaWAREOIA==, + } + + lit@3.3.3: + resolution: + { + integrity: sha512-fycuvZg/hkpozL00lm1pEJH5nN/lr9ZXd6mJI2HSN4+Bzc+LDNdEApJ6HFbPkdFNHLvOplIIuJvxkS4XUxqirw==, + } + + locate-character@3.0.0: + resolution: + { + integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==, + } + + locate-path@5.0.0: + resolution: + { + integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==, + } + engines: { node: '>=8' } + + locate-path@6.0.0: + resolution: + { + integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==, + } + engines: { node: '>=10' } + + lodash.debounce@4.0.8: + resolution: + { + integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==, + } + + lodash.merge@4.6.2: + resolution: + { + integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==, + } + + lodash.startcase@4.4.0: + resolution: + { + integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==, + } + + lodash.throttle@4.1.1: + resolution: + { + integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==, + } + + log-symbols@2.2.0: + resolution: + { + integrity: sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==, + } + engines: { node: '>=4' } + + log-symbols@4.1.0: + resolution: + { + integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==, + } + engines: { node: '>=10' } + + log-symbols@7.0.1: + resolution: + { + integrity: sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==, + } + engines: { node: '>=18' } + + logkitty@0.7.1: + resolution: + { + integrity: sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==, + } + hasBin: true + + loose-envify@1.4.0: + resolution: + { + integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==, + } + hasBin: true + + lru-cache@10.4.3: + resolution: + { + integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==, + } + + lru-cache@11.5.2: + resolution: + { + integrity: sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==, + } + engines: { node: 20 || >=22 } + + lru-cache@5.1.1: + resolution: + { + integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==, + } + + magic-string@0.30.21: + resolution: + { + integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==, + } + + make-dir@5.1.0: + resolution: + { + integrity: sha512-IfpFq6UM39dUNiphpA6uDezNx/AvWyhwfICWPR3t1VspkgkMZrL+Rk1RbN1bx+aeNYwOrqGJgEgV3yotk+ZUVw==, + } + engines: { node: '>=18' } + + makeerror@1.0.12: + resolution: + { + integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==, + } + + marky@1.3.0: + resolution: + { + integrity: sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==, + } + + math-intrinsics@1.1.0: + resolution: + { + integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==, + } + engines: { node: '>= 0.4' } + + mdn-data@2.0.14: + resolution: + { + integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==, + } + + mdn-data@2.27.1: + resolution: + { + integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==, + } + + media-typer@0.3.0: + resolution: + { + integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==, + } + engines: { node: '>= 0.6' } + + memoize-one@5.2.1: + resolution: + { + integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==, + } + + merge-anything@5.1.7: + resolution: + { + integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==, + } + engines: { node: '>=12.13' } + + merge-stream@2.0.0: + resolution: + { + integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==, + } + + merge2@1.4.1: + resolution: + { + integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, + } + engines: { node: '>= 8' } + + metro-babel-transformer@0.84.4: + resolution: + { + integrity: sha512-rvCfz8snl9h20VcvpOHxZuHP1SlAkv4HXbzw7nyyVwu6Eqo5PRerbakQ9XmUCOsRy70spJ37O+G1TK8oMzo48g==, + } + engines: { node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0 } + + metro-cache-key@0.84.4: + resolution: + { + integrity: sha512-wVO79aGrkYImpnaVS4+d5RrRBRPX31QtvKB3wKGBuiNSznduZTQHzsrJZRroFJSwnygrzdsGUtDQPuqqFjFdvw==, + } + engines: { node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0 } + + metro-cache@0.84.4: + resolution: + { + integrity: sha512-gpcFQdSLUwUCk71saKoE64jLFbx2nwTfVCcPSULMNT8QYq0p1eZZE29Jvd0HtT/UlhC3ZOutLxJME5xqD2JUZg==, + } + engines: { node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0 } + + metro-config@0.84.4: + resolution: + { + integrity: sha512-PMotGDjXcXLWo2TMRH+VR99phFNgYTwqh4OoieIKK3yTJa1Jmkl+fZJxDO0jfBvNF+WESHciHvpNuBtXaF3B0Q==, + } + engines: { node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0 } + + metro-core@0.84.4: + resolution: + { + integrity: sha512-HONpWC5LGXZn3ffkd4Hu6AIrfE7j4Z0g0wMo/goV24WOB3lhuFZ40KgvaDiSw8iyQHloMYay5N/wPX+z8oN/PQ==, + } + engines: { node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0 } + + metro-file-map@0.84.4: + resolution: + { + integrity: sha512-KSVDi/u60hKPx++NLu3MTIvyjzNoJnFAF8PQFxaj1jiSka/wjw+Ua6sNuJ0TDHQv+7AAoFQxeMgaRAe8Yic5wQ==, + } + engines: { node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0 } + + metro-minify-terser@0.84.4: + resolution: + { + integrity: sha512-5qpbaVOMC7CPitIpuewzVeGw7E+C3ykbv2mqTjQLl85Z3annSVGlSCTcsZjqXZzjupfK4Ztj3dDc4kc44NZwtQ==, + } + engines: { node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0 } + + metro-resolver@0.84.4: + resolution: + { + integrity: sha512-1qLgbxQ5ZGhhutuPot1Yp348ofDsATL2WkrHF65TobqTT9K3P9qJXw38bomk7ncp5B7OYMfWwtyBZo1lCV792A==, + } + engines: { node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0 } + + metro-runtime@0.84.4: + resolution: + { + integrity: sha512-Jibypds4g7AhzdRKY+kDoj51s5EXMwgyp5ddtlreDAsWefMdOx+agWqgm0H2XSZ/ueanHHVM89fnf5OJnlxa8Q==, + } + engines: { node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0 } + + metro-source-map@0.84.4: + resolution: + { + integrity: sha512-jbWkPxIesVuo1IWkvezmMJld6iu8nD62GsrZiV6jP37AOdbo4OBq1FJ+qkOg8sV05wAHB//jAbziuW0SlJfW4g==, + } + engines: { node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0 } + + metro-symbolicate@0.84.4: + resolution: + { + integrity: sha512-OnfpacxUqGPZQ27t8qK9mFa7uqHIlVWeqRqkCbvMvreEBiamEeOn8krKtcwgP5M4cYDPwuSmCTopHMVthqG4zA==, + } + engines: { node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0 } + hasBin: true + + metro-transform-plugins@0.84.4: + resolution: + { + integrity: sha512-kehr6HbAecqD0/a3xLXobELdPaAmRAl8bel0qagPF4vhZtux93nS8S4eq2kgKt6J2GnQpVjSoW1PXdst04mwow==, + } + engines: { node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0 } + + metro-transform-worker@0.84.4: + resolution: + { + integrity: sha512-W1IYMvvXTu4MxYr7d9h7CeG2vpIr3bmLLIavkPY4O1ilzDrvS8z/NEe6y+pC44Ff7raMXQgYSfdqDUwN/i39gg==, + } + engines: { node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0 } + + metro@0.84.4: + resolution: + { + integrity: sha512-8ETTubqfD6ornDy2zYDvRcKnVDOXdFJsjetYDBsY4oAsb6NJkiwFR+FaMESyGppFmQUyBQA4H4sFGxzcQSGtFA==, + } + engines: { node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0 } + hasBin: true + + micromatch@4.0.8: + resolution: + { + integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==, + } + engines: { node: '>=8.6' } + + mime-db@1.52.0: + resolution: + { + integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==, + } + engines: { node: '>= 0.6' } + + mime-db@1.54.0: + resolution: + { + integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==, + } + engines: { node: '>= 0.6' } + + mime-types@2.1.35: + resolution: + { + integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==, + } + engines: { node: '>= 0.6' } + + mime-types@3.0.2: + resolution: + { + integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==, + } + engines: { node: '>=18' } + + mime@1.6.0: + resolution: + { + integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==, + } + engines: { node: '>=4' } + hasBin: true + + mime@2.6.0: + resolution: + { + integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==, + } + engines: { node: '>=4.0.0' } + hasBin: true + + mimic-fn@1.2.0: + resolution: + { + integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==, + } + engines: { node: '>=4' } + + mimic-fn@2.1.0: + resolution: + { + integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==, + } + engines: { node: '>=6' } + + mimic-function@5.0.1: + resolution: + { + integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==, + } + engines: { node: '>=18' } + + miniflare@4.20260617.1: + resolution: + { + integrity: sha512-Go3/gzStm99QHptsSgU+q1S+xDfLoRgwjJNY80kaTVi0ENhTyqKq+sc4xZiWBSbM7uUcJwmzm8+QFKtcYLJ9nw==, + } + engines: { node: '>=22.0.0' } + hasBin: true + + minimatch@10.2.5: + resolution: + { + integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==, + } + engines: { node: 18 || 20 || >=22 } + + minimist@1.2.8: + resolution: + { + integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==, + } + + minipass@7.1.3: + resolution: + { + integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==, + } + engines: { node: '>=16 || 14 >=14.17' } + + mkdirp@1.0.4: + resolution: + { + integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==, + } + engines: { node: '>=10' } + hasBin: true + + mri@1.2.0: + resolution: + { + integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==, + } + engines: { node: '>=4' } + + ms@2.0.0: + resolution: + { + integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==, + } + + ms@2.1.3: + resolution: + { + integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==, + } + + multitars@1.0.0: + resolution: + { + integrity: sha512-H/J4fMLedtudftaYMOg7ajzLYgT3/rwbWVJbqr/iUgB8DQztn38ys5HOqI1CzSxx8QhXXwOOnnBvd4v3jG5+Mg==, + } + + nanoid@3.3.16: + resolution: + { + integrity: sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==, + } + engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } + hasBin: true + + needle@2.9.1: + resolution: + { + integrity: sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==, + } + engines: { node: '>= 4.4.x' } + hasBin: true + + needle@3.5.0: + resolution: + { + integrity: sha512-jaQyPKKk2YokHrEg+vFDYxXIHTCBgiZwSHOoVx/8V3GIBS8/VN6NdVRmg8q1ERtPkMvmOvebsgga4sAj5hls/w==, + } + engines: { node: '>= 4.4.x' } + hasBin: true + + negotiator@0.6.3: + resolution: + { + integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==, + } + engines: { node: '>= 0.6' } + + negotiator@0.6.4: + resolution: + { + integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==, + } + engines: { node: '>= 0.6' } + + negotiator@1.0.0: + resolution: + { + integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==, + } + engines: { node: '>= 0.6' } + + ng-packagr@22.0.2: + resolution: + { + integrity: sha512-8qQ+RWm0W3gK8Sch1kmo3EzIUiCTXIOP2gS7b+vtqCMBf4KBjBP0wFBikW5qRau9lGOzRTML0GPFGoARPR4+fw==, + } + engines: { node: ^22.22.3 || ^24.15.0 || >=26.0.0 } + hasBin: true + peerDependencies: + '@angular/compiler-cli': ^22.0.0 || ^22.1.0-next.0 + tailwindcss: ^2.0.0 || ^3.0.0 || ^4.0.0 + tslib: ^2.3.0 + typescript: '>=6.0 <6.1' + peerDependenciesMeta: + tailwindcss: + optional: true + + nocache@3.0.4: + resolution: + { + integrity: sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw==, + } + engines: { node: '>=12.0.0' } + + node-addon-api@7.1.1: + resolution: + { + integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==, + } + + node-fetch@2.7.0: + resolution: + { + integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==, + } + engines: { node: 4.x || >=6.0.0 } + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-forge@1.4.0: + resolution: + { + integrity: sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ==, + } + engines: { node: '>= 6.13.0' } + + node-int64@0.4.0: + resolution: + { + integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==, + } + + node-releases@2.0.51: + resolution: + { + integrity: sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==, + } + engines: { node: '>=18' } + + node-stream-zip@1.16.0: + resolution: + { + integrity: sha512-ObaRrRoR8T68wF6suxHd7R4XQNamij6ZQHrwG7Dx1D2zeHcDNLsIOBcWrIwtDm7AsCXBguaPHgXhcjxDa2szrg==, + } + engines: { node: '>=0.12.0' } + + npm-package-arg@11.0.3: + resolution: + { + integrity: sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==, + } + engines: { node: ^16.14.0 || >=18.0.0 } + + npm-run-path@4.0.1: + resolution: + { + integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==, + } + engines: { node: '>=8' } + + nth-check@2.1.1: + resolution: + { + integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==, + } + + nullthrows@1.1.1: + resolution: + { + integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==, + } + + nx@22.7.5: + resolution: + { + integrity: sha512-zoxsJabb33jl1QYnalDn0bicryrEBgSzdKp90d7VGGv/jDgzKrcLg/hw2ZxeYiOjWPIT/o8QNT9G9vTs4dv3AQ==, + } + hasBin: true + peerDependencies: + '@swc-node/register': ^1.11.1 + '@swc/core': ^1.15.8 + peerDependenciesMeta: + '@swc-node/register': + optional: true + '@swc/core': + optional: true + + ob1@0.84.4: + resolution: + { + integrity: sha512-eJXMpz4aQHXF/YBB9ddqZDIS+ooO91hObo9FoW/xBkr54/zCwYYCDqT/O54vNo8kOkWs5Ou/y28NgdrV0edQNA==, + } + engines: { node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0 } + + object-inspect@1.13.4: + resolution: + { + integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==, + } + engines: { node: '>= 0.4' } + + obug@2.1.4: + resolution: + { + integrity: sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==, + } + engines: { node: '>=12.20.0' } + + octane@0.1.13: + resolution: + { + integrity: sha512-bjmuF0hjLnBPOqOLTWyOtq6U5tklKw/JKF/qbAlZ2gfAZsoL9NiK7tQSWibuIUSerXELvLfmPmpbyt0fItemsg==, + } + engines: { node: '>=22' } + peerDependencies: + react: ^19.0.0 + react-dom: ^19.0.0 + vite: ^8.0.16 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + vite: + optional: true + + on-finished@2.3.0: + resolution: + { + integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==, + } + engines: { node: '>= 0.8' } + + on-finished@2.4.1: + resolution: + { + integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==, + } + engines: { node: '>= 0.8' } + + on-headers@1.1.0: + resolution: + { + integrity: sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==, + } + engines: { node: '>= 0.8' } + + once@1.4.0: + resolution: + { + integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==, + } + + onetime@2.0.1: + resolution: + { + integrity: sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==, + } + engines: { node: '>=4' } + + onetime@5.1.2: + resolution: + { + integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==, + } + engines: { node: '>=6' } + + onetime@7.0.0: + resolution: + { + integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==, + } + engines: { node: '>=18' } + + open@6.4.0: + resolution: + { + integrity: sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==, + } + engines: { node: '>=8' } + + open@7.4.2: + resolution: + { + integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==, + } + engines: { node: '>=8' } + + open@8.4.2: + resolution: + { + integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==, + } + engines: { node: '>=12' } + + ora@3.4.0: + resolution: + { + integrity: sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==, + } + engines: { node: '>=6' } + + ora@5.3.0: + resolution: + { + integrity: sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==, + } + engines: { node: '>=10' } + + ora@5.4.1: + resolution: + { + integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==, + } + engines: { node: '>=10' } + + ora@9.4.1: + resolution: + { + integrity: sha512-6VlU9MLXbjVQD04AZCMX28hVtA5bUoadvUqO76MUCVA0ilwJbMiHsITRPfyVm6p/BC0Av/BXMujx39WCe1LEqw==, + } + engines: { node: '>=20' } + + outdent@0.5.0: + resolution: + { + integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==, + } + + p-filter@2.1.0: + resolution: + { + integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==, + } + engines: { node: '>=8' } + + p-limit@2.3.0: + resolution: + { + integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==, + } + engines: { node: '>=6' } + + p-limit@3.1.0: + resolution: + { + integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==, + } + engines: { node: '>=10' } + + p-locate@4.1.0: + resolution: + { + integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==, + } + engines: { node: '>=8' } + + p-locate@5.0.0: + resolution: + { + integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==, + } + engines: { node: '>=10' } + + p-map@2.1.0: + resolution: + { + integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==, + } + engines: { node: '>=6' } + + p-try@2.2.0: + resolution: + { + integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==, + } + engines: { node: '>=6' } + + package-manager-detector@0.2.11: + resolution: + { + integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==, + } + + parent-module@1.0.1: + resolution: + { + integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, + } + engines: { node: '>=6' } + + parse-json@5.2.0: + resolution: + { + integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==, + } + engines: { node: '>=8' } + + parse-node-version@1.0.1: + resolution: + { + integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==, + } + engines: { node: '>= 0.10' } + + parse-png@2.1.0: + resolution: + { + integrity: sha512-Nt/a5SfCLiTnQAjx3fHlqp8hRgTL3z7kTQZzvIMS9uCAepnCyjpdEc6M/sz69WqMBdaDBw9sF1F1UaHROYzGkQ==, + } + engines: { node: '>=10' } + + parse5@7.3.0: + resolution: + { + integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==, + } + + parse5@8.0.1: + resolution: + { + integrity: sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==, + } + + parseurl@1.3.3: + resolution: + { + integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==, + } + engines: { node: '>= 0.8' } + + path-exists@4.0.0: + resolution: + { + integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==, + } + engines: { node: '>=8' } + + path-key@3.1.1: + resolution: + { + integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, + } + engines: { node: '>=8' } + + path-parse@1.0.7: + resolution: + { + integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, + } + + path-scurry@2.0.2: + resolution: + { + integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==, + } + engines: { node: 18 || 20 || >=22 } + + path-to-regexp@6.3.0: + resolution: + { + integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==, + } + + path-type@4.0.0: + resolution: + { + integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==, + } + engines: { node: '>=8' } + + pathe@2.0.3: + resolution: + { + integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==, + } + + picocolors@1.1.1: + resolution: + { + integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==, + } + + picomatch@2.3.2: + resolution: + { + integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==, + } + engines: { node: '>=8.6' } + + picomatch@4.0.5: + resolution: + { + integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==, + } + engines: { node: '>=12' } + + pify@4.0.1: + resolution: + { + integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==, + } + engines: { node: '>=6' } + + piscina@5.3.0: + resolution: + { + integrity: sha512-9D3tPBayfoal6l9l4Y8NrMn1jkV718qJoYrla6P51+hh9h0Q+9/1c8KgEnoBQqhguyfgjay4biADI8HJG3pkoA==, + } + engines: { node: '>=20.x' } + + pkg-dir@8.0.0: + resolution: + { + integrity: sha512-4peoBq4Wks0riS0z8741NVv+/8IiTvqnZAr8QGgtdifrtpdXbNw/FxRS1l6NFqm4EMzuS0EDqNNx4XGaz8cuyQ==, + } + engines: { node: '>=18' } + + playwright-core@1.62.0: + resolution: + { + integrity: sha512-nsNRyq0r2zsG8AcRHWknc9QRA5XCueC7gWMrs+Gx2tlZn9hcl8zudfh00lhJPY1DE7NmZ6bDsT9g2yey8mXljA==, + } + engines: { node: '>=20' } + hasBin: true + + playwright@1.62.0: + resolution: + { + integrity: sha512-Z14dG305dgaLu6foB1TXQagFiW8JfSUIUaUuPaKQ6NtBPKF1P/qXcqfh6c6K/icPqdy37JmjbiBXf6JNg6Sylw==, + } + engines: { node: '>=20' } + hasBin: true + + plist@3.1.1: + resolution: + { + integrity: sha512-ZIfcLJC+7E7FBFnDxm9MPmt7D+DidyQ26lewieO75AdhA2ayMtsJSES0iWzqJQbcVRSrTufQoy0DR94xHue0oA==, + } + engines: { node: '>=10.4.0' } + + pngjs@3.4.0: + resolution: + { + integrity: sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==, + } + engines: { node: '>=4.0.0' } + + postcss@8.5.23: + resolution: + { + integrity: sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg==, + } + engines: { node: ^10 || ^12 || >=14 } + + preact-render-to-string@6.7.0: + resolution: + { + integrity: sha512-Z4WR8fmLMRpdYqJ9i7vrlXSsSrxVJydwrkEXHapexfARbWfGb7vGcnvNQnIzN0cXciMVOlz/XLoiMCi9gUsy9Q==, + } + peerDependencies: + preact: '>=10 || >= 11.0.0-0' + + preact@10.29.7: + resolution: + { + integrity: sha512-DCHYrK/B10yUD3ZjLfhZ3WIE/9Vf9VFUODcRE2dRomTYDpJk6z6L9wecSfhfE6M9ZTHUdyQkoC46arIDhEV84Q==, + } + peerDependencies: + preact-render-to-string: '>=5' + peerDependenciesMeta: + preact-render-to-string: + optional: true + + prettier@2.8.8: + resolution: + { + integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==, + } + engines: { node: '>=10.13.0' } + hasBin: true + + prettier@3.9.6: + resolution: + { + integrity: sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g==, + } + engines: { node: '>=14' } + hasBin: true + + pretty-format@29.7.0: + resolution: + { + integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + probe-image-size@7.3.0: + resolution: + { + integrity: sha512-7CaDeBwiAbh6ohXsvLbAZhO7wzsZAmaevfxe39qvCwRh8LyaZfDlBGGLU1CCTgrTLtCOdwBBhjOrIHaIIimHfQ==, + } + + proc-log@4.2.0: + resolution: + { + integrity: sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==, + } + engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 } + + progress@2.0.3: + resolution: + { + integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==, + } + engines: { node: '>=0.4.0' } + + promise@8.3.0: + resolution: + { + integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==, + } + + prompts@2.4.2: + resolution: + { + integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==, + } + engines: { node: '>= 6' } + + proxy-from-env@2.1.0: + resolution: + { + integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==, + } + engines: { node: '>=10' } + + prr@1.0.1: + resolution: + { + integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==, + } + + punycode@2.3.1: + resolution: + { + integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==, + } + engines: { node: '>=6' } + + qs@6.15.3: + resolution: + { + integrity: sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==, + } + engines: { node: '>=0.6' } + + quansync@0.2.11: + resolution: + { + integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==, + } + + queue-microtask@1.2.3: + resolution: + { + integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, + } + + queue@6.0.2: + resolution: + { + integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==, + } + + range-parser@1.2.1: + resolution: + { + integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==, + } + engines: { node: '>= 0.6' } + + raw-body@2.5.3: + resolution: + { + integrity: sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==, + } + engines: { node: '>= 0.8' } + + react-devtools-core@6.1.5: + resolution: + { + integrity: sha512-ePrwPfxAnB+7hgnEr8vpKxL9cmnp7F322t8oqcPshbIQQhDKgFDW4tjhF2wjVbdXF9O/nyuy3sQWd9JGpiLPvA==, + } + + react-dom@19.2.3: + resolution: + { + integrity: sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==, + } + peerDependencies: + react: ^19.2.3 + + react-is@18.3.1: + resolution: + { + integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==, + } + + react-is@19.2.8: + resolution: + { + integrity: sha512-s5un28nYxKJw5gvUHyW5PCC28CvBqLu9r3cWgzHT4Vo/5fqqkFcdRYsGcKf50WMPpjjFZS5d76fn3YCo2njKwQ==, + } + + react-native-svg@15.15.4: + resolution: + { + integrity: sha512-boT/vIRgj6zZKBpfTPJJiYWMbZE9duBMOwPK6kCSTgxsS947IFMOq9OgIFkpWZTB7t229H24pDRkh3W9ZK/J1A==, + } + peerDependencies: + react: '*' + react-native: '*' + + react-native-svg@15.15.5: + resolution: + { + integrity: sha512-L4go5jA+GWutdJ/JucuN20cjAbMg1HmMtAP+wZ+3JLCf6Jd0bhXQHxciRP/AQm/FlrIEZwkMcHNZP+FXAiic0w==, + } + peerDependencies: + react: '*' + react-native: '*' + + react-native@0.86.2: + resolution: + { + integrity: sha512-zbJXGZpwfZGA79Z9ob6Atvfx4nAQL8yJBa35s58E4Oo+khPykfQP2sTeumkKbjwajFYfVayg8pj7Il9nIfTk7A==, + } + engines: { node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0 } + hasBin: true + peerDependencies: + '@react-native/jest-preset': 0.86.2 + '@types/react': ^19.1.1 + react: ^19.2.3 + peerDependenciesMeta: + '@react-native/jest-preset': + optional: true + '@types/react': + optional: true + + react-redux@9.3.0: + resolution: + { + integrity: sha512-KQopgqFo/p/fgmAs5qz6p5RWaNAzq40WAu7fJIXnQpYxFPbJYtsJPWvGeF2rOBaY/kEuV77AVsX8TsQzKm+A/g==, + } + peerDependencies: + '@types/react': ^18.2.25 || ^19 + react: ^18.0 || ^19 + redux: ^5.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + redux: + optional: true + + react-refresh@0.14.2: + resolution: + { + integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==, + } + engines: { node: '>=0.10.0' } + + react@19.2.3: + resolution: + { + integrity: sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==, + } + engines: { node: '>=0.10.0' } + + read-yaml-file@1.1.0: + resolution: + { + integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==, + } + engines: { node: '>=6' } + + readable-stream@3.6.2: + resolution: + { + integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==, + } + engines: { node: '>= 6' } + + readdirp@4.1.2: + resolution: + { + integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==, + } + engines: { node: '>= 14.18.0' } + + readdirp@5.0.0: + resolution: + { + integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==, + } + engines: { node: '>= 20.19.0' } + + recharts@3.10.1: + resolution: + { + integrity: sha512-QXFrvt6IVcw7eeZCoyXTwkIJAX3Dv1nyVhMicXJ47GsGDDpcN8z6o644DibE9XjpBTThtsomLKnTV6lc+cVFUA==, + } + engines: { node: '>=18' } + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-is: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + redux-thunk@3.1.0: + resolution: + { + integrity: sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==, + } + peerDependencies: + redux: ^5.0.0 + + redux@5.0.1: + resolution: + { + integrity: sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==, + } + + reflect-metadata@0.2.2: + resolution: + { + integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==, + } + + regenerate-unicode-properties@10.2.2: + resolution: + { + integrity: sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==, + } + engines: { node: '>=4' } + + regenerate@1.4.2: + resolution: + { + integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==, + } + + regenerator-runtime@0.13.11: + resolution: + { + integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==, + } + + regexpu-core@6.4.0: + resolution: + { + integrity: sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==, + } + engines: { node: '>=4' } + + regjsgen@0.8.0: + resolution: + { + integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==, + } + + regjsparser@0.13.2: + resolution: + { + integrity: sha512-NgRBy2Nx/bE+9F27nVHnqcN5HjyLmecqsqx2PJHu3/IEtADD4WuxuXIVExD5PoSDFVrl78dOonfcOe5O+5nbzQ==, + } + hasBin: true + + require-directory@2.1.1: + resolution: + { + integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==, + } + engines: { node: '>=0.10.0' } + + require-from-string@2.0.2: + resolution: + { + integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==, + } + engines: { node: '>=0.10.0' } + + require-main-filename@2.0.0: + resolution: + { + integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==, + } + + reselect@5.2.0: + resolution: + { + integrity: sha512-AgZ3UOZm3YndfrJ4OYjgrT7bmCm/1iqkjvEfH/oYjzh6PD2qw4QuT3jjnXIrpdt4MTpMXclMT3lXbmRY+XRakw==, + } + + resolve-from@4.0.0: + resolution: + { + integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, + } + engines: { node: '>=4' } + + resolve-from@5.0.0: + resolution: + { + integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==, + } + engines: { node: '>=8' } + + resolve-workspace-root@2.0.1: + resolution: + { + integrity: sha512-nR23LHAvaI6aHtMg6RWoaHpdR4D881Nydkzi2CixINyg9T00KgaJdJI6Vwty+Ps8WLxZHuxsS0BseWjxSA4C+w==, + } + + resolve.exports@2.0.3: + resolution: + { + integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==, + } + engines: { node: '>=10' } + + resolve@1.22.12: + resolution: + { + integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==, + } + engines: { node: '>= 0.4' } + hasBin: true + + restore-cursor@2.0.0: + resolution: + { + integrity: sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==, + } + engines: { node: '>=4' } + + restore-cursor@3.1.0: + resolution: + { + integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==, + } + engines: { node: '>=8' } + + restore-cursor@5.1.0: + resolution: + { + integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==, + } + engines: { node: '>=18' } + + reusify@1.1.0: + resolution: + { + integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==, + } + engines: { iojs: '>=1.0.0', node: '>=0.10.0' } + + robust-predicates@3.0.3: + resolution: + { + integrity: sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==, + } + + rolldown@1.1.5: + resolution: + { + integrity: sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA==, + } + engines: { node: ^20.19.0 || >=22.12.0 } + hasBin: true + + rollup-plugin-dts@6.4.1: + resolution: + { + integrity: sha512-l//F3Zf7ID5GoOfLfD8kroBjQKEKpy1qfhtAdnpibFZMffPaylrg1CoDC2vGkPeTeyxUe4bVFCln2EFuL7IGGg==, + } + engines: { node: '>=20' } + peerDependencies: + rollup: ^3.29.4 || ^4 + typescript: ^4.5 || ^5.0 || ^6.0 + + rollup@4.62.3: + resolution: + { + integrity: sha512-Gu0c0iH9FzgX1L1t7ByIbbS3Vmdz+6KHm/EsqmmC71gUQ82yvZRkTK6XzrFObSka91WUVdynqp6nsfilzr5k6Q==, + } + engines: { node: '>=18.0.0', npm: '>=8.0.0' } + hasBin: true + + run-parallel@1.2.0: + resolution: + { + integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, + } + + rw@1.3.3: + resolution: + { + integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==, + } + + rxjs@7.8.2: + resolution: + { + integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==, + } + + sade@1.8.1: + resolution: + { + integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==, + } + engines: { node: '>=6' } + + safe-buffer@5.2.1: + resolution: + { + integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==, + } + + safer-buffer@2.1.2: + resolution: + { + integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==, + } + + sass@1.102.0: + resolution: + { + integrity: sha512-NSOyTnaQF7rTAEOtI2fwb386vL+akyiQLBZu8Na7hXCb+umJy0GAqlcMIaqACZ6Z1VgTBS4K9PG6B3IdjHGJsw==, + } + engines: { node: '>=20.19.0' } + hasBin: true + + sax@1.6.1: + resolution: + { + integrity: sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==, + } + engines: { node: '>=11.0.0' } + + saxes@6.0.0: + resolution: + { + integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==, + } + engines: { node: '>=v12.22.7' } + + scheduler@0.27.0: + resolution: + { + integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==, + } + + scule@1.3.0: + resolution: + { + integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==, + } + + semver@6.3.1: + resolution: + { + integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==, + } + hasBin: true + + semver@7.7.4: + resolution: + { + integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==, + } + engines: { node: '>=10' } + hasBin: true + + semver@7.8.5: + resolution: + { + integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==, + } + engines: { node: '>=10' } + hasBin: true + + send@0.19.2: + resolution: + { + integrity: sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==, + } + engines: { node: '>= 0.8.0' } + + serialize-error@2.1.0: + resolution: + { + integrity: sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==, + } + engines: { node: '>=0.10.0' } + + seroval-plugins@1.5.6: + resolution: + { + integrity: sha512-HXuLAX2pu/UByPpaeo/TaMfvMIi+1QqIoPJYCcAtU8QkVNwgR6MPlGuCQTErV1JwraaMbYaWVIBX7mppzGLATQ==, + } + engines: { node: '>=10' } + peerDependencies: + seroval: ^1.0 + + seroval@1.5.6: + resolution: + { + integrity: sha512-rVQVWjjSvlINzaQPZH5JFqsqEsIWdTxY3iJZCnTL/5gQbXIRooVZKI60tVCkOVfzcRPejboxO2t0P89dg5mQaA==, + } + engines: { node: '>=10' } + + serve-static@1.16.3: + resolution: + { + integrity: sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==, + } + engines: { node: '>= 0.8.0' } + + set-blocking@2.0.0: + resolution: + { + integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==, + } + + setprototypeof@1.2.0: + resolution: + { + integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==, + } + + sharp@0.34.5: + resolution: + { + integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + + shebang-command@2.0.0: + resolution: + { + integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, + } + engines: { node: '>=8' } + + shebang-regex@3.0.0: + resolution: + { + integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, + } + engines: { node: '>=8' } + + shell-quote@1.10.0: + resolution: + { + integrity: sha512-w1aiOKwKuRgtwAReIIj89puqg+I7GvX4IbLrvmhXbzQsj1+Zwi4VO3+fa6ZF91TWSjIxoEkKnMeHcLEODK5ZXA==, + } + engines: { node: '>= 0.4' } + + side-channel-list@1.0.1: + resolution: + { + integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==, + } + engines: { node: '>= 0.4' } + + side-channel-map@1.0.1: + resolution: + { + integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==, + } + engines: { node: '>= 0.4' } + + side-channel-weakmap@1.0.2: + resolution: + { + integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==, + } + engines: { node: '>= 0.4' } + + side-channel@1.1.1: + resolution: + { + integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==, + } + engines: { node: '>= 0.4' } + + siginfo@2.0.0: + resolution: + { + integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==, + } + + signal-exit@3.0.7: + resolution: + { + integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==, + } + + signal-exit@4.1.0: + resolution: + { + integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==, + } + engines: { node: '>=14' } + + simple-plist@1.3.1: + resolution: + { + integrity: sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw==, + } + + sisteransi@1.0.5: + resolution: + { + integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==, + } + + slash@3.0.0: + resolution: + { + integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==, + } + engines: { node: '>=8' } + + slice-ansi@2.1.0: + resolution: + { + integrity: sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==, + } + engines: { node: '>=6' } + + slugify@1.6.9: + resolution: + { + integrity: sha512-vZ7rfeehZui7wQs438JXBckYLkIIdfHOXsaVEUMyS5fHo1483l1bMdo0EDSWYclY0yZKFOipDy4KHuKs6ssvdg==, + } + engines: { node: '>=8.0.0' } + + smol-toml@1.6.1: + resolution: + { + integrity: sha512-dWUG8F5sIIARXih1DTaQAX4SsiTXhInKf1buxdY9DIg4ZYPZK5nGM1VRIYmEbDbsHt7USo99xSLFu5Q1IqTmsg==, + } + engines: { node: '>= 18' } + + solid-js@1.9.14: + resolution: + { + integrity: sha512-sAEXC0Kk0S1EDg+8ysEWJDbYhA3RRoEjwuySUGlKIemeo0I5YZfOyumNjNs9Sv3y2nmhD+0rW66ag2HsMuQiGQ==, + } + + solid-refresh@0.6.3: + resolution: + { + integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==, + } + peerDependencies: + solid-js: ^1.3 + + source-map-js@1.2.1: + resolution: + { + integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==, + } + engines: { node: '>=0.10.0' } + + source-map-support@0.5.21: + resolution: + { + integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==, + } + + source-map@0.5.7: + resolution: + { + integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==, + } + engines: { node: '>=0.10.0' } + + source-map@0.6.1: + resolution: + { + integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, + } + engines: { node: '>=0.10.0' } + + spawndamnit@3.0.1: + resolution: + { + integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==, + } + + sprintf-js@1.0.3: + resolution: + { + integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==, + } + + stackback@0.0.2: + resolution: + { + integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==, + } + + stackframe@1.3.4: + resolution: + { + integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==, + } + + stacktrace-parser@0.1.11: + resolution: + { + integrity: sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==, + } + engines: { node: '>=6' } + + statuses@1.5.0: + resolution: + { + integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==, + } + engines: { node: '>= 0.6' } + + statuses@2.0.2: + resolution: + { + integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==, + } + engines: { node: '>= 0.8' } + + std-env@4.2.0: + resolution: + { + integrity: sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==, + } + + stdin-discarder@0.3.2: + resolution: + { + integrity: sha512-eCPu1qRxPVkl5605OTWF8Wz40b4Mf45NY5LQmVPQ599knfs5QhASUm9GbJ5BDMDOXgrnh0wyEdvzmL//YMlw0A==, + } + engines: { node: '>=18' } + + stream-buffers@2.2.0: + resolution: + { + integrity: sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==, + } + engines: { node: '>= 0.10.0' } + + stream-parser@0.3.1: + resolution: + { + integrity: sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ==, + } + + string-width@4.2.3: + resolution: + { + integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==, + } + engines: { node: '>=8' } + + string-width@7.2.0: + resolution: + { + integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==, + } + engines: { node: '>=18' } + + string-width@8.2.2: + resolution: + { + integrity: sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==, + } + engines: { node: '>=20' } + + string_decoder@1.3.0: + resolution: + { + integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==, + } + + strip-ansi@5.2.0: + resolution: + { + integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==, + } + engines: { node: '>=6' } + + strip-ansi@6.0.1: + resolution: + { + integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==, + } + engines: { node: '>=8' } + + strip-ansi@7.2.0: + resolution: + { + integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==, + } + engines: { node: '>=12' } + + strip-bom@3.0.0: + resolution: + { + integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==, + } + engines: { node: '>=4' } + + strip-final-newline@2.0.0: + resolution: + { + integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==, + } + engines: { node: '>=6' } + + strnum@1.1.2: + resolution: + { + integrity: sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==, + } + + structured-headers@0.4.1: + resolution: + { + integrity: sha512-0MP/Cxx5SzeeZ10p/bZI0S6MpgD+yxAhi1BOQ34jgnMXsCq3j1t6tQnZu+KdlL7dvJTLT3g9xN8tl10TqgFMcg==, + } + + supports-color@10.2.2: + resolution: + { + integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==, + } + engines: { node: '>=18' } + + supports-color@5.5.0: + resolution: + { + integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==, + } + engines: { node: '>=4' } + + supports-color@7.2.0: + resolution: + { + integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, + } + engines: { node: '>=8' } + + supports-color@8.1.1: + resolution: + { + integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==, + } + engines: { node: '>=10' } + + supports-hyperlinks@2.3.0: + resolution: + { + integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==, + } + engines: { node: '>=8' } + + supports-preserve-symlinks-flag@1.0.0: + resolution: + { + integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, + } + engines: { node: '>= 0.4' } + + svelte-check@4.7.4: + resolution: + { + integrity: sha512-IW9ot9YqAoyv8FvyN+eb4ZTe8zgcKZrJLNYU6dzSKkGwEBsSPc4K7lmQ8bKn8W2YMXM6WDfZSSVOaGtekyUfOQ==, + } + engines: { node: '>= 18.0.0' } + hasBin: true + peerDependencies: + svelte: ^4.0.0 || ^5.0.0-next.0 + typescript: ^5.0.0 || ^6.0.0 + + svelte2tsx@0.7.59: + resolution: + { + integrity: sha512-Itj7Wz9WIiGFl/uJa58+rf43ajezaljKK/KTOHq5abUjto56xe+o5SOzLwSoeJ5hma9NZEstpZiazFW2q1nZPQ==, + } + peerDependencies: + svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0 + typescript: ^4.9.4 || ^5.0.0 || ^6.0.0 + + svelte@5.56.8: + resolution: + { + integrity: sha512-PY8LOw7xP6c8IOiVqdo0sbbZVYhXRSfklOQLAUyGBKqjTX0wx/z4l/9J+PmBpmlLnxzEb1NqltxQ5/wZme/Cmg==, + } + engines: { node: '>=18' } + + symbol-tree@3.2.4: + resolution: + { + integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==, + } + + tar-stream@2.2.0: + resolution: + { + integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==, + } + engines: { node: '>=6' } + + term-size@2.2.1: + resolution: + { + integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==, + } + engines: { node: '>=8' } + + terminal-link@2.1.1: + resolution: + { + integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==, + } + engines: { node: '>=8' } + + terser@5.49.0: + resolution: + { + integrity: sha512-SNiDnXyHSrxVcIOtVbULzcTmniUiwcV7Nwdyj1twVubeTmbjoa8p69KKDpfkdoOavuM4/GRm1+ykI8qqnavHoA==, + } + engines: { node: '>=10' } + hasBin: true + + throat@5.0.0: + resolution: + { + integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==, + } + + tiny-invariant@1.3.3: + resolution: + { + integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==, + } + + tinybench@2.9.0: + resolution: + { + integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==, + } + + tinyexec@1.2.4: + resolution: + { + integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==, + } + engines: { node: '>=18' } + + tinyglobby@0.2.17: + resolution: + { + integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==, + } + engines: { node: '>=12.0.0' } + + tinyrainbow@3.1.0: + resolution: + { + integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==, + } + engines: { node: '>=14.0.0' } + + tldts-core@7.4.9: + resolution: + { + integrity: sha512-DxKfPBI52p2msTEu7MPhdpdDTBhhVQg1a/8PjQckeyAvO13eMYElX545grIp6nnTGIMZlRvFZPvFhvI/WIz2Vg==, + } + + tldts@7.4.9: + resolution: + { + integrity: sha512-3kZ8wQQ/k5DrChD4X4FVvr2D7E5uoRgAqkPyLpSCGUvqOvqu+JEdr3mwMUaVWb+vMHZaKhF5fp2PBigKsui7hA==, + } + hasBin: true + + tmp@0.2.6: + resolution: + { + integrity: sha512-5sJPdPjfI5Kx+qbrDesxkglRBxW//g7hCsqspEjwkewGvBMGIKMOTKzLt1hFVJzyadba3lDUN20O9qhvbQUSTA==, + } + engines: { node: '>=14.14' } + + tmpl@1.0.5: + resolution: + { + integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==, + } + + to-regex-range@5.0.1: + resolution: + { + integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, + } + engines: { node: '>=8.0' } + + toidentifier@1.0.1: + resolution: + { + integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==, + } + engines: { node: '>=0.6' } + + topojson-client@3.1.0: + resolution: + { + integrity: sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==, + } + hasBin: true + + toqr@0.1.1: + resolution: + { + integrity: sha512-FWAPzCIHZHnrE/5/w9MPk0kK25hSQSH2IKhYh9PyjS3SG/+IEMvlwIHbhz+oF7xl54I+ueZlVnMjyzdSwLmAwA==, + } + + tough-cookie@6.0.2: + resolution: + { + integrity: sha512-exgYmnmL/sJpR3upZfXG5PoatXQii55xAiXGXzY+sROLZ/Y+SLcp9PgJNI9Vz37HpQ74WvDcLT8eqm+kV3FzrA==, + } + engines: { node: '>=16' } + + tr46@0.0.3: + resolution: + { + integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==, + } + + tr46@6.0.0: + resolution: + { + integrity: sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==, + } + engines: { node: '>=20' } + + tree-kill@1.2.2: + resolution: + { + integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==, + } + hasBin: true + + tsconfig-paths@4.2.0: + resolution: + { + integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==, + } + engines: { node: '>=6' } + + tslib@2.3.0: + resolution: + { + integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==, + } + + tslib@2.8.1: + resolution: + { + integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==, + } + + type-fest@0.21.3: + resolution: + { + integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==, + } + engines: { node: '>=10' } + + type-fest@0.7.1: + resolution: + { + integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==, + } + engines: { node: '>=8' } + + type-is@1.6.18: + resolution: + { + integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==, + } + engines: { node: '>= 0.6' } + + typescript@6.0.3: + resolution: + { + integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==, + } + engines: { node: '>=14.17' } + hasBin: true + + undici-types@7.24.6: + resolution: + { + integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==, + } + + undici@7.28.0: + resolution: + { + integrity: sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA==, + } + engines: { node: '>=20.18.1' } + + undici@7.29.0: + resolution: + { + integrity: sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw==, + } + engines: { node: '>=20.18.1' } + + unenv@2.0.0-rc.24: + resolution: + { + integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==, + } + + unicode-canonical-property-names-ecmascript@2.0.1: + resolution: + { + integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==, + } + engines: { node: '>=4' } + + unicode-match-property-ecmascript@2.0.0: + resolution: + { + integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==, + } + engines: { node: '>=4' } + + unicode-match-property-value-ecmascript@2.2.1: + resolution: + { + integrity: sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==, + } + engines: { node: '>=4' } + + unicode-property-aliases-ecmascript@2.2.0: + resolution: + { + integrity: sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==, + } + engines: { node: '>=4' } + + universalify@0.1.2: + resolution: + { + integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==, + } + engines: { node: '>= 4.0.0' } + + unpipe@1.0.0: + resolution: + { + integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==, + } + engines: { node: '>= 0.8' } + + update-browserslist-db@1.2.3: + resolution: + { + integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==, + } + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + us-atlas@3.0.1: + resolution: + { + integrity: sha512-wEIZCq0ImPvGblTd8gZMqNNCPkQshugMUG/8nkSWXb02+XqNFREg9atHOKP9w6prLZTpqcLhSvdBW81MkV3/0Q==, + } + + use-sync-external-store@1.6.0: + resolution: + { + integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==, + } + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + util-deprecate@1.0.2: + resolution: + { + integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==, + } + + utils-merge@1.0.1: + resolution: + { + integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==, + } + engines: { node: '>= 0.4.0' } + + uuid@7.0.3: + resolution: + { + integrity: sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==, + } + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). + hasBin: true + + validate-npm-package-name@5.0.1: + resolution: + { + integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==, + } + engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 } + + vary@1.1.2: + resolution: + { + integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==, + } + engines: { node: '>= 0.8' } + + victory-vendor@37.3.6: + resolution: + { + integrity: sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ==, + } + + vite-plugin-solid@2.11.14: + resolution: + { + integrity: sha512-7ZVBt8rpoyqmlwin2kRIUveaHoF6/kulY7gsnD+qFh4nS29V4OPAnw+ojoAspXIjObiL9o1xh9a/nTuYHm02Rw==, + } + peerDependencies: + '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.0.0 || ^7.0.0 + solid-js: ^1.7.2 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 + peerDependenciesMeta: + '@testing-library/jest-dom': + optional: true + + vite@8.1.5: + resolution: + { + integrity: sha512-7ULLwsCdYx/nRyrpiEwvqb5TFHrMVZyBt+rg/OAXT7rgj/z+DtTDyKFeLAdDkubDVDKD8jOsndmy7m55XcfUsw==, + } + engines: { node: ^20.19.0 || >=22.12.0 } + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.3.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 + + vitefu@1.1.3: + resolution: + { + integrity: sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==, + } + peerDependencies: + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + vite: + optional: true + + vitest@4.1.10: + resolution: + { + integrity: sha512-R9jUTe5S4Qb0HCd4TNqpC7oGcrMssMRGXLW80ubjWsW9VH5GF8y1Y0SFLY9AbqSk6nt0PnOx4H4WNJYZ13GUPw==, + } + engines: { node: ^20.0.0 || ^22.0.0 || >=24.0.0 } + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@opentelemetry/api': ^1.9.0 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.1.10 + '@vitest/browser-preview': 4.1.10 + '@vitest/browser-webdriverio': 4.1.10 + '@vitest/coverage-istanbul': 4.1.10 + '@vitest/coverage-v8': 4.1.10 + '@vitest/ui': 4.1.10 + happy-dom: '*' + jsdom: '*' + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@opentelemetry/api': + optional: true + '@types/node': + optional: true + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': + optional: true + '@vitest/coverage-istanbul': + optional: true + '@vitest/coverage-v8': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + vlq@1.0.1: + resolution: + { + integrity: sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==, + } + + vue@3.5.40: + resolution: + { + integrity: sha512-+8PJ4SJXdn/cHGImF4CKdxlWHIN5Dkt7DoufRREM6h6uVCx2m7QxgcEQmmzyOK8A9mcafg7sFbJFYsdFVubTig==, + } + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + w3c-xmlserializer@5.0.0: + resolution: + { + integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==, + } + engines: { node: '>=18' } + + walker@1.0.8: + resolution: + { + integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==, + } + + warn-once@0.1.1: + resolution: + { + integrity: sha512-VkQZJbO8zVImzYFteBXvBOZEl1qL175WH8VmZcxF2fZAoudNhNDvHi+doCaAEdU2l2vtcIwa2zn0QK5+I1HQ3Q==, + } + + wcwidth@1.0.1: + resolution: + { + integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==, + } + + webidl-conversions@3.0.1: + resolution: + { + integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==, + } + + webidl-conversions@8.0.1: + resolution: + { + integrity: sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==, + } + engines: { node: '>=20' } + + whatwg-fetch@3.6.20: + resolution: + { + integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==, + } + + whatwg-mimetype@5.0.0: + resolution: + { + integrity: sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==, + } + engines: { node: '>=20' } + + whatwg-url-minimum@0.1.2: + resolution: + { + integrity: sha512-XPEm0XFQWNVG292lII1PrRRJl3sItrs7CettZ4ncYxuDVpLyy+NwlGyut2hXI0JswcJUxeCH+CyOJK0ZzAXD6A==, + } + + whatwg-url@16.0.1: + resolution: + { + integrity: sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw==, + } + engines: { node: ^20.19.0 || ^22.12.0 || >=24.0.0 } + + whatwg-url@5.0.0: + resolution: + { + integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==, + } + + which-module@2.0.1: + resolution: + { + integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==, + } + + which@2.0.2: + resolution: + { + integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, + } + engines: { node: '>= 8' } + hasBin: true + + why-is-node-running@2.3.0: + resolution: + { + integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==, + } + engines: { node: '>=8' } + hasBin: true + + workerd@1.20260617.1: + resolution: + { + integrity: sha512-Re5pl6pdowt3ZmWUzGlOuB7jbRIIPetgKalmo4cYmucQnVhpo7/3e4MfpekbhLi2EhZZz5EY9NWRu8zFzuEZew==, } engines: { node: '>=16' } hasBin: true @@ -6649,6 +9712,13 @@ packages: '@cloudflare/workers-types': optional: true + wrap-ansi@6.2.0: + resolution: + { + integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==, + } + engines: { node: '>=8' } + wrap-ansi@7.0.0: resolution: { @@ -6669,6 +9739,35 @@ packages: integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, } + ws@6.2.6: + resolution: + { + integrity: sha512-XTrf1gv7kXoVf1hbC3PAyAiPgR8Wz1blcrYIjEsUmr08BLksT41R8KbjmS9408C2ERx7v1JDLD/BkpLEttjfKA==, + } + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@7.5.13: + resolution: + { + integrity: sha512-rsKI6xDBFVf4r/x8XyChGK04QR/XHroxs/jUcoWvtEZM8TPU/X/uIY9B1CsSzYws9ZJb/6bbBu7dPhFW00CAoA==, + } + engines: { node: '>=8.3.0' } + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + ws@8.21.0: resolution: { @@ -6684,6 +9783,13 @@ packages: utf-8-validate: optional: true + xcode@3.0.1: + resolution: + { + integrity: sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==, + } + engines: { node: '>=10.0.0' } + xml-name-validator@5.0.0: resolution: { @@ -6691,12 +9797,39 @@ packages: } engines: { node: '>=18' } + xml2js@0.6.0: + resolution: + { + integrity: sha512-eLTh0kA8uHceqesPqSE+VvO1CDDJWMwlQfB6LuN6T8w6MaDJ8Txm8P7s5cHD0miF0V+GGTZrDQfxPZQVsur33w==, + } + engines: { node: '>=4.0.0' } + + xmlbuilder@11.0.1: + resolution: + { + integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==, + } + engines: { node: '>=4.0' } + + xmlbuilder@15.1.1: + resolution: + { + integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==, + } + engines: { node: '>=8.0' } + xmlchars@2.2.0: resolution: { integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==, } + y18n@4.0.3: + resolution: + { + integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==, + } + y18n@5.0.8: resolution: { @@ -6718,6 +9851,13 @@ packages: engines: { node: '>= 14.6' } hasBin: true + yargs-parser@18.1.3: + resolution: + { + integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==, + } + engines: { node: '>=6' } + yargs-parser@21.1.1: resolution: { @@ -6730,7 +9870,14 @@ packages: { integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==, } - engines: { node: ^20.19.0 || ^22.12.0 || >=23 } + engines: { node: ^20.19.0 || ^22.12.0 || >=23 } + + yargs@15.4.1: + resolution: + { + integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==, + } + engines: { node: '>=8' } yargs@17.7.2: resolution: @@ -6746,6 +9893,13 @@ packages: } engines: { node: ^20.19.0 || ^22.12.0 || >=23 } + yocto-queue@0.1.0: + resolution: + { + integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==, + } + engines: { node: '>=10' } + yoctocolors@2.2.0: resolution: { @@ -6771,6 +9925,12 @@ packages: integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==, } + zod@3.25.76: + resolution: + { + integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==, + } + zrender@6.1.0: resolution: { @@ -6848,95 +10008,455 @@ snapshots: '@asamuzakjp/generational-cache@1.0.1': {} - '@asamuzakjp/nwsapi@2.3.9': {} + '@asamuzakjp/nwsapi@2.3.9': {} + + '@babel/code-frame@7.29.7': + dependencies: + '@babel/helper-validator-identifier': 7.29.7 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.29.7': {} + + '@babel/core@7.29.7(supports-color@10.2.2)': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/helpers': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) + '@babel/types': 7.29.7 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3(supports-color@10.2.2) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.29.7': + dependencies: + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/helper-annotate-as-pure@7.29.7': + dependencies: + '@babel/types': 7.29.7 + + '@babel/helper-compilation-targets@7.29.7': + dependencies: + '@babel/compat-data': 7.29.7 + '@babel/helper-validator-option': 7.29.7 + browserslist: 4.28.7 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-member-expression-to-functions': 7.29.7(supports-color@10.2.2) + '@babel/helper-optimise-call-expression': 7.29.7 + '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@10.2.2) + '@babel/traverse': 7.29.7(supports-color@10.2.2) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-create-regexp-features-plugin@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-annotate-as-pure': 7.29.7 + regexpu-core: 6.4.0 + semver: 6.3.1 + + '@babel/helper-define-polyfill-provider@0.6.8(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + debug: 4.4.3(supports-color@10.2.2) + lodash.debounce: 4.0.8 + resolve: 1.22.12 + transitivePeerDependencies: + - supports-color + + '@babel/helper-globals@7.29.7': {} + + '@babel/helper-member-expression-to-functions@7.29.7(supports-color@10.2.2)': + dependencies: + '@babel/traverse': 7.29.7(supports-color@10.2.2) + '@babel/types': 7.29.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.18.6': + dependencies: + '@babel/types': 7.29.7 + + '@babel/helper-module-imports@7.29.7(supports-color@10.2.2)': + dependencies: + '@babel/traverse': 7.29.7(supports-color@10.2.2) + '@babel/types': 7.29.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-module-imports': 7.29.7(supports-color@10.2.2) + '@babel/helper-validator-identifier': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color + + '@babel/helper-optimise-call-expression@7.29.7': + dependencies: + '@babel/types': 7.29.7 + + '@babel/helper-plugin-utils@7.29.7': {} + + '@babel/helper-remap-async-to-generator@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-wrap-function': 7.29.7(supports-color@10.2.2) + '@babel/traverse': 7.29.7(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color + + '@babel/helper-replace-supers@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-member-expression-to-functions': 7.29.7(supports-color@10.2.2) + '@babel/helper-optimise-call-expression': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.29.7(supports-color@10.2.2)': + dependencies: + '@babel/traverse': 7.29.7(supports-color@10.2.2) + '@babel/types': 7.29.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.29.7': {} + + '@babel/helper-validator-identifier@7.29.7': {} + + '@babel/helper-validator-option@7.29.7': {} + + '@babel/helper-wrap-function@7.29.7(supports-color@10.2.2)': + dependencies: + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) + '@babel/types': 7.29.7 + transitivePeerDependencies: + - supports-color + + '@babel/helpers@7.29.7': + dependencies: + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 + + '@babel/parser@7.29.7': + dependencies: + '@babel/types': 7.29.7 + + '@babel/plugin-proposal-decorators@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/plugin-syntax-decorators': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-proposal-export-default-from@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-syntax-decorators@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.29.7(supports-color@10.2.2))': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-syntax-export-default-from@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-syntax-flow@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.29.7(supports-color@10.2.2))': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.29.7(supports-color@10.2.2))': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-async-generator-functions@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-remap-async-to-generator': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/traverse': 7.29.7(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-async-to-generator@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-module-imports': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-remap-async-to-generator': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-block-scoping@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-class-properties@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-class-static-block@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-classes@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-globals': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/traverse': 7.29.7(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-destructuring@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-export-namespace-from@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-flow-strip-types@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/plugin-syntax-flow': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + + '@babel/plugin-transform-for-of@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-logical-assignment-operators@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-modules-commonjs@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + transitivePeerDependencies: + - supports-color - '@babel/code-frame@7.29.7': + '@babel/plugin-transform-named-capturing-groups-regex@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/helper-validator-identifier': 7.29.7 - js-tokens: 4.0.0 - picocolors: 1.1.1 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/compat-data@7.29.7': {} + '@babel/plugin-transform-nullish-coalescing-operator@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/core@7.29.7(supports-color@10.2.2)': + '@babel/plugin-transform-object-rest-spread@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/code-frame': 7.29.7 - '@babel/generator': 7.29.7 + '@babel/core': 7.29.7(supports-color@10.2.2) '@babel/helper-compilation-targets': 7.29.7 - '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) - '@babel/helpers': 7.29.7 - '@babel/parser': 7.29.7 - '@babel/template': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/plugin-transform-destructuring': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-parameters': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) '@babel/traverse': 7.29.7(supports-color@10.2.2) - '@babel/types': 7.29.7 - '@jridgewell/remapping': 2.3.5 - convert-source-map: 2.0.0 - debug: 4.4.3(supports-color@10.2.2) - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/generator@7.29.7': + '@babel/plugin-transform-optional-catch-binding@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/parser': 7.29.7 - '@babel/types': 7.29.7 - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - jsesc: 3.1.0 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-compilation-targets@7.29.7': + '@babel/plugin-transform-optional-chaining@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/compat-data': 7.29.7 - '@babel/helper-validator-option': 7.29.7 - browserslist: 4.28.7 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-globals@7.29.7': {} + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color - '@babel/helper-module-imports@7.18.6': + '@babel/plugin-transform-parameters@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/types': 7.29.7 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-module-imports@7.29.7(supports-color@10.2.2)': + '@babel/plugin-transform-private-methods@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/traverse': 7.29.7(supports-color@10.2.2) - '@babel/types': 7.29.7 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': + '@babel/plugin-transform-private-property-in-object@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: '@babel/core': 7.29.7(supports-color@10.2.2) - '@babel/helper-module-imports': 7.29.7(supports-color@10.2.2) - '@babel/helper-validator-identifier': 7.29.7 - '@babel/traverse': 7.29.7(supports-color@10.2.2) + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-plugin-utils@7.29.7': {} + '@babel/plugin-transform-react-display-name@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-string-parser@7.29.7': {} + '@babel/plugin-transform-react-jsx-development@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/plugin-transform-react-jsx': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color - '@babel/helper-validator-identifier@7.29.7': {} + '@babel/plugin-transform-react-jsx-self@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-validator-option@7.29.7': {} + '@babel/plugin-transform-react-jsx-source@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/helpers@7.29.7': + '@babel/plugin-transform-react-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/template': 7.29.7 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-module-imports': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) '@babel/types': 7.29.7 + transitivePeerDependencies: + - supports-color - '@babel/parser@7.29.7': + '@babel/plugin-transform-react-pure-annotations@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/types': 7.29.7 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': + '@babel/plugin-transform-regenerator@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-runtime@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-module-imports': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + babel-plugin-polyfill-corejs2: 0.4.17(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + babel-plugin-polyfill-regenerator: 0.6.8(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@10.2.2) + '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-unicode-regex@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/preset-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-validator-option': 7.29.7 + '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-modules-commonjs': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color '@babel/runtime@7.29.7': {} @@ -7298,69 +10818,423 @@ snapshots: '@esbuild/linux-s390x@0.28.1': optional: true - '@esbuild/linux-x64@0.27.7': - optional: true + '@esbuild/linux-x64@0.27.7': + optional: true + + '@esbuild/linux-x64@0.28.1': + optional: true + + '@esbuild/netbsd-arm64@0.27.7': + optional: true + + '@esbuild/netbsd-arm64@0.28.1': + optional: true + + '@esbuild/netbsd-x64@0.27.7': + optional: true + + '@esbuild/netbsd-x64@0.28.1': + optional: true + + '@esbuild/openbsd-arm64@0.27.7': + optional: true + + '@esbuild/openbsd-arm64@0.28.1': + optional: true + + '@esbuild/openbsd-x64@0.27.7': + optional: true + + '@esbuild/openbsd-x64@0.28.1': + optional: true + + '@esbuild/openharmony-arm64@0.27.7': + optional: true + + '@esbuild/openharmony-arm64@0.28.1': + optional: true + + '@esbuild/sunos-x64@0.27.7': + optional: true + + '@esbuild/sunos-x64@0.28.1': + optional: true + + '@esbuild/win32-arm64@0.27.7': + optional: true + + '@esbuild/win32-arm64@0.28.1': + optional: true + + '@esbuild/win32-ia32@0.27.7': + optional: true + + '@esbuild/win32-ia32@0.28.1': + optional: true + + '@esbuild/win32-x64@0.27.7': + optional: true + + '@esbuild/win32-x64@0.28.1': + optional: true + + '@exodus/bytes@1.15.1(@noble/hashes@2.2.0)': + optionalDependencies: + '@noble/hashes': 2.2.0 + + '@expo/cli@57.0.11(db0d7a7e1f9ec962ef302cb8147809a2)': + dependencies: + '@expo/code-signing-certificates': 0.0.6 + '@expo/config': 57.0.6(supports-color@10.2.2)(typescript@6.0.3) + '@expo/config-plugins': 57.0.6(supports-color@10.2.2)(typescript@6.0.3) + '@expo/devcert': 1.2.1(supports-color@10.2.2) + '@expo/env': 2.4.2(supports-color@10.2.2) + '@expo/image-utils': 0.11.4(supports-color@10.2.2)(typescript@6.0.3) + '@expo/inline-modules': 0.1.4(supports-color@10.2.2)(typescript@6.0.3) + '@expo/json-file': 11.0.1 + '@expo/log-box': 57.0.2(@expo/dom-webview@57.0.1)(expo@57.0.9)(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(react@19.2.3) + '@expo/metro': 56.0.0(supports-color@10.2.2) + '@expo/metro-config': 57.0.7(expo@57.0.9)(supports-color@10.2.2)(typescript@6.0.3) + '@expo/metro-file-map': 57.0.1(supports-color@10.2.2) + '@expo/osascript': 2.7.1 + '@expo/package-manager': 1.13.1 + '@expo/plist': 0.8.1 + '@expo/prebuild-config': 57.0.10(supports-color@10.2.2)(typescript@6.0.3) + '@expo/require-utils': 57.0.4(supports-color@10.2.2)(typescript@6.0.3) + '@expo/router-server': 57.0.4(expo-constants@57.0.8(expo@57.0.9)(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(supports-color@10.2.2))(expo-font@57.0.1(expo@57.0.9)(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(react@19.2.3))(expo-server@57.0.1)(expo@57.0.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(supports-color@10.2.2) + '@expo/schema-utils': 57.0.2 + '@expo/spawn-async': 1.8.0 + '@expo/ws-tunnel': 2.0.0(ws@8.21.0) + '@expo/xcpretty': 4.4.4 + '@react-native/dev-middleware': 0.86.2(supports-color@10.2.2) + accepts: 1.3.8 + agent-cli-detector: 0.1.4 + arg: 5.0.2 + bplist-creator: 0.1.0 + bplist-parser: 0.3.2 + chalk: 4.1.2 + ci-info: 3.9.0 + compression: 1.8.1(supports-color@10.2.2) + connect: 3.7.0(supports-color@10.2.2) + debug: 4.4.3(supports-color@10.2.2) + dnssd-advertise: 1.1.6 + expo: 57.0.9(@babel/core@7.29.7(supports-color@10.2.2))(@expo/dom-webview@57.0.1)(react-dom@19.2.3(react@19.2.3))(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(react@19.2.3)(supports-color@10.2.2)(typescript@6.0.3) + expo-server: 57.0.1 + fetch-nodeshim: 0.4.10 + getenv: 2.0.0 + glob: 13.0.6 + lan-network: 0.2.1 + multitars: 1.0.0 + node-forge: 1.4.0 + npm-package-arg: 11.0.3 + ora: 3.4.0 + picomatch: 4.0.5 + pretty-format: 29.7.0 + progress: 2.0.3 + prompts: 2.4.2 + resolve-from: 5.0.0 + semver: 7.8.5 + send: 0.19.2(supports-color@10.2.2) + slugify: 1.6.9 + stacktrace-parser: 0.1.11 + structured-headers: 0.4.1 + terminal-link: 2.1.1 + toqr: 0.1.1 + wrap-ansi: 7.0.0 + ws: 8.21.0 + zod: 3.25.76 + optionalDependencies: + react-native: 0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2) + transitivePeerDependencies: + - '@expo/dom-webview' + - '@expo/metro-runtime' + - bufferutil + - expo-constants + - expo-font + - react + - react-dom + - react-server-dom-webpack + - supports-color + - typescript + - utf-8-validate + + '@expo/code-signing-certificates@0.0.6': + dependencies: + node-forge: 1.4.0 + + '@expo/config-plugins@57.0.6(supports-color@10.2.2)(typescript@6.0.3)': + dependencies: + '@expo/config-types': 57.0.2 + '@expo/json-file': 11.0.1 + '@expo/plist': 0.8.1 + '@expo/require-utils': 57.0.4(supports-color@10.2.2)(typescript@6.0.3) + '@expo/sdk-runtime-versions': 1.0.0 + chalk: 4.1.2 + debug: 4.4.3(supports-color@10.2.2) + getenv: 2.0.0 + glob: 13.0.6 + semver: 7.8.5 + slugify: 1.6.9 + xcode: 3.0.1 + xml2js: 0.6.0 + transitivePeerDependencies: + - supports-color + - typescript + + '@expo/config-types@57.0.2': {} + + '@expo/config@57.0.6(supports-color@10.2.2)(typescript@6.0.3)': + dependencies: + '@expo/config-plugins': 57.0.6(supports-color@10.2.2)(typescript@6.0.3) + '@expo/config-types': 57.0.2 + '@expo/json-file': 11.0.1 + '@expo/require-utils': 57.0.4(supports-color@10.2.2)(typescript@6.0.3) + deepmerge: 4.3.1 + getenv: 2.0.0 + glob: 13.0.6 + resolve-workspace-root: 2.0.1 + semver: 7.8.5 + slugify: 1.6.9 + transitivePeerDependencies: + - supports-color + - typescript + + '@expo/devcert@1.2.1(supports-color@10.2.2)': + dependencies: + '@expo/sudo-prompt': 9.3.2 + debug: 3.2.7(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color + + '@expo/devtools@57.0.1(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(react@19.2.3)': + dependencies: + chalk: 4.1.2 + optionalDependencies: + react: 19.2.3 + react-native: 0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2) + + '@expo/dom-webview@57.0.1(expo@57.0.9)(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(react@19.2.3)': + dependencies: + expo: 57.0.9(@babel/core@7.29.7(supports-color@10.2.2))(@expo/dom-webview@57.0.1)(react-dom@19.2.3(react@19.2.3))(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(react@19.2.3)(supports-color@10.2.2)(typescript@6.0.3) + react: 19.2.3 + react-native: 0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2) + + '@expo/env@2.4.2(supports-color@10.2.2)': + dependencies: + chalk: 4.1.2 + debug: 4.4.3(supports-color@10.2.2) + getenv: 2.0.0 + transitivePeerDependencies: + - supports-color + + '@expo/expo-modules-macros-plugin@0.6.1': {} + + '@expo/fingerprint@0.20.6(supports-color@10.2.2)': + dependencies: + '@expo/env': 2.4.2(supports-color@10.2.2) + '@expo/spawn-async': 1.8.0 + arg: 5.0.2 + chalk: 4.1.2 + debug: 4.4.3(supports-color@10.2.2) + getenv: 2.0.0 + glob: 13.0.6 + ignore: 5.3.2 + minimatch: 10.2.5 + resolve-from: 5.0.0 + semver: 7.8.5 + transitivePeerDependencies: + - supports-color + + '@expo/image-utils@0.11.4(supports-color@10.2.2)(typescript@6.0.3)': + dependencies: + '@expo/require-utils': 57.0.4(supports-color@10.2.2)(typescript@6.0.3) + '@expo/spawn-async': 1.8.0 + chalk: 4.1.2 + getenv: 2.0.0 + jimp-compact: 0.16.1 + parse-png: 2.1.0 + semver: 7.8.5 + transitivePeerDependencies: + - supports-color + - typescript + + '@expo/inline-modules@0.1.4(supports-color@10.2.2)(typescript@6.0.3)': + dependencies: + '@expo/config-plugins': 57.0.6(supports-color@10.2.2)(typescript@6.0.3) + transitivePeerDependencies: + - supports-color + - typescript - '@esbuild/linux-x64@0.28.1': - optional: true + '@expo/json-file@11.0.1': + dependencies: + '@babel/code-frame': 7.29.7 + json5: 2.2.3 - '@esbuild/netbsd-arm64@0.27.7': - optional: true + '@expo/local-build-cache-provider@57.0.5(supports-color@10.2.2)(typescript@6.0.3)': + dependencies: + '@expo/config': 57.0.6(supports-color@10.2.2)(typescript@6.0.3) + chalk: 4.1.2 + transitivePeerDependencies: + - supports-color + - typescript - '@esbuild/netbsd-arm64@0.28.1': - optional: true + '@expo/log-box@57.0.2(@expo/dom-webview@57.0.1)(expo@57.0.9)(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(react@19.2.3)': + dependencies: + '@expo/dom-webview': 57.0.1(expo@57.0.9)(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(react@19.2.3) + anser: 1.4.10 + expo: 57.0.9(@babel/core@7.29.7(supports-color@10.2.2))(@expo/dom-webview@57.0.1)(react-dom@19.2.3(react@19.2.3))(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(react@19.2.3)(supports-color@10.2.2)(typescript@6.0.3) + react: 19.2.3 + react-native: 0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2) + stacktrace-parser: 0.1.11 - '@esbuild/netbsd-x64@0.27.7': - optional: true + '@expo/metro-config@57.0.7(expo@57.0.9)(supports-color@10.2.2)(typescript@6.0.3)': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/generator': 7.29.7 + '@expo/config': 57.0.6(supports-color@10.2.2)(typescript@6.0.3) + '@expo/env': 2.4.2(supports-color@10.2.2) + '@expo/json-file': 11.0.1 + '@expo/metro': 56.0.0(supports-color@10.2.2) + '@expo/require-utils': 57.0.4(supports-color@10.2.2)(typescript@6.0.3) + '@expo/spawn-async': 1.8.0 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/remapping': 2.3.5 + '@jridgewell/sourcemap-codec': 1.5.5 + browserslist: 4.28.7 + chalk: 4.1.2 + debug: 4.4.3(supports-color@10.2.2) + getenv: 2.0.0 + glob: 13.0.6 + hermes-parser: 0.36.0 + jsc-safe-url: 0.2.4 + lightningcss: 1.33.0 + picomatch: 4.0.5 + postcss: 8.5.23 + resolve-from: 5.0.0 + optionalDependencies: + expo: 57.0.9(@babel/core@7.29.7(supports-color@10.2.2))(@expo/dom-webview@57.0.1)(react-dom@19.2.3(react@19.2.3))(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(react@19.2.3)(supports-color@10.2.2)(typescript@6.0.3) + transitivePeerDependencies: + - bufferutil + - supports-color + - typescript + - utf-8-validate - '@esbuild/netbsd-x64@0.28.1': - optional: true + '@expo/metro-file-map@57.0.1(supports-color@10.2.2)': + dependencies: + debug: 4.4.3(supports-color@10.2.2) + fb-watchman: 2.0.2 + invariant: 2.2.4 + jest-worker: 29.7.0 + micromatch: 4.0.8 + walker: 1.0.8 + transitivePeerDependencies: + - supports-color - '@esbuild/openbsd-arm64@0.27.7': - optional: true + '@expo/metro@56.0.0(supports-color@10.2.2)': + dependencies: + metro: 0.84.4(supports-color@10.2.2) + metro-babel-transformer: 0.84.4(supports-color@10.2.2) + metro-cache: 0.84.4(supports-color@10.2.2) + metro-cache-key: 0.84.4 + metro-config: 0.84.4(supports-color@10.2.2) + metro-core: 0.84.4 + metro-file-map: 0.84.4(supports-color@10.2.2) + metro-minify-terser: 0.84.4 + metro-resolver: 0.84.4 + metro-runtime: 0.84.4 + metro-source-map: 0.84.4(supports-color@10.2.2) + metro-symbolicate: 0.84.4(supports-color@10.2.2) + metro-transform-plugins: 0.84.4(supports-color@10.2.2) + metro-transform-worker: 0.84.4(supports-color@10.2.2) + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate - '@esbuild/openbsd-arm64@0.28.1': - optional: true + '@expo/osascript@2.7.1': + dependencies: + '@expo/spawn-async': 1.8.0 - '@esbuild/openbsd-x64@0.27.7': - optional: true + '@expo/package-manager@1.13.1': + dependencies: + '@expo/json-file': 11.0.1 + '@expo/spawn-async': 1.8.0 + chalk: 4.1.2 + npm-package-arg: 11.0.3 + ora: 3.4.0 + resolve-workspace-root: 2.0.1 - '@esbuild/openbsd-x64@0.28.1': - optional: true + '@expo/plist@0.8.1': + dependencies: + '@xmldom/xmldom': 0.8.13 + base64-js: 1.5.1 + xmlbuilder: 15.1.1 - '@esbuild/openharmony-arm64@0.27.7': - optional: true + '@expo/prebuild-config@57.0.10(supports-color@10.2.2)(typescript@6.0.3)': + dependencies: + '@expo/config': 57.0.6(supports-color@10.2.2)(typescript@6.0.3) + '@expo/config-plugins': 57.0.6(supports-color@10.2.2)(typescript@6.0.3) + '@expo/config-types': 57.0.2 + '@expo/image-utils': 0.11.4(supports-color@10.2.2)(typescript@6.0.3) + '@expo/json-file': 11.0.1 + '@react-native/normalize-colors': 0.86.2 + debug: 4.4.3(supports-color@10.2.2) + expo-modules-autolinking: 57.0.9(supports-color@10.2.2)(typescript@6.0.3) + resolve-from: 5.0.0 + semver: 7.8.5 + transitivePeerDependencies: + - supports-color + - typescript - '@esbuild/openharmony-arm64@0.28.1': - optional: true + '@expo/require-utils@57.0.4(supports-color@10.2.2)(typescript@6.0.3)': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/plugin-transform-modules-commonjs': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + optionalDependencies: + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color - '@esbuild/sunos-x64@0.27.7': - optional: true + '@expo/router-server@57.0.4(expo-constants@57.0.8(expo@57.0.9)(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(supports-color@10.2.2))(expo-font@57.0.1(expo@57.0.9)(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(react@19.2.3))(expo-server@57.0.1)(expo@57.0.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(supports-color@10.2.2)': + dependencies: + debug: 4.4.3(supports-color@10.2.2) + expo: 57.0.9(@babel/core@7.29.7(supports-color@10.2.2))(@expo/dom-webview@57.0.1)(react-dom@19.2.3(react@19.2.3))(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(react@19.2.3)(supports-color@10.2.2)(typescript@6.0.3) + expo-constants: 57.0.8(expo@57.0.9)(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(supports-color@10.2.2) + expo-font: 57.0.1(expo@57.0.9)(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(react@19.2.3) + expo-server: 57.0.1 + react: 19.2.3 + optionalDependencies: + react-dom: 19.2.3(react@19.2.3) + transitivePeerDependencies: + - supports-color - '@esbuild/sunos-x64@0.28.1': - optional: true + '@expo/schema-utils@57.0.2': {} - '@esbuild/win32-arm64@0.27.7': - optional: true + '@expo/sdk-runtime-versions@1.0.0': {} - '@esbuild/win32-arm64@0.28.1': - optional: true + '@expo/spawn-async@1.8.0': + dependencies: + cross-spawn: 7.0.6 - '@esbuild/win32-ia32@0.27.7': - optional: true + '@expo/sudo-prompt@9.3.2': {} - '@esbuild/win32-ia32@0.28.1': - optional: true + '@expo/ws-tunnel@2.0.0(ws@8.21.0)': + dependencies: + ws: 8.21.0 - '@esbuild/win32-x64@0.27.7': - optional: true + '@expo/xcpretty@4.4.4': + dependencies: + '@babel/code-frame': 7.29.7 + chalk: 4.1.2 + js-yaml: 4.3.0 - '@esbuild/win32-x64@0.28.1': - optional: true + '@hapi/hoek@9.3.0': {} - '@exodus/bytes@1.15.1(@noble/hashes@2.2.0)': - optionalDependencies: - '@noble/hashes': 2.2.0 + '@hapi/topo@5.1.0': + dependencies: + '@hapi/hoek': 9.3.0 '@img/colour@1.1.0': {} @@ -7465,8 +11339,23 @@ snapshots: optionalDependencies: '@types/node': 25.9.5 + '@isaacs/ttlcache@1.4.1': {} + '@jest/diff-sequences@30.0.1': {} + '@jest/schemas@29.6.3': + dependencies: + '@sinclair/typebox': 0.27.12 + + '@jest/types@29.6.3': + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 25.9.5 + '@types/yargs': 17.0.35 + chalk: 4.1.2 + '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -7479,6 +11368,11 @@ snapshots: '@jridgewell/resolve-uri@3.1.2': {} + '@jridgewell/source-map@0.3.11': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + '@jridgewell/sourcemap-codec@1.5.5': {} '@jridgewell/trace-mapping@0.3.31': @@ -7669,59 +11563,330 @@ snapshots: '@parcel/watcher-linux-arm-glibc@2.6.0': optional: true - '@parcel/watcher-linux-arm-musl@2.6.0': - optional: true + '@parcel/watcher-linux-arm-musl@2.6.0': + optional: true + + '@parcel/watcher-linux-arm64-glibc@2.6.0': + optional: true + + '@parcel/watcher-linux-arm64-musl@2.6.0': + optional: true + + '@parcel/watcher-linux-x64-glibc@2.6.0': + optional: true + + '@parcel/watcher-linux-x64-musl@2.6.0': + optional: true + + '@parcel/watcher-win32-arm64@2.6.0': + optional: true + + '@parcel/watcher-win32-x64@2.6.0': + optional: true + + '@parcel/watcher@2.6.0': + dependencies: + detect-libc: 2.1.2 + is-glob: 4.0.3 + node-addon-api: 7.1.1 + picomatch: 4.0.5 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.6.0 + '@parcel/watcher-darwin-arm64': 2.6.0 + '@parcel/watcher-darwin-x64': 2.6.0 + '@parcel/watcher-freebsd-x64': 2.6.0 + '@parcel/watcher-linux-arm-glibc': 2.6.0 + '@parcel/watcher-linux-arm-musl': 2.6.0 + '@parcel/watcher-linux-arm64-glibc': 2.6.0 + '@parcel/watcher-linux-arm64-musl': 2.6.0 + '@parcel/watcher-linux-x64-glibc': 2.6.0 + '@parcel/watcher-linux-x64-musl': 2.6.0 + '@parcel/watcher-win32-arm64': 2.6.0 + '@parcel/watcher-win32-x64': 2.6.0 + optional: true + + '@poppinss/colors@4.1.6': + dependencies: + kleur: 4.1.5 + + '@poppinss/dumper@0.6.5': + dependencies: + '@poppinss/colors': 4.1.6 + '@sindresorhus/is': 7.2.0 + supports-color: 10.2.2 + + '@poppinss/exception@1.2.3': {} + + '@react-native-community/cli-clean@20.1.0': + dependencies: + '@react-native-community/cli-tools': 20.1.0 + execa: 5.1.1 + fast-glob: 3.3.3 + picocolors: 1.1.1 + + '@react-native-community/cli-config-android@20.1.0': + dependencies: + '@react-native-community/cli-tools': 20.1.0 + fast-glob: 3.3.3 + fast-xml-parser: 4.5.7 + picocolors: 1.1.1 + + '@react-native-community/cli-config-apple@20.1.0': + dependencies: + '@react-native-community/cli-tools': 20.1.0 + execa: 5.1.1 + fast-glob: 3.3.3 + picocolors: 1.1.1 + + '@react-native-community/cli-config@20.1.0(typescript@6.0.3)': + dependencies: + '@react-native-community/cli-tools': 20.1.0 + cosmiconfig: 9.0.2(typescript@6.0.3) + deepmerge: 4.3.1 + fast-glob: 3.3.3 + joi: 17.13.4 + picocolors: 1.1.1 + transitivePeerDependencies: + - typescript + + '@react-native-community/cli-doctor@20.1.0(typescript@6.0.3)': + dependencies: + '@react-native-community/cli-config': 20.1.0(typescript@6.0.3) + '@react-native-community/cli-platform-android': 20.1.0 + '@react-native-community/cli-platform-apple': 20.1.0 + '@react-native-community/cli-platform-ios': 20.1.0 + '@react-native-community/cli-tools': 20.1.0 + command-exists: 1.2.9 + deepmerge: 4.3.1 + envinfo: 7.21.0 + execa: 5.1.1 + node-stream-zip: 1.16.0 + ora: 5.4.1 + picocolors: 1.1.1 + semver: 7.8.5 + wcwidth: 1.0.1 + yaml: 2.9.0 + transitivePeerDependencies: + - typescript + + '@react-native-community/cli-platform-android@20.1.0': + dependencies: + '@react-native-community/cli-config-android': 20.1.0 + '@react-native-community/cli-tools': 20.1.0 + execa: 5.1.1 + logkitty: 0.7.1 + picocolors: 1.1.1 + + '@react-native-community/cli-platform-apple@20.1.0': + dependencies: + '@react-native-community/cli-config-apple': 20.1.0 + '@react-native-community/cli-tools': 20.1.0 + execa: 5.1.1 + fast-xml-parser: 4.5.7 + picocolors: 1.1.1 + + '@react-native-community/cli-platform-ios@20.1.0': + dependencies: + '@react-native-community/cli-platform-apple': 20.1.0 + + '@react-native-community/cli-server-api@20.1.0(supports-color@10.2.2)': + dependencies: + '@react-native-community/cli-tools': 20.1.0 + body-parser: 1.20.6(supports-color@10.2.2) + compression: 1.8.1(supports-color@10.2.2) + connect: 3.7.0(supports-color@10.2.2) + errorhandler: 1.5.2 + nocache: 3.0.4 + open: 6.4.0 + pretty-format: 29.7.0 + serve-static: 1.16.3(supports-color@10.2.2) + ws: 6.2.6 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + '@react-native-community/cli-tools@20.1.0': + dependencies: + '@vscode/sudo-prompt': 9.3.2 + appdirsjs: 1.2.8 + execa: 5.1.1 + find-up: 5.0.0 + launch-editor: 2.14.1 + mime: 2.6.0 + ora: 5.4.1 + picocolors: 1.1.1 + prompts: 2.4.2 + semver: 7.8.5 + + '@react-native-community/cli-types@20.1.0': + dependencies: + joi: 17.13.4 + + '@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3)': + dependencies: + '@react-native-community/cli-clean': 20.1.0 + '@react-native-community/cli-config': 20.1.0(typescript@6.0.3) + '@react-native-community/cli-doctor': 20.1.0(typescript@6.0.3) + '@react-native-community/cli-server-api': 20.1.0(supports-color@10.2.2) + '@react-native-community/cli-tools': 20.1.0 + '@react-native-community/cli-types': 20.1.0 + commander: 9.5.0 + deepmerge: 4.3.1 + execa: 5.1.1 + find-up: 5.0.0 + fs-extra: 8.1.0 + graceful-fs: 4.2.11 + picocolors: 1.1.1 + prompts: 2.4.2 + semver: 7.8.5 + transitivePeerDependencies: + - bufferutil + - supports-color + - typescript + - utf-8-validate + + '@react-native/assets-registry@0.86.2': {} + + '@react-native/babel-plugin-codegen@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': + dependencies: + '@babel/traverse': 7.29.7(supports-color@10.2.2) + '@react-native/codegen': 0.86.2(@babel/core@7.29.7(supports-color@10.2.2)) + transitivePeerDependencies: + - '@babel/core' + - supports-color + + '@react-native/babel-preset@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/plugin-proposal-export-default-from': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-syntax-export-default-from': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-async-generator-functions': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-async-to-generator': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-block-scoping': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-class-properties': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-classes': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-destructuring': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-flow-strip-types': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-for-of': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-modules-commonjs': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-named-capturing-groups-regex': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-nullish-coalescing-operator': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-optional-catch-binding': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-optional-chaining': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-private-methods': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-private-property-in-object': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-react-display-name': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-react-jsx': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-react-jsx-self': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-react-jsx-source': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-regenerator': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-runtime': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-unicode-regex': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@react-native/babel-plugin-codegen': 0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + babel-plugin-syntax-hermes-parser: 0.36.0 + babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.29.7(supports-color@10.2.2)) + react-refresh: 0.14.2 + transitivePeerDependencies: + - supports-color + + '@react-native/codegen@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/parser': 7.29.7 + hermes-parser: 0.36.0 + invariant: 2.2.4 + nullthrows: 1.1.1 + tinyglobby: 0.2.17 + yargs: 17.7.2 - '@parcel/watcher-linux-arm64-glibc@2.6.0': - optional: true + '@react-native/community-cli-plugin@0.86.2(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(supports-color@10.2.2)': + dependencies: + '@react-native/dev-middleware': 0.86.2(supports-color@10.2.2) + debug: 4.4.3(supports-color@10.2.2) + invariant: 2.2.4 + metro: 0.84.4(supports-color@10.2.2) + metro-config: 0.84.4(supports-color@10.2.2) + metro-core: 0.84.4 + semver: 7.8.5 + optionalDependencies: + '@react-native-community/cli': 20.1.0(supports-color@10.2.2)(typescript@6.0.3) + '@react-native/metro-config': 0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate - '@parcel/watcher-linux-arm64-musl@2.6.0': - optional: true + '@react-native/debugger-frontend@0.86.2': {} - '@parcel/watcher-linux-x64-glibc@2.6.0': - optional: true + '@react-native/debugger-shell@0.86.2(supports-color@10.2.2)': + dependencies: + cross-spawn: 7.0.6 + debug: 4.4.3(supports-color@10.2.2) + fb-dotslash: 0.5.8 + transitivePeerDependencies: + - supports-color - '@parcel/watcher-linux-x64-musl@2.6.0': - optional: true + '@react-native/dev-middleware@0.86.2(supports-color@10.2.2)': + dependencies: + '@isaacs/ttlcache': 1.4.1 + '@react-native/debugger-frontend': 0.86.2 + '@react-native/debugger-shell': 0.86.2(supports-color@10.2.2) + chrome-launcher: 0.15.2(supports-color@10.2.2) + chromium-edge-launcher: 0.3.0(supports-color@10.2.2) + connect: 3.7.0(supports-color@10.2.2) + debug: 4.4.3(supports-color@10.2.2) + invariant: 2.2.4 + nullthrows: 1.1.1 + open: 7.4.2 + serve-static: 1.16.3(supports-color@10.2.2) + ws: 7.5.13 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate - '@parcel/watcher-win32-arm64@2.6.0': - optional: true + '@react-native/gradle-plugin@0.86.2': {} - '@parcel/watcher-win32-x64@2.6.0': - optional: true + '@react-native/js-polyfills@0.86.2': {} - '@parcel/watcher@2.6.0': + '@react-native/metro-babel-transformer@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - detect-libc: 2.1.2 - is-glob: 4.0.3 - node-addon-api: 7.1.1 - picomatch: 4.0.5 - optionalDependencies: - '@parcel/watcher-android-arm64': 2.6.0 - '@parcel/watcher-darwin-arm64': 2.6.0 - '@parcel/watcher-darwin-x64': 2.6.0 - '@parcel/watcher-freebsd-x64': 2.6.0 - '@parcel/watcher-linux-arm-glibc': 2.6.0 - '@parcel/watcher-linux-arm-musl': 2.6.0 - '@parcel/watcher-linux-arm64-glibc': 2.6.0 - '@parcel/watcher-linux-arm64-musl': 2.6.0 - '@parcel/watcher-linux-x64-glibc': 2.6.0 - '@parcel/watcher-linux-x64-musl': 2.6.0 - '@parcel/watcher-win32-arm64': 2.6.0 - '@parcel/watcher-win32-x64': 2.6.0 - optional: true + '@babel/core': 7.29.7(supports-color@10.2.2) + '@react-native/babel-preset': 0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + hermes-parser: 0.36.0 + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color - '@poppinss/colors@4.1.6': + '@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - kleur: 4.1.5 + '@react-native/js-polyfills': 0.86.2 + '@react-native/metro-babel-transformer': 0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + metro-config: 0.84.4(supports-color@10.2.2) + metro-runtime: 0.84.4 + transitivePeerDependencies: + - '@babel/core' + - bufferutil + - supports-color + - utf-8-validate - '@poppinss/dumper@0.6.5': - dependencies: - '@poppinss/colors': 4.1.6 - '@sindresorhus/is': 7.2.0 - supports-color: 10.2.2 + '@react-native/normalize-colors@0.86.2': {} - '@poppinss/exception@1.2.3': {} + '@react-native/typescript-config@0.86.2': {} + + '@react-native/virtualized-lists@0.86.2(@types/react@19.2.17)(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(react@19.2.3)': + dependencies: + invariant: 2.2.4 + nullthrows: 1.1.1 + react: 19.2.3 + react-native: 0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2) + optionalDependencies: + '@types/react': 19.2.17 '@reduxjs/toolkit@2.12.0(react-redux@9.3.0(@types/react@19.2.17)(react@19.2.3)(redux@5.0.1))(react@19.2.3)': dependencies: @@ -7881,6 +12046,16 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + '@sideway/address@4.1.5': + dependencies: + '@hapi/hoek': 9.3.0 + + '@sideway/formula@3.0.1': {} + + '@sideway/pinpoint@2.0.0': {} + + '@sinclair/typebox@0.27.12': {} + '@sindresorhus/is@7.2.0': {} '@speed-highlight/core@1.2.17': {} @@ -7906,23 +12081,23 @@ snapshots: transitivePeerDependencies: - typescript - '@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.8)(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0))': + '@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.8)(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0))': dependencies: deepmerge: 4.3.1 magic-string: 0.30.21 obug: 2.1.4 svelte: 5.56.8 - vite: 8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0) - vitefu: 1.1.3(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0)) + vite: 8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0) + vitefu: 1.1.3(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0)) - '@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.8)(vite@8.1.5(@types/node@25.9.5)(esbuild@0.28.1)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0))': + '@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.8)(vite@8.1.5(@types/node@25.9.5)(esbuild@0.28.1)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0))': dependencies: deepmerge: 4.3.1 magic-string: 0.30.21 obug: 2.1.4 svelte: 5.56.8 - vite: 8.1.5(@types/node@25.9.5)(esbuild@0.28.1)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0) - vitefu: 1.1.3(vite@8.1.5(@types/node@25.9.5)(esbuild@0.28.1)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0)) + vite: 8.1.5(@types/node@25.9.5)(esbuild@0.28.1)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0) + vitefu: 1.1.3(vite@8.1.5(@types/node@25.9.5)(esbuild@0.28.1)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0)) '@tsrx/core@0.1.48': dependencies: @@ -8052,6 +12227,16 @@ snapshots: '@types/geojson@7946.0.16': {} + '@types/istanbul-lib-coverage@2.0.6': {} + + '@types/istanbul-lib-report@3.0.3': + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + + '@types/istanbul-reports@3.0.4': + dependencies: + '@types/istanbul-lib-report': 3.0.3 + '@types/jsdom@27.0.0': dependencies: '@types/node': 25.9.5 @@ -8087,10 +12272,20 @@ snapshots: '@types/use-sync-external-store@0.0.6': {} - '@vitejs/plugin-react@6.0.4(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0))': + '@types/yargs-parser@21.0.3': {} + + '@types/yargs@17.0.35': + dependencies: + '@types/yargs-parser': 21.0.3 + + '@ungap/structured-clone@1.3.3': {} + + '@vitejs/plugin-react@6.0.4(babel-plugin-react-compiler@1.0.0)(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0))': dependencies: '@rolldown/pluginutils': 1.0.1 - vite: 8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0) + vite: 8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0) + optionalDependencies: + babel-plugin-react-compiler: 1.0.0 '@vitest/expect@4.1.10': dependencies: @@ -8101,13 +12296,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.10(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0))': + '@vitest/mocker@4.1.10(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0))': dependencies: '@vitest/spy': 4.1.10 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0) + vite: 8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0) '@vitest/pretty-format@4.1.10': dependencies: @@ -8133,6 +12328,8 @@ snapshots: convert-source-map: 2.0.0 tinyrainbow: 3.1.0 + '@vscode/sudo-prompt@9.3.2': {} + '@vue/compiler-core@3.5.40': dependencies: '@babel/parser': 7.29.7 @@ -8193,14 +12390,36 @@ snapshots: '@vue/shared@3.5.40': {} + '@xmldom/xmldom@0.8.13': {} + + '@xmldom/xmldom@0.9.10': {} + '@yarnpkg/lockfile@1.1.0': {} '@zkochan/js-yaml@0.0.7': dependencies: argparse: 2.0.1 + abort-controller@3.0.0: + dependencies: + event-target-shim: 5.0.1 + + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + + accepts@2.0.0: + dependencies: + mime-types: 3.0.2 + negotiator: 1.0.0 + acorn@8.17.0: {} + agent-base@7.1.4: {} + + agent-cli-detector@0.1.4: {} + ajv@8.20.0: dependencies: fast-deep-equal: 3.1.3 @@ -8212,18 +12431,42 @@ snapshots: dependencies: '@vue/reactivity': 3.1.5 + anser@1.4.10: {} + ansi-colors@4.1.3: {} + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-fragments@0.2.1: + dependencies: + colorette: 1.4.0 + slice-ansi: 2.1.0 + strip-ansi: 5.2.0 + + ansi-regex@4.1.1: {} + ansi-regex@5.0.1: {} ansi-regex@6.2.2: {} + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 + ansi-styles@5.2.0: {} + ansi-styles@6.2.3: {} + appdirsjs@1.2.8: {} + + arg@5.0.2: {} + argparse@1.0.10: dependencies: sprintf-js: 1.0.3 @@ -8234,8 +12477,14 @@ snapshots: array-union@2.1.0: {} + asap@2.0.6: {} + assertion-error@2.0.1: {} + astral-regex@1.0.0: {} + + async-limiter@1.0.1: {} + asynckit@0.4.0: {} axios@1.16.0(debug@4.4.3(supports-color@10.2.2)): @@ -8257,6 +12506,98 @@ snapshots: html-entities: 2.3.3 parse5: 7.3.0 + babel-plugin-polyfill-corejs2@0.4.17(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2): + dependencies: + '@babel/compat-data': 7.29.7 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2): + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + core-js-compat: 3.49.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-regenerator@0.6.8(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2): + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color + + babel-plugin-react-compiler@1.0.0: + dependencies: + '@babel/types': 7.29.7 + + babel-plugin-react-native-web@0.21.2: {} + + babel-plugin-syntax-hermes-parser@0.36.0: + dependencies: + hermes-parser: 0.36.0 + + babel-plugin-transform-flow-enums@0.0.2(@babel/core@7.29.7(supports-color@10.2.2)): + dependencies: + '@babel/plugin-syntax-flow': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + transitivePeerDependencies: + - '@babel/core' + + babel-preset-expo@57.0.5(@babel/core@7.29.7(supports-color@10.2.2))(@babel/runtime@7.29.7)(expo@57.0.9)(react-refresh@0.14.2)(supports-color@10.2.2): + dependencies: + '@babel/generator': 7.29.7 + '@babel/helper-module-imports': 7.29.7(supports-color@10.2.2) + '@babel/plugin-proposal-decorators': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-proposal-export-default-from': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-syntax-export-default-from': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-async-generator-functions': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-async-to-generator': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-block-scoping': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-class-properties': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-class-static-block': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-classes': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-destructuring': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-export-namespace-from': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-flow-strip-types': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-for-of': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-logical-assignment-operators': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-modules-commonjs': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-named-capturing-groups-regex': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-nullish-coalescing-operator': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-object-rest-spread': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-optional-catch-binding': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-optional-chaining': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-parameters': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-private-methods': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-private-property-in-object': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-react-display-name': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-react-jsx': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-react-jsx-development': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-react-pure-annotations': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-runtime': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-unicode-regex': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/preset-typescript': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@react-native/babel-plugin-codegen': 0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + babel-plugin-react-compiler: 1.0.0 + babel-plugin-react-native-web: 0.21.2 + babel-plugin-syntax-hermes-parser: 0.36.0 + babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.29.7(supports-color@10.2.2)) + debug: 4.4.3(supports-color@10.2.2) + react-refresh: 0.14.2 + optionalDependencies: + '@babel/runtime': 7.29.7 + expo: 57.0.9(@babel/core@7.29.7(supports-color@10.2.2))(@expo/dom-webview@57.0.1)(react-dom@19.2.3(react@19.2.3))(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(react@19.2.3)(supports-color@10.2.2)(typescript@6.0.3) + transitivePeerDependencies: + - '@babel/core' + - supports-color + babel-preset-solid@1.9.12(@babel/core@7.29.7(supports-color@10.2.2))(solid-js@1.9.14): dependencies: '@babel/core': 7.29.7(supports-color@10.2.2) @@ -8278,6 +12619,8 @@ snapshots: dependencies: require-from-string: 2.0.2 + big-integer@1.6.52: {} + binary-search-bounds@2.0.5: {} bl@4.1.0: @@ -8288,6 +12631,37 @@ snapshots: blake3-wasm@2.1.5: {} + body-parser@1.20.6(supports-color@10.2.2): + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9(supports-color@10.2.2) + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.1 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.15.3 + raw-body: 2.5.3 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + boolbase@1.0.0: {} + + bplist-creator@0.1.0: + dependencies: + stream-buffers: 2.2.0 + + bplist-parser@0.3.1: + dependencies: + big-integer: 1.6.52 + + bplist-parser@0.3.2: + dependencies: + big-integer: 1.6.52 + brace-expansion@5.0.6: dependencies: balanced-match: 4.0.3 @@ -8308,20 +12682,45 @@ snapshots: node-releases: 2.0.51 update-browserslist-db: 1.2.3(browserslist@4.28.7) + bser@2.1.1: + dependencies: + node-int64: 0.4.0 + + buffer-from@1.1.2: {} + buffer@5.7.1: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 + bytes@3.1.2: {} + call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 function-bind: 1.1.2 + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + callsites@3.1.0: {} + + camelcase@5.3.1: {} + + camelcase@6.3.0: {} + caniuse-lite@1.0.30001806: {} chai@6.2.2: {} + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -8343,6 +12742,33 @@ snapshots: dependencies: readdirp: 5.0.0 + chrome-launcher@0.15.2(supports-color@10.2.2): + dependencies: + '@types/node': 25.9.5 + escape-string-regexp: 4.0.0 + is-wsl: 2.2.0 + lighthouse-logger: 1.4.2(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color + + chromium-edge-launcher@0.3.0(supports-color@10.2.2): + dependencies: + '@types/node': 25.9.5 + escape-string-regexp: 4.0.0 + is-wsl: 2.2.0 + lighthouse-logger: 1.4.2(supports-color@10.2.2) + mkdirp: 1.0.4 + transitivePeerDependencies: + - supports-color + + ci-info@2.0.0: {} + + ci-info@3.9.0: {} + + cli-cursor@2.1.0: + dependencies: + restore-cursor: 2.0.0 + cli-cursor@3.1.0: dependencies: restore-cursor: 3.1.0 @@ -8355,6 +12781,12 @@ snapshots: cli-spinners@3.4.0: {} + cliui@6.0.0: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -8371,24 +12803,65 @@ snapshots: clsx@2.1.1: {} + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + color-convert@2.0.1: dependencies: color-name: 1.1.4 + color-name@1.1.3: {} + color-name@1.1.4: {} + colorette@1.4.0: {} + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 + command-exists@1.2.9: {} + + commander@12.1.0: {} + commander@14.0.3: {} commander@2.20.3: {} commander@7.2.0: {} + commander@9.5.0: {} + common-path-prefix@3.0.0: {} + compressible@2.0.18: + dependencies: + mime-db: 1.54.0 + + compression@1.8.1(supports-color@10.2.2): + dependencies: + bytes: 3.1.2 + compressible: 2.0.18 + debug: 2.6.9(supports-color@10.2.2) + negotiator: 0.6.4 + on-headers: 1.1.0 + safe-buffer: 5.2.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + connect@3.7.0(supports-color@10.2.2): + dependencies: + debug: 2.6.9(supports-color@10.2.2) + finalhandler: 1.1.2(supports-color@10.2.2) + parseurl: 1.3.3 + utils-merge: 1.0.1 + transitivePeerDependencies: + - supports-color + + content-type@1.0.5: {} + convert-source-map@1.9.0: {} convert-source-map@2.0.0: {} @@ -8399,17 +12872,45 @@ snapshots: dependencies: is-what: 4.1.16 + core-js-compat@3.49.0: + dependencies: + browserslist: 4.28.7 + + cosmiconfig@9.0.2(typescript@6.0.3): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.1 + js-yaml: 4.3.0 + parse-json: 5.2.0 + optionalDependencies: + typescript: 6.0.3 + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 + css-select@5.2.2: + dependencies: + boolbase: 1.0.0 + css-what: 6.2.2 + domhandler: 5.0.3 + domutils: 3.2.2 + nth-check: 2.1.1 + + css-tree@1.1.3: + dependencies: + mdn-data: 2.0.14 + source-map: 0.6.1 + css-tree@3.2.1: dependencies: mdn-data: 2.27.1 source-map-js: 1.2.1 + css-what@6.2.2: {} + csstype@3.2.3: {} d3-array@2.12.1: @@ -8590,19 +13091,19 @@ snapshots: dataloader@1.4.0: {} + dayjs@1.11.21: {} + debug@2.6.9(supports-color@10.2.2): dependencies: ms: 2.0.0 optionalDependencies: supports-color: 10.2.2 - optional: true debug@3.2.7(supports-color@10.2.2): dependencies: ms: 2.1.3 optionalDependencies: supports-color: 10.2.2 - optional: true debug@4.4.3(supports-color@10.2.2): dependencies: @@ -8610,6 +13111,8 @@ snapshots: optionalDependencies: supports-color: 10.2.2 + decamelize@1.2.0: {} + decimal.js-light@2.5.1: {} decimal.js@10.6.0: {} @@ -8630,17 +13133,41 @@ snapshots: delayed-stream@1.0.0: {} + depd@2.0.0: {} + dependency-graph@1.0.0: {} + destroy@1.2.0: {} + detect-indent@6.1.0: {} detect-libc@2.1.2: {} - devalue@5.8.2: {} + devalue@5.8.2: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + dnssd-advertise@1.1.6: {} + + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + domelementtype@2.3.0: {} + + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 - dir-glob@3.0.1: + domutils@3.2.2: dependencies: - path-type: 4.0.0 + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 dotenv-expand@12.0.3: dependencies: @@ -8661,6 +13188,8 @@ snapshots: tslib: 2.3.0 zrender: 6.1.0 + ee-first@1.1.1: {} + ejs@5.0.1: {} electron-to-chromium@1.5.397: {} @@ -8669,6 +13198,10 @@ snapshots: emoji-regex@8.0.0: {} + encodeurl@1.0.2: {} + + encodeurl@2.0.0: {} + end-of-stream@1.4.5: dependencies: once: 1.4.0 @@ -8682,19 +13215,38 @@ snapshots: ansi-colors: 4.1.3 strip-ansi: 6.0.1 + entities@4.5.0: {} + entities@6.0.1: {} entities@7.0.1: {} entities@8.0.0: {} + env-paths@2.2.1: {} + + envinfo@7.21.0: {} + errno@0.1.8: dependencies: prr: 1.0.1 optional: true + error-ex@1.3.4: + dependencies: + is-arrayish: 0.2.1 + error-stack-parser-es@1.0.5: {} + error-stack-parser@2.1.4: + dependencies: + stackframe: 1.3.4 + + errorhandler@1.5.2: + dependencies: + accepts: 1.3.8 + escape-html: 1.0.3 + es-define-property@1.0.1: {} es-errors@1.3.0: {} @@ -8774,8 +13326,12 @@ snapshots: escalade@3.2.0: {} + escape-html@1.0.3: {} + escape-string-regexp@1.0.5: {} + escape-string-regexp@4.0.0: {} + esm-env@1.2.2: {} esprima@4.0.1: {} @@ -8790,10 +13346,128 @@ snapshots: dependencies: '@types/estree': 1.0.9 + etag@1.8.1: {} + + event-target-shim@5.0.1: {} + eventemitter3@5.0.4: {} + execa@5.1.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + expect-type@1.4.0: {} + expo-asset@57.0.8(expo@57.0.9)(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(react@19.2.3)(supports-color@10.2.2)(typescript@6.0.3): + dependencies: + '@expo/image-utils': 0.11.4(supports-color@10.2.2)(typescript@6.0.3) + expo: 57.0.9(@babel/core@7.29.7(supports-color@10.2.2))(@expo/dom-webview@57.0.1)(react-dom@19.2.3(react@19.2.3))(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(react@19.2.3)(supports-color@10.2.2)(typescript@6.0.3) + expo-constants: 57.0.8(expo@57.0.9)(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(supports-color@10.2.2) + react: 19.2.3 + react-native: 0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color + - typescript + + expo-constants@57.0.8(expo@57.0.9)(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(supports-color@10.2.2): + dependencies: + '@expo/env': 2.4.2(supports-color@10.2.2) + expo: 57.0.9(@babel/core@7.29.7(supports-color@10.2.2))(@expo/dom-webview@57.0.1)(react-dom@19.2.3(react@19.2.3))(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(react@19.2.3)(supports-color@10.2.2)(typescript@6.0.3) + react-native: 0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color + + expo-file-system@57.0.1(expo@57.0.9)(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2)): + dependencies: + expo: 57.0.9(@babel/core@7.29.7(supports-color@10.2.2))(@expo/dom-webview@57.0.1)(react-dom@19.2.3(react@19.2.3))(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(react@19.2.3)(supports-color@10.2.2)(typescript@6.0.3) + react-native: 0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2) + + expo-font@57.0.1(expo@57.0.9)(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(react@19.2.3): + dependencies: + expo: 57.0.9(@babel/core@7.29.7(supports-color@10.2.2))(@expo/dom-webview@57.0.1)(react-dom@19.2.3(react@19.2.3))(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(react@19.2.3)(supports-color@10.2.2)(typescript@6.0.3) + fontfaceobserver: 2.3.0 + react: 19.2.3 + react-native: 0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2) + + expo-keep-awake@57.0.1(expo@57.0.9)(react@19.2.3): + dependencies: + expo: 57.0.9(@babel/core@7.29.7(supports-color@10.2.2))(@expo/dom-webview@57.0.1)(react-dom@19.2.3(react@19.2.3))(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(react@19.2.3)(supports-color@10.2.2)(typescript@6.0.3) + react: 19.2.3 + + expo-modules-autolinking@57.0.9(supports-color@10.2.2)(typescript@6.0.3): + dependencies: + '@expo/require-utils': 57.0.4(supports-color@10.2.2)(typescript@6.0.3) + '@expo/spawn-async': 1.8.0 + chalk: 4.1.2 + commander: 7.2.0 + transitivePeerDependencies: + - supports-color + - typescript + + expo-modules-core@57.0.8(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(react@19.2.3): + dependencies: + '@expo/expo-modules-macros-plugin': 0.6.1 + expo-modules-jsi: 57.0.4(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2)) + invariant: 2.2.4 + react: 19.2.3 + react-native: 0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2) + + expo-modules-jsi@57.0.4(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2)): + dependencies: + react-native: 0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2) + + expo-server@57.0.1: {} + + expo@57.0.9(@babel/core@7.29.7(supports-color@10.2.2))(@expo/dom-webview@57.0.1)(react-dom@19.2.3(react@19.2.3))(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(react@19.2.3)(supports-color@10.2.2)(typescript@6.0.3): + dependencies: + '@babel/runtime': 7.29.7 + '@expo/cli': 57.0.11(db0d7a7e1f9ec962ef302cb8147809a2) + '@expo/config': 57.0.6(supports-color@10.2.2)(typescript@6.0.3) + '@expo/config-plugins': 57.0.6(supports-color@10.2.2)(typescript@6.0.3) + '@expo/devtools': 57.0.1(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(react@19.2.3) + '@expo/fingerprint': 0.20.6(supports-color@10.2.2) + '@expo/local-build-cache-provider': 57.0.5(supports-color@10.2.2)(typescript@6.0.3) + '@expo/log-box': 57.0.2(@expo/dom-webview@57.0.1)(expo@57.0.9)(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(react@19.2.3) + '@expo/metro': 56.0.0(supports-color@10.2.2) + '@expo/metro-config': 57.0.7(expo@57.0.9)(supports-color@10.2.2)(typescript@6.0.3) + '@ungap/structured-clone': 1.3.3 + babel-preset-expo: 57.0.5(@babel/core@7.29.7(supports-color@10.2.2))(@babel/runtime@7.29.7)(expo@57.0.9)(react-refresh@0.14.2)(supports-color@10.2.2) + expo-asset: 57.0.8(expo@57.0.9)(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(react@19.2.3)(supports-color@10.2.2)(typescript@6.0.3) + expo-constants: 57.0.8(expo@57.0.9)(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(supports-color@10.2.2) + expo-file-system: 57.0.1(expo@57.0.9)(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2)) + expo-font: 57.0.1(expo@57.0.9)(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(react@19.2.3) + expo-keep-awake: 57.0.1(expo@57.0.9)(react@19.2.3) + expo-modules-autolinking: 57.0.9(supports-color@10.2.2)(typescript@6.0.3) + expo-modules-core: 57.0.8(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(react@19.2.3) + pretty-format: 29.7.0 + react: 19.2.3 + react-native: 0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2) + react-refresh: 0.14.2 + whatwg-url-minimum: 0.1.2 + optionalDependencies: + '@expo/dom-webview': 57.0.1(expo@57.0.9)(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(react@19.2.3) + react-dom: 19.2.3(react@19.2.3) + transitivePeerDependencies: + - '@babel/core' + - bufferutil + - expo-router + - expo-widgets + - react-native-worklets + - react-server-dom-webpack + - supports-color + - typescript + - utf-8-validate + + exponential-backoff@3.1.3: {} + extendable-error@0.1.7: {} fast-deep-equal@3.1.3: {} @@ -8808,14 +13482,26 @@ snapshots: fast-uri@3.1.4: {} + fast-xml-parser@4.5.7: + dependencies: + strnum: 1.1.2 + fastq@1.20.1: dependencies: reusify: 1.1.0 + fb-dotslash@0.5.8: {} + + fb-watchman@2.0.2: + dependencies: + bser: 2.1.1 + fdir@6.5.0(picomatch@4.0.5): optionalDependencies: picomatch: 4.0.5 + fetch-nodeshim@0.4.10: {} + figures@3.2.0: dependencies: escape-string-regexp: 1.0.5 @@ -8824,6 +13510,18 @@ snapshots: dependencies: to-regex-range: 5.0.1 + finalhandler@1.1.2(supports-color@10.2.2): + dependencies: + debug: 2.6.9(supports-color@10.2.2) + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.3.0 + parseurl: 1.3.3 + statuses: 1.5.0 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + find-cache-directory@6.0.0: dependencies: common-path-prefix: 3.0.0 @@ -8836,12 +13534,21 @@ snapshots: locate-path: 5.0.0 path-exists: 4.0.0 + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + flat@5.0.2: {} + flow-enums-runtime@0.0.6: {} + follow-redirects@1.16.0(debug@4.4.3(supports-color@10.2.2)): optionalDependencies: debug: 4.4.3(supports-color@10.2.2) + fontfaceobserver@2.3.0: {} + form-data@4.0.5: dependencies: asynckit: 0.4.0 @@ -8858,6 +13565,8 @@ snapshots: hasown: 2.0.4 mime-types: 2.1.35 + fresh@0.5.2: {} + fs-constants@1.0.0: {} fs-extra@7.0.1: @@ -8904,10 +13613,20 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 + get-stream@6.0.1: {} + + getenv@2.0.0: {} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 + glob@13.0.6: + dependencies: + minimatch: 10.2.5 + minipass: 7.1.3 + path-scurry: 2.0.2 + globby@11.1.0: dependencies: array-union: 2.1.0 @@ -8921,6 +13640,8 @@ snapshots: graceful-fs@4.2.11: {} + has-flag@3.0.0: {} + has-flag@4.0.0: {} has-symbols@1.1.0: {} @@ -8937,6 +13658,24 @@ snapshots: dependencies: function-bind: 1.1.2 + hermes-compiler@250829098.0.16: {} + + hermes-estree@0.35.0: {} + + hermes-estree@0.36.0: {} + + hermes-parser@0.35.0: + dependencies: + hermes-estree: 0.35.0 + + hermes-parser@0.36.0: + dependencies: + hermes-estree: 0.36.0 + + hosted-git-info@7.0.2: + dependencies: + lru-cache: 10.4.3 + html-encoding-sniffer@6.0.0(@noble/hashes@2.2.0): dependencies: '@exodus/bytes': 1.15.1(@noble/hashes@2.2.0) @@ -8945,12 +13684,28 @@ snapshots: html-entities@2.3.3: {} + http-errors@2.0.1: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.2 + toidentifier: 1.0.1 + + https-proxy-agent@7.0.6(supports-color@10.2.2): + dependencies: + agent-base: 7.1.4 + debug: 4.4.3(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color + human-id@4.2.0: {} + human-signals@2.1.0: {} + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 - optional: true iconv-lite@0.6.3: dependencies: @@ -8966,10 +13721,19 @@ snapshots: ignore@7.0.5: {} + image-size@1.2.1: + dependencies: + queue: 6.0.2 + immer@11.1.15: {} immutable@5.1.9: {} + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + inherits@2.0.4: {} injection-js@2.6.1: @@ -8984,10 +13748,22 @@ snapshots: dependencies: binary-search-bounds: 2.0.5 + invariant@2.2.4: + dependencies: + loose-envify: 1.4.0 + + is-arrayish@0.2.1: {} + + is-core-module@2.16.2: + dependencies: + hasown: 2.0.4 + is-docker@2.2.1: {} is-extglob@2.1.1: {} + is-fullwidth-code-point@2.0.0: {} + is-fullwidth-code-point@3.0.0: {} is-glob@4.0.3: @@ -9006,6 +13782,8 @@ snapshots: dependencies: '@types/estree': 1.0.9 + is-stream@2.0.1: {} + is-subdir@1.2.0: dependencies: better-path-resolve: 1.0.0 @@ -9018,6 +13796,8 @@ snapshots: is-windows@1.0.2: {} + is-wsl@1.1.0: {} + is-wsl@2.2.0: dependencies: is-docker: 2.2.1 @@ -9026,6 +13806,43 @@ snapshots: isoformat@0.2.1: {} + jest-get-type@29.6.3: {} + + jest-util@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 25.9.5 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.2 + + jest-validate@29.7.0: + dependencies: + '@jest/types': 29.6.3 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 29.6.3 + leven: 3.1.0 + pretty-format: 29.7.0 + + jest-worker@29.7.0: + dependencies: + '@types/node': 25.9.5 + jest-util: 29.7.0 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + jimp-compact@0.16.1: {} + + joi@17.13.4: + dependencies: + '@hapi/hoek': 9.3.0 + '@hapi/topo': 5.1.0 + '@sideway/address': 4.1.5 + '@sideway/formula': 3.0.1 + '@sideway/pinpoint': 2.0.0 + js-tokens@4.0.0: {} js-yaml@3.15.0: @@ -9037,6 +13854,8 @@ snapshots: dependencies: argparse: 2.0.1 + jsc-safe-url@0.2.4: {} + jsdom@29.1.1(@noble/hashes@2.2.0): dependencies: '@asamuzakjp/css-color': 5.1.11 @@ -9065,6 +13884,8 @@ snapshots: jsesc@3.1.0: {} + json-parse-even-better-errors@2.3.1: {} + json-schema-traverse@1.0.0: {} json5@2.2.3: {} @@ -9077,8 +13898,17 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 + kleur@3.0.3: {} + kleur@4.1.5: {} + lan-network@0.2.1: {} + + launch-editor@2.14.1: + dependencies: + picocolors: 1.1.1 + shell-quote: 1.10.0 + less@4.8.1(supports-color@10.2.2): dependencies: copy-anything: 3.0.5 @@ -9094,6 +13924,15 @@ snapshots: transitivePeerDependencies: - supports-color + leven@3.1.0: {} + + lighthouse-logger@1.4.2(supports-color@10.2.2): + dependencies: + debug: 2.6.9(supports-color@10.2.2) + marky: 1.3.0 + transitivePeerDependencies: + - supports-color + lightningcss-android-arm64@1.33.0: optional: true @@ -9143,6 +13982,8 @@ snapshots: lightningcss-win32-arm64-msvc: 1.33.0 lightningcss-win32-x64-msvc: 1.33.0 + lines-and-columns@1.2.4: {} + lines-and-columns@2.0.3: {} lit-element@4.2.2: @@ -9167,11 +14008,23 @@ snapshots: dependencies: p-locate: 4.1.0 + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.debounce@4.0.8: {} + lodash.merge@4.6.2: optional: true lodash.startcase@4.4.0: {} + lodash.throttle@4.1.1: {} + + log-symbols@2.2.0: + dependencies: + chalk: 2.4.2 + log-symbols@4.1.0: dependencies: chalk: 4.1.2 @@ -9182,6 +14035,18 @@ snapshots: is-unicode-supported: 2.1.0 yoctocolors: 2.2.0 + logkitty@0.7.1: + dependencies: + ansi-fragments: 0.2.1 + dayjs: 1.11.21 + yargs: 15.4.1 + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + lru-cache@10.4.3: {} + lru-cache@11.5.2: {} lru-cache@5.1.1: @@ -9195,16 +14060,204 @@ snapshots: make-dir@5.1.0: optional: true + makeerror@1.0.12: + dependencies: + tmpl: 1.0.5 + + marky@1.3.0: {} + math-intrinsics@1.1.0: {} + mdn-data@2.0.14: {} + mdn-data@2.27.1: {} + media-typer@0.3.0: {} + + memoize-one@5.2.1: {} + merge-anything@5.1.7: dependencies: is-what: 4.1.16 + merge-stream@2.0.0: {} + merge2@1.4.1: {} + metro-babel-transformer@0.84.4(supports-color@10.2.2): + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + flow-enums-runtime: 0.0.6 + hermes-parser: 0.35.0 + metro-cache-key: 0.84.4 + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color + + metro-cache-key@0.84.4: + dependencies: + flow-enums-runtime: 0.0.6 + + metro-cache@0.84.4(supports-color@10.2.2): + dependencies: + exponential-backoff: 3.1.3 + flow-enums-runtime: 0.0.6 + https-proxy-agent: 7.0.6(supports-color@10.2.2) + metro-core: 0.84.4 + transitivePeerDependencies: + - supports-color + + metro-config@0.84.4(supports-color@10.2.2): + dependencies: + connect: 3.7.0(supports-color@10.2.2) + flow-enums-runtime: 0.0.6 + jest-validate: 29.7.0 + metro: 0.84.4(supports-color@10.2.2) + metro-cache: 0.84.4(supports-color@10.2.2) + metro-core: 0.84.4 + metro-runtime: 0.84.4 + yaml: 2.9.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + metro-core@0.84.4: + dependencies: + flow-enums-runtime: 0.0.6 + lodash.throttle: 4.1.1 + metro-resolver: 0.84.4 + + metro-file-map@0.84.4(supports-color@10.2.2): + dependencies: + debug: 4.4.3(supports-color@10.2.2) + fb-watchman: 2.0.2 + flow-enums-runtime: 0.0.6 + graceful-fs: 4.2.11 + invariant: 2.2.4 + jest-worker: 29.7.0 + micromatch: 4.0.8 + nullthrows: 1.1.1 + walker: 1.0.8 + transitivePeerDependencies: + - supports-color + + metro-minify-terser@0.84.4: + dependencies: + flow-enums-runtime: 0.0.6 + terser: 5.49.0 + + metro-resolver@0.84.4: + dependencies: + flow-enums-runtime: 0.0.6 + + metro-runtime@0.84.4: + dependencies: + '@babel/runtime': 7.29.7 + flow-enums-runtime: 0.0.6 + + metro-source-map@0.84.4(supports-color@10.2.2): + dependencies: + '@babel/traverse': 7.29.7(supports-color@10.2.2) + '@babel/types': 7.29.7 + flow-enums-runtime: 0.0.6 + invariant: 2.2.4 + metro-symbolicate: 0.84.4(supports-color@10.2.2) + nullthrows: 1.1.1 + ob1: 0.84.4 + source-map: 0.5.7 + vlq: 1.0.1 + transitivePeerDependencies: + - supports-color + + metro-symbolicate@0.84.4(supports-color@10.2.2): + dependencies: + flow-enums-runtime: 0.0.6 + invariant: 2.2.4 + metro-source-map: 0.84.4(supports-color@10.2.2) + nullthrows: 1.1.1 + source-map: 0.5.7 + vlq: 1.0.1 + transitivePeerDependencies: + - supports-color + + metro-transform-plugins@0.84.4(supports-color@10.2.2): + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/generator': 7.29.7 + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) + flow-enums-runtime: 0.0.6 + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color + + metro-transform-worker@0.84.4(supports-color@10.2.2): + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/generator': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 + flow-enums-runtime: 0.0.6 + metro: 0.84.4(supports-color@10.2.2) + metro-babel-transformer: 0.84.4(supports-color@10.2.2) + metro-cache: 0.84.4(supports-color@10.2.2) + metro-cache-key: 0.84.4 + metro-minify-terser: 0.84.4 + metro-source-map: 0.84.4(supports-color@10.2.2) + metro-transform-plugins: 0.84.4(supports-color@10.2.2) + nullthrows: 1.1.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + metro@0.84.4(supports-color@10.2.2): + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/generator': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) + '@babel/types': 7.29.7 + accepts: 2.0.0 + ci-info: 2.0.0 + connect: 3.7.0(supports-color@10.2.2) + debug: 4.4.3(supports-color@10.2.2) + error-stack-parser: 2.1.4 + flow-enums-runtime: 0.0.6 + graceful-fs: 4.2.11 + hermes-parser: 0.35.0 + image-size: 1.2.1 + invariant: 2.2.4 + jest-worker: 29.7.0 + jsc-safe-url: 0.2.4 + lodash.throttle: 4.1.1 + metro-babel-transformer: 0.84.4(supports-color@10.2.2) + metro-cache: 0.84.4(supports-color@10.2.2) + metro-cache-key: 0.84.4 + metro-config: 0.84.4(supports-color@10.2.2) + metro-core: 0.84.4 + metro-file-map: 0.84.4(supports-color@10.2.2) + metro-resolver: 0.84.4 + metro-runtime: 0.84.4 + metro-source-map: 0.84.4(supports-color@10.2.2) + metro-symbolicate: 0.84.4(supports-color@10.2.2) + metro-transform-plugins: 0.84.4(supports-color@10.2.2) + metro-transform-worker: 0.84.4(supports-color@10.2.2) + mime-types: 3.0.2 + nullthrows: 1.1.1 + serialize-error: 2.1.0 + source-map: 0.5.7 + throat: 5.0.0 + ws: 7.5.13 + yargs: 17.7.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + micromatch@4.0.8: dependencies: braces: 3.0.3 @@ -9212,12 +14265,21 @@ snapshots: mime-db@1.52.0: {} + mime-db@1.54.0: {} + mime-types@2.1.35: dependencies: mime-db: 1.52.0 - mime@1.6.0: - optional: true + mime-types@3.0.2: + dependencies: + mime-db: 1.54.0 + + mime@1.6.0: {} + + mime@2.6.0: {} + + mimic-fn@1.2.0: {} mimic-fn@2.1.0: {} @@ -9241,13 +14303,18 @@ snapshots: minimist@1.2.8: {} + minipass@7.1.3: {} + + mkdirp@1.0.4: {} + mri@1.2.0: {} - ms@2.0.0: - optional: true + ms@2.0.0: {} ms@2.1.3: {} + multitars@1.0.0: {} + nanoid@3.3.16: {} needle@2.9.1(supports-color@10.2.2): @@ -9265,6 +14332,12 @@ snapshots: sax: 1.6.1 optional: true + negotiator@0.6.3: {} + + negotiator@0.6.4: {} + + negotiator@1.0.0: {} + ng-packagr@22.0.2(@angular/compiler-cli@22.0.8(@angular/compiler@22.0.8)(supports-color@10.2.2)(typescript@6.0.3))(supports-color@10.2.2)(tslib@2.8.1)(typescript@6.0.3): dependencies: '@ampproject/remapping': 2.3.0 @@ -9295,6 +14368,8 @@ snapshots: transitivePeerDependencies: - supports-color + nocache@3.0.4: {} + node-addon-api@7.1.1: optional: true @@ -9302,12 +14377,31 @@ snapshots: dependencies: whatwg-url: 5.0.0 + node-forge@1.4.0: {} + + node-int64@0.4.0: {} + node-releases@2.0.51: {} + node-stream-zip@1.16.0: {} + + npm-package-arg@11.0.3: + dependencies: + hosted-git-info: 7.0.2 + proc-log: 4.2.0 + semver: 7.8.5 + validate-npm-package-name: 5.0.1 + npm-run-path@4.0.1: dependencies: path-key: 3.1.1 + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + nullthrows@1.1.1: {} + nx@22.7.5(debug@4.4.3(supports-color@10.2.2)): dependencies: '@emnapi/core': 1.4.5 @@ -9434,9 +14528,15 @@ snapshots: transitivePeerDependencies: - debug + ob1@0.84.4: + dependencies: + flow-enums-runtime: 0.0.6 + + object-inspect@1.13.4: {} + obug@2.1.4: {} - octane@0.1.13(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0)): + octane@0.1.13(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0)): dependencies: '@tsrx/core': 0.1.48 '@types/react': 19.2.17 @@ -9445,11 +14545,11 @@ snapshots: optionalDependencies: react: 19.2.3 react-dom: 19.2.3(react@19.2.3) - vite: 8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0) + vite: 8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0) transitivePeerDependencies: - '@typescript-eslint/types' - octane@0.1.13(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(vite@8.1.5(@types/node@25.9.5)(esbuild@0.28.1)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0)): + octane@0.1.13(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(vite@8.1.5(@types/node@25.9.5)(esbuild@0.28.1)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0)): dependencies: '@tsrx/core': 0.1.48 '@types/react': 19.2.17 @@ -9458,14 +14558,28 @@ snapshots: optionalDependencies: react: 19.2.3 react-dom: 19.2.3(react@19.2.3) - vite: 8.1.5(@types/node@25.9.5)(esbuild@0.28.1)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0) + vite: 8.1.5(@types/node@25.9.5)(esbuild@0.28.1)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0) transitivePeerDependencies: - '@typescript-eslint/types' + on-finished@2.3.0: + dependencies: + ee-first: 1.1.1 + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + + on-headers@1.1.0: {} + once@1.4.0: dependencies: wrappy: 1.0.2 + onetime@2.0.1: + dependencies: + mimic-fn: 1.2.0 + onetime@5.1.2: dependencies: mimic-fn: 2.1.0 @@ -9474,12 +14588,30 @@ snapshots: dependencies: mimic-function: 5.0.1 + open@6.4.0: + dependencies: + is-wsl: 1.1.0 + + open@7.4.2: + dependencies: + is-docker: 2.2.1 + is-wsl: 2.2.0 + open@8.4.2: dependencies: define-lazy-prop: 2.0.0 is-docker: 2.2.1 is-wsl: 2.2.0 + ora@3.4.0: + dependencies: + chalk: 2.4.2 + cli-cursor: 2.1.0 + cli-spinners: 2.6.1 + log-symbols: 2.2.0 + strip-ansi: 5.2.0 + wcwidth: 1.0.1 + ora@5.3.0: dependencies: bl: 4.1.0 @@ -9491,6 +14623,18 @@ snapshots: strip-ansi: 6.0.1 wcwidth: 1.0.1 + ora@5.4.1: + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.6.1 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + ora@9.4.1: dependencies: chalk: 5.6.2 @@ -9512,10 +14656,18 @@ snapshots: dependencies: p-try: 2.2.0 + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + p-locate@4.1.0: dependencies: p-limit: 2.3.0 + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + p-map@2.1.0: {} p-try@2.2.0: {} @@ -9524,8 +14676,23 @@ snapshots: dependencies: quansync: 0.2.11 + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.29.7 + error-ex: 1.3.4 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + parse-node-version@1.0.1: {} + parse-png@2.1.0: + dependencies: + pngjs: 3.4.0 + parse5@7.3.0: dependencies: entities: 6.0.1 @@ -9534,10 +14701,19 @@ snapshots: dependencies: entities: 8.0.0 + parseurl@1.3.3: {} + path-exists@4.0.0: {} path-key@3.1.1: {} + path-parse@1.0.7: {} + + path-scurry@2.0.2: + dependencies: + lru-cache: 11.5.2 + minipass: 7.1.3 + path-to-regexp@6.3.0: {} path-type@4.0.0: {} @@ -9568,6 +14744,14 @@ snapshots: optionalDependencies: fsevents: 2.3.2 + plist@3.1.1: + dependencies: + '@xmldom/xmldom': 0.9.10 + base64-js: 1.5.1 + xmlbuilder: 15.1.1 + + pngjs@3.4.0: {} + postcss@8.5.23: dependencies: nanoid: 3.3.16 @@ -9586,6 +14770,12 @@ snapshots: prettier@3.9.6: {} + pretty-format@29.7.0: + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.1 + probe-image-size@7.3.0(supports-color@10.2.2): dependencies: lodash.merge: 4.6.2 @@ -9595,6 +14785,19 @@ snapshots: - supports-color optional: true + proc-log@4.2.0: {} + + progress@2.0.3: {} + + promise@8.3.0: + dependencies: + asap: 2.0.6 + + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + proxy-from-env@2.1.0: {} prr@1.0.1: @@ -9602,17 +14805,105 @@ snapshots: punycode@2.3.1: {} + qs@6.15.3: + dependencies: + es-define-property: 1.0.1 + side-channel: 1.1.1 + quansync@0.2.11: {} queue-microtask@1.2.3: {} + queue@6.0.2: + dependencies: + inherits: 2.0.4 + + range-parser@1.2.1: {} + + raw-body@2.5.3: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.1 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + + react-devtools-core@6.1.5: + dependencies: + shell-quote: 1.10.0 + ws: 7.5.13 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + react-dom@19.2.3(react@19.2.3): dependencies: react: 19.2.3 scheduler: 0.27.0 + react-is@18.3.1: {} + react-is@19.2.8: {} + react-native-svg@15.15.4(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(react@19.2.3): + dependencies: + css-select: 5.2.2 + css-tree: 1.1.3 + react: 19.2.3 + react-native: 0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2) + warn-once: 0.1.1 + + react-native-svg@15.15.5(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(react@19.2.3): + dependencies: + css-select: 5.2.2 + css-tree: 1.1.3 + react: 19.2.3 + react-native: 0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2) + + react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2): + dependencies: + '@react-native/assets-registry': 0.86.2 + '@react-native/codegen': 0.86.2(@babel/core@7.29.7(supports-color@10.2.2)) + '@react-native/community-cli-plugin': 0.86.2(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(supports-color@10.2.2) + '@react-native/gradle-plugin': 0.86.2 + '@react-native/js-polyfills': 0.86.2 + '@react-native/normalize-colors': 0.86.2 + '@react-native/virtualized-lists': 0.86.2(@types/react@19.2.17)(react-native@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(@react-native-community/cli@20.1.0(supports-color@10.2.2)(typescript@6.0.3))(@react-native/metro-config@0.86.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2))(@types/react@19.2.17)(react@19.2.3)(supports-color@10.2.2))(react@19.2.3) + abort-controller: 3.0.0 + anser: 1.4.10 + ansi-regex: 5.0.1 + babel-plugin-syntax-hermes-parser: 0.36.0 + base64-js: 1.5.1 + commander: 12.1.0 + flow-enums-runtime: 0.0.6 + hermes-compiler: 250829098.0.16 + invariant: 2.2.4 + memoize-one: 5.2.1 + metro-runtime: 0.84.4 + metro-source-map: 0.84.4(supports-color@10.2.2) + nullthrows: 1.1.1 + pretty-format: 29.7.0 + promise: 8.3.0 + react: 19.2.3 + react-devtools-core: 6.1.5 + react-refresh: 0.14.2 + regenerator-runtime: 0.13.11 + scheduler: 0.27.0 + semver: 7.8.5 + stacktrace-parser: 0.1.11 + tinyglobby: 0.2.17 + whatwg-fetch: 3.6.20 + ws: 7.5.13 + yargs: 17.7.2 + optionalDependencies: + '@types/react': 19.2.17 + transitivePeerDependencies: + - '@babel/core' + - '@react-native-community/cli' + - '@react-native/metro-config' + - bufferutil + - supports-color + - utf-8-validate + react-redux@9.3.0(@types/react@19.2.17)(react@19.2.3)(redux@5.0.1): dependencies: '@types/use-sync-external-store': 0.0.6 @@ -9622,6 +14913,8 @@ snapshots: '@types/react': 19.2.17 redux: 5.0.1 + react-refresh@0.14.2: {} + react@19.2.3: {} read-yaml-file@1.1.0: @@ -9669,16 +14962,57 @@ snapshots: reflect-metadata@0.2.2: {} + regenerate-unicode-properties@10.2.2: + dependencies: + regenerate: 1.4.2 + + regenerate@1.4.2: {} + + regenerator-runtime@0.13.11: {} + + regexpu-core@6.4.0: + dependencies: + regenerate: 1.4.2 + regenerate-unicode-properties: 10.2.2 + regjsgen: 0.8.0 + regjsparser: 0.13.2 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.2.1 + + regjsgen@0.8.0: {} + + regjsparser@0.13.2: + dependencies: + jsesc: 3.1.0 + require-directory@2.1.1: {} require-from-string@2.0.2: {} + require-main-filename@2.0.0: {} + reselect@5.2.0: {} + resolve-from@4.0.0: {} + resolve-from@5.0.0: {} + resolve-workspace-root@2.0.1: {} + resolve.exports@2.0.3: {} + resolve@1.22.12: + dependencies: + es-errors: 1.3.0 + is-core-module: 2.16.2 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + restore-cursor@2.0.0: + dependencies: + onetime: 2.0.1 + signal-exit: 3.0.7 + restore-cursor@3.1.0: dependencies: onetime: 5.1.2 @@ -9782,8 +15116,7 @@ snapshots: optionalDependencies: '@parcel/watcher': 2.6.0 - sax@1.6.1: - optional: true + sax@1.6.1: {} saxes@6.0.0: dependencies: @@ -9799,12 +15132,45 @@ snapshots: semver@7.8.5: {} + send@0.19.2(supports-color@10.2.2): + dependencies: + debug: 2.6.9(supports-color@10.2.2) + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.1 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color + + serialize-error@2.1.0: {} + seroval-plugins@1.5.6(seroval@1.5.6): dependencies: seroval: 1.5.6 seroval@1.5.6: {} + serve-static@1.16.3(supports-color@10.2.2): + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.19.2(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color + + set-blocking@2.0.0: {} + + setprototypeof@1.2.0: {} + sharp@0.34.5: dependencies: '@img/colour': 1.1.0 @@ -9842,14 +15208,60 @@ snapshots: shebang-regex@3.0.0: {} + shell-quote@1.10.0: {} + + side-channel-list@1.0.1: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.1: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.1 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + siginfo@2.0.0: {} signal-exit@3.0.7: {} signal-exit@4.1.0: {} + simple-plist@1.3.1: + dependencies: + bplist-creator: 0.1.0 + bplist-parser: 0.3.1 + plist: 3.1.1 + + sisteransi@1.0.5: {} + slash@3.0.0: {} + slice-ansi@2.1.0: + dependencies: + ansi-styles: 3.2.1 + astral-regex: 1.0.0 + is-fullwidth-code-point: 2.0.0 + + slugify@1.6.9: {} + smol-toml@1.6.1: {} solid-js@1.9.14: @@ -9869,8 +15281,14 @@ snapshots: source-map-js@1.2.1: {} - source-map@0.6.1: - optional: true + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.5.7: {} + + source-map@0.6.1: {} spawndamnit@3.0.1: dependencies: @@ -9881,10 +15299,22 @@ snapshots: stackback@0.0.2: {} + stackframe@1.3.4: {} + + stacktrace-parser@0.1.11: + dependencies: + type-fest: 0.7.1 + + statuses@1.5.0: {} + + statuses@2.0.2: {} + std-env@4.2.0: {} stdin-discarder@0.3.2: {} + stream-buffers@2.2.0: {} + stream-parser@0.3.1(supports-color@10.2.2): dependencies: debug: 2.6.9(supports-color@10.2.2) @@ -9913,6 +15343,10 @@ snapshots: dependencies: safe-buffer: 5.2.1 + strip-ansi@5.2.0: + dependencies: + ansi-regex: 4.1.1 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -9923,12 +15357,33 @@ snapshots: strip-bom@3.0.0: {} + strip-final-newline@2.0.0: {} + + strnum@1.1.2: {} + + structured-headers@0.4.1: {} + supports-color@10.2.2: {} + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + supports-color@7.2.0: dependencies: has-flag: 4.0.0 + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + supports-hyperlinks@2.3.0: + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + + supports-preserve-symlinks-flag@1.0.0: {} + svelte-check@4.7.4(picomatch@4.0.5)(svelte@5.56.8)(typescript@6.0.3): dependencies: '@jridgewell/trace-mapping': 0.3.31 @@ -9982,6 +15437,20 @@ snapshots: term-size@2.2.1: {} + terminal-link@2.1.1: + dependencies: + ansi-escapes: 4.3.2 + supports-hyperlinks: 2.3.0 + + terser@5.49.0: + dependencies: + '@jridgewell/source-map': 0.3.11 + acorn: 8.17.0 + commander: 2.20.3 + source-map-support: 0.5.21 + + throat@5.0.0: {} + tiny-invariant@1.3.3: {} tinybench@2.9.0: {} @@ -10003,14 +15472,20 @@ snapshots: tmp@0.2.6: {} + tmpl@1.0.5: {} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 + toidentifier@1.0.1: {} + topojson-client@3.1.0: dependencies: commander: 2.20.3 + toqr@0.1.1: {} + tough-cookie@6.0.2: dependencies: tldts: 7.4.9 @@ -10033,6 +15508,15 @@ snapshots: tslib@2.8.1: {} + type-fest@0.21.3: {} + + type-fest@0.7.1: {} + + type-is@1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + typescript@6.0.3: {} undici-types@7.24.6: {} @@ -10045,8 +15529,21 @@ snapshots: dependencies: pathe: 2.0.3 + unicode-canonical-property-names-ecmascript@2.0.1: {} + + unicode-match-property-ecmascript@2.0.0: + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.1 + unicode-property-aliases-ecmascript: 2.2.0 + + unicode-match-property-value-ecmascript@2.2.1: {} + + unicode-property-aliases-ecmascript@2.2.0: {} + universalify@0.1.2: {} + unpipe@1.0.0: {} + update-browserslist-db@1.2.3(browserslist@4.28.7): dependencies: browserslist: 4.28.7 @@ -10061,6 +15558,14 @@ snapshots: util-deprecate@1.0.2: {} + utils-merge@1.0.1: {} + + uuid@7.0.3: {} + + validate-npm-package-name@5.0.1: {} + + vary@1.1.2: {} + victory-vendor@37.3.6: dependencies: '@types/d3-array': 3.2.2 @@ -10078,7 +15583,7 @@ snapshots: d3-time: 3.1.0 d3-timer: 3.0.1 - vite-plugin-solid@2.11.14(solid-js@1.9.14)(supports-color@10.2.2)(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0)): + vite-plugin-solid@2.11.14(solid-js@1.9.14)(supports-color@10.2.2)(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0)): dependencies: '@babel/core': 7.29.7(supports-color@10.2.2) '@types/babel__core': 7.20.5 @@ -10086,12 +15591,12 @@ snapshots: merge-anything: 5.1.7 solid-js: 1.9.14 solid-refresh: 0.6.3(solid-js@1.9.14)(supports-color@10.2.2) - vite: 8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0) - vitefu: 1.1.3(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0)) + vite: 8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0) + vitefu: 1.1.3(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0)) transitivePeerDependencies: - supports-color - vite-plugin-solid@2.11.14(solid-js@1.9.14)(supports-color@10.2.2)(vite@8.1.5(@types/node@25.9.5)(esbuild@0.28.1)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0)): + vite-plugin-solid@2.11.14(solid-js@1.9.14)(supports-color@10.2.2)(vite@8.1.5(@types/node@25.9.5)(esbuild@0.28.1)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0)): dependencies: '@babel/core': 7.29.7(supports-color@10.2.2) '@types/babel__core': 7.20.5 @@ -10099,12 +15604,12 @@ snapshots: merge-anything: 5.1.7 solid-js: 1.9.14 solid-refresh: 0.6.3(solid-js@1.9.14)(supports-color@10.2.2) - vite: 8.1.5(@types/node@25.9.5)(esbuild@0.28.1)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0) - vitefu: 1.1.3(vite@8.1.5(@types/node@25.9.5)(esbuild@0.28.1)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0)) + vite: 8.1.5(@types/node@25.9.5)(esbuild@0.28.1)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0) + vitefu: 1.1.3(vite@8.1.5(@types/node@25.9.5)(esbuild@0.28.1)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0)) transitivePeerDependencies: - supports-color - vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0): + vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0): dependencies: lightningcss: 1.33.0 picomatch: 4.0.5 @@ -10117,9 +15622,10 @@ snapshots: fsevents: 2.3.3 less: 4.8.1(supports-color@10.2.2) sass: 1.102.0 + terser: 5.49.0 yaml: 2.9.0 - vite@8.1.5(@types/node@25.9.5)(esbuild@0.28.1)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0): + vite@8.1.5(@types/node@25.9.5)(esbuild@0.28.1)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0): dependencies: lightningcss: 1.33.0 picomatch: 4.0.5 @@ -10132,20 +15638,21 @@ snapshots: fsevents: 2.3.3 less: 4.8.1(supports-color@10.2.2) sass: 1.102.0 + terser: 5.49.0 yaml: 2.9.0 - vitefu@1.1.3(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0)): + vitefu@1.1.3(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0)): optionalDependencies: - vite: 8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0) + vite: 8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0) - vitefu@1.1.3(vite@8.1.5(@types/node@25.9.5)(esbuild@0.28.1)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0)): + vitefu@1.1.3(vite@8.1.5(@types/node@25.9.5)(esbuild@0.28.1)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0)): optionalDependencies: - vite: 8.1.5(@types/node@25.9.5)(esbuild@0.28.1)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0) + vite: 8.1.5(@types/node@25.9.5)(esbuild@0.28.1)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0) - vitest@4.1.10(@types/node@25.9.5)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0)): + vitest@4.1.10(@types/node@25.9.5)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0)): dependencies: '@vitest/expect': 4.1.10 - '@vitest/mocker': 4.1.10(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0)) + '@vitest/mocker': 4.1.10(vite@8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0)) '@vitest/pretty-format': 4.1.10 '@vitest/runner': 4.1.10 '@vitest/snapshot': 4.1.10 @@ -10162,7 +15669,7 @@ snapshots: tinyexec: 1.2.4 tinyglobby: 0.2.17 tinyrainbow: 3.1.0 - vite: 8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(yaml@2.9.0) + vite: 8.1.5(@types/node@25.9.5)(esbuild@0.27.7)(less@4.8.1(supports-color@10.2.2))(sass@1.102.0)(terser@5.49.0)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 25.9.5 @@ -10170,6 +15677,8 @@ snapshots: transitivePeerDependencies: - msw + vlq@1.0.1: {} + vue@3.5.40(typescript@6.0.3): dependencies: '@vue/compiler-dom': 3.5.40 @@ -10184,6 +15693,12 @@ snapshots: dependencies: xml-name-validator: 5.0.0 + walker@1.0.8: + dependencies: + makeerror: 1.0.12 + + warn-once@0.1.1: {} + wcwidth@1.0.1: dependencies: defaults: 1.0.4 @@ -10192,8 +15707,12 @@ snapshots: webidl-conversions@8.0.1: {} + whatwg-fetch@3.6.20: {} + whatwg-mimetype@5.0.0: {} + whatwg-url-minimum@0.1.2: {} + whatwg-url@16.0.1(@noble/hashes@2.2.0): dependencies: '@exodus/bytes': 1.15.1(@noble/hashes@2.2.0) @@ -10207,6 +15726,8 @@ snapshots: tr46: 0.0.3 webidl-conversions: 3.0.1 + which-module@2.0.1: {} + which@2.0.2: dependencies: isexe: 2.0.0 @@ -10242,6 +15763,12 @@ snapshots: - bufferutil - utf-8-validate + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 @@ -10256,22 +15783,63 @@ snapshots: wrappy@1.0.2: {} + ws@6.2.6: + dependencies: + async-limiter: 1.0.1 + + ws@7.5.13: {} + ws@8.21.0: {} + xcode@3.0.1: + dependencies: + simple-plist: 1.3.1 + uuid: 7.0.3 + xml-name-validator@5.0.0: {} + xml2js@0.6.0: + dependencies: + sax: 1.6.1 + xmlbuilder: 11.0.1 + + xmlbuilder@11.0.1: {} + + xmlbuilder@15.1.1: {} + xmlchars@2.2.0: {} + y18n@4.0.3: {} + y18n@5.0.8: {} yallist@3.1.1: {} yaml@2.9.0: {} + yargs-parser@18.1.3: + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + yargs-parser@21.1.1: {} yargs-parser@22.0.0: {} + yargs@15.4.1: + dependencies: + cliui: 6.0.0 + decamelize: 1.2.0 + find-up: 4.1.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 4.2.3 + which-module: 2.0.1 + y18n: 4.0.3 + yargs-parser: 18.1.3 + yargs@17.7.2: dependencies: cliui: 8.0.1 @@ -10291,6 +15859,8 @@ snapshots: y18n: 5.0.8 yargs-parser: 22.0.0 + yocto-queue@0.1.0: {} + yoctocolors@2.2.0: {} youch-core@0.3.3: @@ -10308,6 +15878,8 @@ snapshots: zimmerframe@1.1.4: {} + zod@3.25.76: {} + zrender@6.1.0: dependencies: tslib: 2.3.0 diff --git a/scripts/check-packed-consumers.mjs b/scripts/check-packed-consumers.mjs index 62c084f3..7a4fc5e4 100644 --- a/scripts/check-packed-consumers.mjs +++ b/scripts/check-packed-consumers.mjs @@ -19,6 +19,7 @@ import { compile as compileOctane } from 'octane/compiler' import { build, transform } from 'esbuild' import ts from 'typescript' import { validatePackedMarkdownLinks } from './packed-markdown-links.mjs' +import { verifyPackedReactNativeConsumers } from './packed-react-native-consumers.mjs' const execFileAsync = promisify(execFile) const root = resolve(import.meta.dirname, '..') @@ -31,12 +32,14 @@ const buildWorkspace = resolve(temporaryRoot, 'build') const tarballDirectory = artifactDirectory ?? resolve(temporaryRoot, 'tarballs') const fixtureDirectory = resolve(temporaryRoot, 'consumer') -const packages = [ +const webPackages = [ packageConfig('charts-scales', 'scale'), packageConfig('charts-core', 'core'), packageConfig('react-charts', 'react'), packageConfig('octane-charts', 'octane'), ] +const nativePackage = packageConfig('react-native-charts', 'react-native') +const packages = [...webPackages, nativePackage] try { await mkdir(resolve(buildWorkspace, 'packages'), { recursive: true }) @@ -72,15 +75,25 @@ try { await verifyEsmRuntime() await verifyDeclarations() const bundles = await verifyProductionBundles() + const nativeBundles = await verifyPackedReactNativeConsumers({ + repositoryRoot: root, + temporaryRoot, + tarballs, + }) console.log('Packed exports, declarations, and runtime gate passed.') - console.log('| Consumer | Minified | Gzip |') + console.log('| Consumer | Bytes | Gzip |') console.log('| --- | ---: | ---: |') for (const bundle of bundles) { console.log( `| ${bundle.label} | ${formatBytes(bundle.bytes)} | ${formatBytes(bundle.gzip)} |`, ) } + for (const bundle of nativeBundles) { + console.log( + `| ${bundle.label} | ${formatBytes(bundle.bytes)} | ${formatBytes(bundle.gzip)} |`, + ) + } } finally { await rm(temporaryRoot, { recursive: true, force: true }) } @@ -158,7 +171,7 @@ function validateManifest(packageInfo) { published.types?.startsWith('./dist/'), `${manifest.name} published export ${key} requires declarations`, ) - for (const condition of ['import', 'browser', 'node']) { + for (const condition of ['import', 'browser', 'node', 'react-native']) { if (published[condition] === undefined) continue assert.ok( published[condition].startsWith('./dist/'), @@ -207,7 +220,10 @@ async function buildRuntime(packageInfo) { platform: 'neutral', target: 'es2022', jsx: 'automatic', - jsxImportSource: packageInfo.kind === 'react' ? 'react' : undefined, + jsxImportSource: + packageInfo.kind === 'react' || packageInfo.kind === 'react-native' + ? 'react' + : undefined, legalComments: 'none', logLevel: 'silent', }) @@ -288,19 +304,23 @@ async function buildDeclarations(packageInfo) { ), ), ] + const isReactNative = packageInfo.kind === 'react-native' const options = { allowArbitraryExtensions: true, declaration: true, declarationMap: false, emitDeclarationOnly: true, jsx: ts.JsxEmit.ReactJSX, - lib: ['lib.es2022.d.ts', 'lib.dom.d.ts', 'lib.dom.iterable.d.ts'], + customConditions: isReactNative ? ['react-native'] : undefined, + lib: isReactNative + ? ['lib.es2022.d.ts'] + : ['lib.es2022.d.ts', 'lib.dom.d.ts', 'lib.dom.iterable.d.ts'], module: ts.ModuleKind.ESNext, moduleResolution: ts.ModuleResolutionKind.Bundler, noEmitOnError: true, outDir: outputRoot, rootDir: sourceRoot, - skipLibCheck: false, + skipLibCheck: isReactNative, strict: true, target: ts.ScriptTarget.ES2022, verbatimModuleSyntax: true, @@ -500,7 +520,7 @@ function publishedSpecifiers(packageInfo) { } async function verifyInstalledManifests() { - for (const packageInfo of packages) { + for (const packageInfo of webPackages) { const installedPath = resolve( fixtureDirectory, 'node_modules', @@ -530,7 +550,7 @@ async function verifyInstalledManifests() { } async function verifyEsmRuntime() { - const publishedSubpaths = packages.flatMap(publishedSpecifiers) + const publishedSubpaths = webPackages.flatMap(publishedSpecifiers) const source = ` import assert from 'node:assert/strict' import { realpathSync } from 'node:fs' @@ -669,7 +689,7 @@ async function verifyEsmRuntime() { } async function verifyDeclarations() { - const namespaceImports = packages + const namespaceImports = webPackages .flatMap(publishedSpecifiers) .map( (specifier, index) => diff --git a/scripts/check-react-native-types.mjs b/scripts/check-react-native-types.mjs new file mode 100644 index 00000000..fa55feda --- /dev/null +++ b/scripts/check-react-native-types.mjs @@ -0,0 +1,61 @@ +import { spawnSync } from 'node:child_process' +import { resolve } from 'node:path' + +const root = resolve(import.meta.dirname, '..') +const tsc = resolve(root, 'node_modules/typescript/bin/tsc') +const passingConfigs = [ + 'packages/react-native-charts/tsconfig.json', + 'examples/charts-react-native/tsconfig.json', + 'examples/charts-expo/tsconfig.json', +] + +for (const config of passingConfigs) { + const result = runTypeScript(config) + if (result.status !== 0) { + process.stderr.write(result.output) + throw new Error(`TypeScript failed for ${config}`) + } +} + +const strictConfig = 'examples/charts-react-native/tsconfig.strict.json' +const strict = runTypeScript(strictConfig) +if (strict.status === 0) { + console.log('React Native source and strict consumer typechecks passed.') + process.exit(0) +} + +const diagnostics = strict.output + .split(/\r?\n/) + .map((line) => line.trim()) + .filter(Boolean) +const expected = diagnostics.every( + (line) => + line.includes('/@types/d3-array/') && + line.includes("Cannot find name 'ImageData'."), +) + +if (!expected || diagnostics.length !== 2) { + process.stderr.write(strict.output) + throw new Error( + 'The strict React Native consumer has diagnostics beyond the known @types/d3-array ImageData boundary.', + ) +} + +console.log( + 'React Native source and consumer typechecks passed; strict dependency checking reached only the two known @types/d3-array ImageData diagnostics.', +) + +function runTypeScript(config) { + const result = spawnSync( + process.execPath, + [tsc, '--noEmit', '-p', config, '--pretty', 'false'], + { + cwd: root, + encoding: 'utf8', + }, + ) + return { + status: result.status, + output: `${result.stdout ?? ''}${result.stderr ?? ''}`, + } +} diff --git a/scripts/docs-contract.mjs b/scripts/docs-contract.mjs index d493bf88..0f5d1d97 100644 --- a/scripts/docs-contract.mjs +++ b/scripts/docs-contract.mjs @@ -43,6 +43,7 @@ const publicEntryPaths = [ 'packages/charts-scales/README.md', 'packages/preact-charts/README.md', 'packages/react-charts/README.md', + 'packages/react-native-charts/README.md', 'packages/vue-charts/README.md', 'packages/solid-charts/README.md', 'packages/svelte-charts/README.md', @@ -480,6 +481,7 @@ async function validateDocumentedTanStackImports( ['packages/charts-scales', '@tanstack/charts-scales'], ['packages/preact-charts', '@tanstack/preact-charts'], ['packages/react-charts', '@tanstack/react-charts'], + ['packages/react-native-charts', '@tanstack/react-native-charts'], ['packages/vue-charts', '@tanstack/vue-charts'], ['packages/solid-charts', '@tanstack/solid-charts'], ['packages/svelte-charts', '@tanstack/svelte-charts'], diff --git a/scripts/measure-bundles.mjs b/scripts/measure-bundles.mjs index aa042d31..8c9202be 100644 --- a/scripts/measure-bundles.mjs +++ b/scripts/measure-bundles.mjs @@ -27,6 +27,29 @@ const rendererBoundaryModules = { 'packages/charts-core/src/svg.ts', 'packages/react-charts/src/Chart.tsx', ], + native: [ + 'packages/react-native-charts/src/Chart.tsx', + 'packages/react-native-charts/src/FocusOverlay.tsx', + 'packages/react-native-charts/src/SvgScene.tsx', + 'packages/react-native-charts/src/Tooltip.tsx', + ], + browser: [ + 'packages/charts-core/src/adapter.ts', + 'packages/charts-core/src/adapter-renderer.ts', + 'packages/charts-core/src/canvas.ts', + 'packages/charts-core/src/dom.ts', + 'packages/charts-core/src/dom-text.ts', + 'packages/charts-core/src/export.ts', + 'packages/charts-core/src/reconcile.ts', + 'packages/charts-core/src/renderer.ts', + 'packages/charts-core/src/svg-renderer.ts', + 'packages/charts-core/src/svg-resources.ts', + 'packages/charts-core/src/svg-surface.ts', + 'packages/charts-core/src/svg.ts', + 'packages/react-charts/src/CanvasChart.tsx', + 'packages/react-charts/src/Chart.tsx', + 'packages/react-charts/src/RendererChart.tsx', + ], } const retainedInputGroups = { compactLinear: [/(?:^|\/)packages\/charts-scales\/src\/linear\.ts$/u], @@ -76,6 +99,10 @@ const retainedInputGroups = { transformReduce: [ /(?:^|\/)packages\/charts-core\/src\/transform-reduce\.ts$/u, ], + nativeTooltip: [ + /(?:^|\/)packages\/react-native-charts\/src\/Tooltip\.tsx$/u, + /(?:^|\/)packages\/react-native-charts\/src\/tooltip-entry\.ts$/u, + ], d3Array: [/(?:^|\/)node_modules\/d3-array\//u], d3Shape: [/(?:^|\/)node_modules\/d3-shape\//u], d3ScaleRuntime: [ @@ -101,6 +128,14 @@ const granularTransformInputGroups = [ 'transformStack', 'transformReduce', ] +const nativeExternals = [ + 'react', + 'react/jsx-runtime', + 'react-native', + 'react-native/*', + 'react-native-svg', + 'react-native-svg/*', +] const entries = [ measured('Core host', 'benchmarks/entries/core.ts', { inputBoundary: { forbid: ['d3GeometryRuntime'] }, @@ -330,6 +365,58 @@ const entries = [ external: ['react', 'react/jsx-runtime', 'react-dom'], inputBoundary: { forbid: ['d3GeometryRuntime'] }, }), + measured( + 'React Native SVG host', + 'benchmarks/entries/charts-react-native.ts', + { + external: nativeExternals, + rendererBoundary: 'native', + inputBoundary: { + forbid: [ + 'nativeTooltip', + 'tooltipRuntime', + 'tooltipPortal', + 'd3Runtime', + ], + }, + platform: 'neutral', + conditions: ['react-native', 'import'], + }, + ), + measured( + 'React Native SVG host + tooltip', + 'benchmarks/entries/charts-react-native-tooltip.ts', + { + external: nativeExternals, + rendererBoundary: 'native', + inputBoundary: { + require: ['nativeTooltip'], + forbid: ['tooltipRuntime', 'tooltipPortal', 'd3Runtime'], + addedFrom: 'React Native SVG host', + allowAdded: ['nativeTooltip'], + }, + platform: 'neutral', + conditions: ['react-native', 'import'], + }, + ), + measured( + 'React Native line consumer', + 'benchmarks/entries/charts-react-native-line.ts', + { + external: nativeExternals, + rendererBoundary: 'native', + inputBoundary: { + forbid: [ + 'nativeTooltip', + 'tooltipRuntime', + 'tooltipPortal', + 'd3GeometryRuntime', + ], + }, + platform: 'neutral', + conditions: ['react-native', 'import'], + }, + ), lockedBudgeted( 'Compact-scale line scene', 'benchmarks/entries/charts-compact-linear-scene.ts', @@ -703,6 +790,8 @@ for (const { policy, rendererBoundary, inputBoundary, + platform, + conditions, } of entries) { const outfile = resolve( outputDirectory, @@ -714,13 +803,14 @@ for (const { bundle: true, minify: true, treeShaking: true, - platform: 'browser', + platform: platform ?? 'browser', format: 'esm', target: 'es2022', legalComments: 'none', logLevel: 'silent', external, alias, + conditions, metafile: true, }) const retainedInputs = collectRetainedInputs(result.metafile) @@ -871,6 +961,8 @@ function createEntry(label, entry, policy, options) { alias: options.alias, rendererBoundary: options.rendererBoundary, inputBoundary: options.inputBoundary, + platform: options.platform, + conditions: options.conditions, } } @@ -879,6 +971,9 @@ function assertRendererBoundary(label, inputs, boundary) { const paths = inputs.map((input) => input.replaceAll('\\', '/')) const canvas = matchingModules(paths, rendererBoundaryModules.canvas) const svg = matchingModules(paths, rendererBoundaryModules.svg) + const native = matchingModules(paths, rendererBoundaryModules.native) + const browser = matchingModules(paths, rendererBoundaryModules.browser) + const reactDom = paths.filter((input) => input.includes('/react-dom/')) const failures = [] if (boundary === 'neutral') { @@ -890,6 +985,14 @@ function assertRendererBoundary(label, inputs, boundary) { } else if (boundary === 'svg') { if (!svg.length) failures.push('did not include the SVG renderer') if (canvas.length) failures.push(`included Canvas: ${canvas.join(', ')}`) + } else if (boundary === 'native') { + if (!native.length) failures.push('did not include the native SVG host') + if (browser.length) { + failures.push(`included browser modules: ${browser.join(', ')}`) + } + if (reactDom.length) { + failures.push(`included react-dom: ${reactDom.join(', ')}`) + } } else { failures.push(`uses unknown renderer boundary ${boundary}`) } diff --git a/scripts/measure-react-native-poc.mjs b/scripts/measure-react-native-poc.mjs new file mode 100644 index 00000000..9e7bd71a --- /dev/null +++ b/scripts/measure-react-native-poc.mjs @@ -0,0 +1,196 @@ +import { spawn } from 'node:child_process' +import { mkdir, readFile, writeFile } from 'node:fs/promises' +import { gzipSync } from 'node:zlib' +import { resolve } from 'node:path' + +const root = resolve(import.meta.dirname, '..') +const example = resolve(root, 'examples/charts-react-native') +const output = resolve(root, '.bundle-output') +const cli = resolve(example, 'node_modules/.bin/react-native') +const skipBuild = process.argv.includes('--skip-build') +const forbiddenSources = [ + 'packages/charts-core/src/adapter.ts', + 'packages/charts-core/src/adapter-renderer.ts', + 'packages/charts-core/src/canvas.ts', + 'packages/charts-core/src/dom.ts', + 'packages/charts-core/src/dom-text.ts', + 'packages/charts-core/src/export.ts', + 'packages/charts-core/src/reconcile.ts', + 'packages/charts-core/src/renderer.ts', + 'packages/charts-core/src/svg-resources.ts', + 'packages/charts-core/src/svg-surface.ts', + 'packages/charts-core/src/tooltip-portal.ts', + 'packages/charts-core/src/tooltip-position.ts', + 'packages/charts-core/src/tooltip.ts', + 'packages/octane-charts/', + 'packages/react-charts/', + 'react-dom/', +] +const universalRetainedSources = [ + 'packages/charts-core/src/svg-renderer.ts', + 'packages/charts-core/src/svg.ts', +] +const variants = { + blank: 'index.blank.js', + svg: 'index.svg.js', + core: 'index.core.js', + granular: 'index.granular.js', + chart: 'index.js', +} + +await mkdir(output, { recursive: true }) + +const bundles = [] +for (const platform of ['ios', 'android']) { + for (const [variant, entry] of Object.entries(variants)) { + const bundle = resolve( + output, + `react-native-${variant}.${platform}.jsbundle`, + ) + const sourceMap = resolve(output, `react-native-${variant}.${platform}.map`) + if (!skipBuild) { + await run(cli, [ + 'bundle', + '--entry-file', + entry, + '--platform', + platform, + '--dev', + 'false', + '--minify', + 'true', + '--bundle-output', + bundle, + '--sourcemap-output', + sourceMap, + '--config', + resolve(example, 'metro.config.cjs'), + ]) + } + const contents = await readFile(bundle) + const map = JSON.parse(await readFile(sourceMap, 'utf8')) + const sources = map.sources.map(normalize) + if (variant === 'chart') assertNativeBoundary(platform, sources, true) + if (variant === 'granular') assertNativeBoundary(platform, sources, false) + bundles.push({ + platform, + variant, + bytes: contents.byteLength, + gzip: gzipSync(contents).byteLength, + modules: sources.length, + }) + } +} + +const rows = [ + '| Platform | Full chart `/universal` JS delta | RNSVG-only gzip delta | Core line gzip delta | Full chart `/universal` gzip delta | `/universal` over granular gzip |', +] +rows.push('| --- | ---: | ---: | ---: | ---: | ---: |') +for (const platform of ['ios', 'android']) { + const blank = bundles.find( + (bundle) => bundle.platform === platform && bundle.variant === 'blank', + ) + const chart = bundles.find( + (bundle) => bundle.platform === platform && bundle.variant === 'chart', + ) + const granular = bundles.find( + (bundle) => bundle.platform === platform && bundle.variant === 'granular', + ) + const svg = bundles.find( + (bundle) => bundle.platform === platform && bundle.variant === 'svg', + ) + const core = bundles.find( + (bundle) => bundle.platform === platform && bundle.variant === 'core', + ) + if (!blank || !chart || !granular || !svg || !core) { + throw new Error(`Missing ${platform} bundle result`) + } + rows.push( + `| ${platform} | ${format(chart.bytes - blank.bytes)} | ${format(svg.gzip - blank.gzip)} | ${format(core.gzip - blank.gzip)} | ${format(chart.gzip - blank.gzip)} | ${format(chart.gzip - granular.gzip)} |`, + ) +} + +console.log(rows.join('\n')) +await writeFile( + resolve(output, 'react-native-poc.json'), + `${JSON.stringify( + { + schemaVersion: 1, + note: 'Metro production JS only. The chart and granular variants share one UI and definition factory while their application entries use @tanstack/charts/universal and granular definition imports respectively; this excludes react-native-svg native binary code.', + bundles, + }, + null, + 2, + )}\n`, +) + +function assertNativeBoundary(platform, sources, requiresUniversal) { + const nativeSources = sources.filter((source) => + source.includes('packages/react-native-charts/src/'), + ) + if (!nativeSources.length) { + throw new Error(`${platform} bundle did not include the native host`) + } + const includesUniversal = sources.some((source) => + source.includes('packages/charts-core/src/universal.ts'), + ) + if (requiresUniversal && !includesUniversal) { + throw new Error(`${platform} bundle did not exercise the universal entry`) + } + if (!requiresUniversal && includesUniversal) { + throw new Error(`${platform} granular bundle included the universal entry`) + } + const retainedUniversalSources = universalRetainedSources.filter( + (candidate) => sources.some((source) => source.includes(candidate)), + ) + if ( + requiresUniversal && + retainedUniversalSources.length !== universalRetainedSources.length + ) { + throw new Error( + `${platform} universal bundle did not retain its static SVG serializer`, + ) + } + if (!requiresUniversal && retainedUniversalSources.length) { + throw new Error( + `${platform} granular bundle retained broad universal modules:\n${retainedUniversalSources.join('\n')}`, + ) + } + const forbidden = sources.filter((source) => + forbiddenSources.some((candidate) => source.includes(candidate)), + ) + if (forbidden.length) { + throw new Error( + `${platform} bundle crossed the browser boundary:\n${forbidden.join('\n')}`, + ) + } +} + +function run(command, args) { + return new Promise((resolvePromise, reject) => { + const child = spawn(command, args, { + cwd: example, + stdio: 'inherit', + }) + child.on('error', reject) + child.on('exit', (code, signal) => { + if (code === 0) resolvePromise() + else { + reject( + new Error( + `${command} exited with ${signal ? `signal ${signal}` : `code ${code}`}`, + ), + ) + } + }) + }) +} + +function normalize(value) { + return value.replaceAll('\\', '/') +} + +function format(bytes) { + const sign = bytes < 0 ? '-' : '' + return `${sign}${(Math.abs(bytes) / 1024).toFixed(2)} kB` +} diff --git a/scripts/packed-react-native-consumers.mjs b/scripts/packed-react-native-consumers.mjs new file mode 100644 index 00000000..7be594ba --- /dev/null +++ b/scripts/packed-react-native-consumers.mjs @@ -0,0 +1,537 @@ +import assert from 'node:assert/strict' +import { execFile } from 'node:child_process' +import { + cp, + mkdir, + readFile, + readdir, + realpath, + stat, + writeFile, +} from 'node:fs/promises' +import { dirname, resolve } from 'node:path' +import { promisify } from 'node:util' +import { gzipSync } from 'node:zlib' + +const execFileAsync = promisify(execFile) + +const forbiddenNativeSources = [ + '/@tanstack/charts/dist/adapter.js', + '/@tanstack/charts/dist/adapter-renderer.js', + '/@tanstack/charts/dist/canvas.js', + '/@tanstack/charts/dist/dom.js', + '/@tanstack/charts/dist/dom-text.js', + '/@tanstack/charts/dist/export.js', + '/@tanstack/charts/dist/reconcile.js', + '/@tanstack/charts/dist/renderer.js', + '/@tanstack/charts/dist/svg-resources.js', + '/@tanstack/charts/dist/svg-surface.js', + '/@tanstack/charts/dist/tooltip.js', + '/@tanstack/charts/dist/tooltip-position.js', + '/@tanstack/charts/dist/tooltip-portal.js', + '/@tanstack/react-charts/', + '/react-dom/', +] + +export async function verifyPackedReactNativeConsumers({ + repositoryRoot, + temporaryRoot, + tarballs, +}) { + const coreTarball = requiredTarball(tarballs, '@tanstack/charts') + const nativeTarball = requiredTarball( + tarballs, + '@tanstack/react-native-charts', + ) + const consumersRoot = resolve(temporaryRoot, 'react-native-consumers') + const packageManager = JSON.parse( + await readFile(resolve(repositoryRoot, 'package.json'), 'utf8'), + ).packageManager + const consumerConfigs = [ + bareConsumerConfig(repositoryRoot), + expoConsumerConfig(repositoryRoot), + ] + const bundles = [] + + for (const config of consumerConfigs) { + const consumerRoot = resolve(consumersRoot, config.name) + await deployConsumer({ + config, + consumerRoot, + coreTarball, + nativeTarball, + packageManager, + repositoryRoot, + }) + await installConsumer(consumerRoot, repositoryRoot) + await verifyInstalledPackage({ consumerRoot, repositoryRoot }) + await verifyConsumerTypes({ config, consumerRoot, repositoryRoot }) + bundles.push(...(await bundleConsumer({ config, consumerRoot }))) + } + + console.log( + 'Packed React Native exports, declarations, bare Metro, and Expo Metro gates passed.', + ) + return bundles +} + +function bareConsumerConfig(repositoryRoot) { + return { + name: 'bare', + importerPath: 'examples/charts-react-native', + sourceDirectory: resolve(repositoryRoot, 'examples/charts-react-native'), + writeConfig: async (consumerRoot) => { + await writeFile( + resolve(consumerRoot, 'metro.config.cjs'), + "const { getDefaultConfig } = require('@react-native/metro-config')\n\nmodule.exports = getDefaultConfig(__dirname)\n", + ) + }, + strictTypes: true, + bundle: bundleBareConsumer, + } +} + +function expoConsumerConfig(repositoryRoot) { + return { + name: 'expo', + importerPath: 'examples/charts-expo', + sourceDirectory: resolve(repositoryRoot, 'examples/charts-expo'), + writeConfig: async () => {}, + strictTypes: false, + bundle: bundleExpoConsumer, + } +} + +async function deployConsumer({ + config, + consumerRoot, + coreTarball, + nativeTarball, + packageManager, + repositoryRoot, +}) { + await copyConsumerSource(config.sourceDirectory, consumerRoot) + await writeConsumerLock({ + consumerRoot, + importerPath: config.importerPath, + repositoryRoot, + }) + const manifest = JSON.parse( + await readFile(resolve(consumerRoot, 'package.json'), 'utf8'), + ) + manifest.packageManager = packageManager + manifest.dependencies['@tanstack/charts'] = `file:${coreTarball}` + manifest.dependencies['@tanstack/react-native-charts'] = + `file:${nativeTarball}` + await writeFile( + resolve(consumerRoot, 'package.json'), + `${JSON.stringify(manifest, null, 2)}\n`, + ) + await writeFile( + resolve(consumerRoot, 'pnpm-workspace.yaml'), + `packages:\n - '.'\n\noverrides:\n '@tanstack/charts': ${JSON.stringify(`file:${coreTarball}`)}\n\nverifyDepsBeforeRun: false\n\nallowBuilds:\n '@parcel/watcher': false\n esbuild: false\n nx: false\n sharp: false\n workerd: false\n`, + ) + await config.writeConfig(consumerRoot) +} + +async function copyConsumerSource(sourceDirectory, consumerRoot) { + await mkdir(consumerRoot, { recursive: true }) + for (const entry of await readdir(sourceDirectory, { withFileTypes: true })) { + if (entry.name === 'node_modules' || entry.name.startsWith('dist')) continue + await cp( + resolve(sourceDirectory, entry.name), + resolve(consumerRoot, entry.name), + { recursive: entry.isDirectory() }, + ) + } +} + +async function writeConsumerLock({ + consumerRoot, + importerPath, + repositoryRoot, +}) { + const lockSource = await readFile( + resolve(repositoryRoot, 'pnpm-lock.yaml'), + 'utf8', + ) + const lines = lockSource.split('\n') + const importersIndex = lines.indexOf('importers:') + const packagesIndex = lines.indexOf('packages:') + const importerIndex = lines.indexOf(` ${importerPath}:`, importersIndex + 1) + assert.ok(importersIndex >= 0, 'Workspace lock has no importers section') + assert.ok( + packagesIndex > importersIndex, + 'Workspace lock has no packages section', + ) + assert.ok( + importerIndex > importersIndex && importerIndex < packagesIndex, + `Workspace lock has no ${importerPath} importer`, + ) + + let importerEnd = importerIndex + 1 + while (importerEnd < packagesIndex && !/^ \S.*:$/.test(lines[importerEnd])) { + importerEnd += 1 + } + const importer = lines.slice(importerIndex, importerEnd) + importer[0] = ' .:' + const consumerLock = [ + ...lines.slice(0, importersIndex + 1), + '', + ...importer, + '', + ...lines.slice(packagesIndex), + ].join('\n') + await writeFile(resolve(consumerRoot, 'pnpm-lock.yaml'), consumerLock) +} + +async function installConsumer(consumerRoot, repositoryRoot) { + const modulesState = JSON.parse( + await readFile( + resolve(repositoryRoot, 'node_modules/.modules.yaml'), + 'utf8', + ), + ) + assert.equal(typeof modulesState.storeDir, 'string') + await run( + 'pnpm', + [ + 'install', + '--prefer-offline', + '--ignore-scripts', + '--frozen-lockfile=false', + '--store-dir', + resolve(modulesState.storeDir, '..'), + ], + consumerRoot, + { CI: 'true' }, + ) +} + +async function verifyInstalledPackage({ consumerRoot, repositoryRoot }) { + const sourceManifest = JSON.parse( + await readFile( + resolve(repositoryRoot, 'packages/react-native-charts/package.json'), + 'utf8', + ), + ) + const sourceCoreManifest = JSON.parse( + await readFile( + resolve(repositoryRoot, 'packages/charts-core/package.json'), + 'utf8', + ), + ) + const packageRoot = resolve( + consumerRoot, + 'node_modules/@tanstack/react-native-charts', + ) + const installedManifest = JSON.parse( + await readFile(resolve(packageRoot, 'package.json'), 'utf8'), + ) + const corePackageRoot = resolve(consumerRoot, 'node_modules/@tanstack/charts') + const installedCoreManifest = JSON.parse( + await readFile(resolve(corePackageRoot, 'package.json'), 'utf8'), + ) + assert.deepEqual( + installedManifest.exports, + sourceManifest.publishConfig.exports, + ) + assert.equal(installedManifest.private, false) + assert.equal(installedManifest.publishConfig?.exports, undefined) + assert.equal(installedManifest.publishConfig?.access, 'public') + assert.equal(installedManifest.publishConfig?.provenance, true) + assert.equal( + installedManifest.dependencies['@tanstack/charts'], + sourceManifest.version, + ) + assert.equal(installedCoreManifest.version, sourceCoreManifest.version) + assert.equal((await readdir(packageRoot)).includes('src'), false) + assert.equal((await readdir(corePackageRoot)).includes('src'), false) + + const nativePackageRealPath = await realpath(packageRoot) + const directCoreRealPath = await realpath(corePackageRoot) + const coreResolvedFromNative = await realpath( + resolve(dirname(dirname(nativePackageRealPath)), '@tanstack/charts'), + ) + assert.equal( + coreResolvedFromNative, + directCoreRealPath, + 'The native adapter did not resolve the installed core tarball', + ) + for (const range of Object.values(installedManifest.dependencies ?? {})) { + assert.equal(range.startsWith('workspace:'), false) + } + + const resolutionCheck = resolve(consumerRoot, 'resolve-exports.mjs') + await writeFile( + resolutionCheck, + `import assert from 'node:assert/strict'\nimport { realpathSync } from 'node:fs'\nimport { fileURLToPath } from 'node:url'\n\nconst expected = process.argv[2]\nfor (const [specifier, filename] of [\n ['@tanstack/react-native-charts', expected === 'native' ? 'index.native.js' : 'index.js'],\n ['@tanstack/react-native-charts/tooltip', expected === 'native' ? 'tooltip-entry.native.js' : 'tooltip-entry.js'],\n ['@tanstack/charts/universal', 'universal.js'],\n]) {\n const resolved = realpathSync(fileURLToPath(import.meta.resolve(specifier)))\n assert.ok(resolved.startsWith(realpathSync('./node_modules')), resolved)\n assert.ok(resolved.endsWith('/dist/' + filename), resolved)\n}\n`, + ) + await run('node', [resolutionCheck, 'import'], consumerRoot) + await run( + 'node', + ['--conditions=react-native', resolutionCheck, 'native'], + consumerRoot, + ) +} + +async function verifyConsumerTypes({ config, consumerRoot }) { + const tsc = resolve(consumerRoot, 'node_modules/typescript/bin/tsc') + await run( + process.execPath, + [tsc, '--noEmit', '-p', 'tsconfig.json', '--pretty', 'false'], + consumerRoot, + ) + if (!config.strictTypes) return + + const strict = await runAllowFailure( + process.execPath, + [tsc, '--noEmit', '-p', 'tsconfig.strict.json', '--pretty', 'false'], + consumerRoot, + ) + if (strict.status === 0) return + const diagnostics = strict.output + .split(/\r?\n/) + .map((line) => line.trim()) + .filter((line) => line.includes('error TS')) + const expected = diagnostics.every( + (line) => + line.includes('/@types/d3-array/') && + line.includes("Cannot find name 'ImageData'."), + ) + if (!expected || diagnostics.length !== 2) { + throw new Error( + `Packed strict React Native declarations failed beyond the known @types/d3-array boundary:\n${strict.output}`, + ) + } +} + +async function bundleConsumer({ config, consumerRoot }) { + const bundles = await config.bundle(consumerRoot) + for (const bundle of bundles) { + const sources = await readSourceMapSources(bundle.sourceMaps) + assertPackedNativeBoundary(bundle.label, sources, bundle.includesTooltip) + } + return bundles.map(({ label, bundle }) => ({ + label, + bytes: bundle.byteLength, + gzip: gzipSync(bundle).byteLength, + })) +} + +async function bundleBareConsumer(consumerRoot) { + const cli = resolve(consumerRoot, 'node_modules/.bin/react-native') + const outputRoot = resolve(consumerRoot, 'bundles') + await mkdir(outputRoot, { recursive: true }) + await writeFile( + resolve(consumerRoot, 'packed-base-entry.js'), + "import { defineChart, lineY } from '@tanstack/charts/universal'\nimport { Chart } from '@tanstack/react-native-charts'\nglobalThis.__tanstackChartsPackedBase = [defineChart, lineY, Chart]\n", + ) + + const entries = [ + { + entry: 'index.js', + name: 'bare', + platforms: ['ios', 'android'], + includesTooltip: true, + }, + { + entry: 'packed-base-entry.js', + name: 'bare-base', + platforms: ['ios'], + includesTooltip: false, + }, + ] + const bundles = [] + for (const entry of entries) { + for (const platform of entry.platforms) { + const output = resolve(outputRoot, `${entry.name}.${platform}.jsbundle`) + const sourceMap = resolve(outputRoot, `${entry.name}.${platform}.map`) + await run( + cli, + [ + 'bundle', + '--entry-file', + entry.entry, + '--platform', + platform, + '--dev', + 'false', + '--minify', + 'true', + '--bundle-output', + output, + '--sourcemap-output', + sourceMap, + '--config', + resolve(consumerRoot, 'metro.config.cjs'), + ], + consumerRoot, + ) + bundles.push({ + label: `Packed bare React Native ${entry.name === 'bare' ? '' : 'base '}${platform}`, + bundle: await readFile(output), + sourceMaps: [sourceMap], + includesTooltip: entry.includesTooltip, + }) + } + } + return bundles +} + +async function bundleExpoConsumer(consumerRoot) { + const cli = resolve(consumerRoot, 'node_modules/.bin/expo') + const bundles = [] + for (const platform of ['ios', 'android']) { + const outputRoot = resolve(consumerRoot, `dist-${platform}`) + await run( + cli, + [ + 'export', + '--platform', + platform, + '--output-dir', + outputRoot, + '--clear', + '--source-maps', + ], + consumerRoot, + { + CI: 'true', + EXPO_NO_TELEMETRY: '1', + }, + ) + const files = await walk(outputRoot) + const sourceMaps = files.filter((file) => file.endsWith('.map')) + assert.ok(sourceMaps.length, `Expo ${platform} emitted no source map`) + const bundlePath = await largestBundleFile(files) + bundles.push({ + label: `Packed Expo ${platform}`, + bundle: await readFile(bundlePath), + sourceMaps, + includesTooltip: true, + }) + } + return bundles +} + +async function largestBundleFile(files) { + const candidates = files.filter((file) => /\.(?:js|hbc|bundle)$/.test(file)) + assert.ok(candidates.length, 'Expo emitted no JavaScript or Hermes bundle') + const measured = await Promise.all( + candidates.map(async (file) => ({ file, size: (await stat(file)).size })), + ) + measured.sort((left, right) => right.size - left.size) + return measured[0].file +} + +async function readSourceMapSources(sourceMaps) { + const sources = [] + for (const sourceMap of sourceMaps) { + const parsed = JSON.parse(await readFile(sourceMap, 'utf8')) + sources.push(...(parsed.sources ?? []).map(normalize)) + } + return sources +} + +function assertPackedNativeBoundary(label, sources, includesTooltip) { + const requiredSources = [ + '/@tanstack/react-native-charts/dist/index.native.js', + '/@tanstack/charts/dist/universal.js', + ] + if (includesTooltip) { + requiredSources.push( + '/@tanstack/react-native-charts/dist/tooltip-entry.native.js', + '/@tanstack/react-native-charts/dist/Tooltip.js', + ) + } + for (const required of requiredSources) { + assert.ok( + sources.some((source) => source.includes(required)), + `${label} did not include packed ${required}`, + ) + } + if (!includesTooltip) { + const optionalTooltipSources = sources.filter( + (source) => + source.includes( + '/@tanstack/react-native-charts/dist/tooltip-entry.native.js', + ) || source.includes('/@tanstack/react-native-charts/dist/Tooltip.js'), + ) + assert.deepEqual( + optionalTooltipSources, + [], + `${label} retained the optional tooltip entry`, + ) + } + const leakedSource = sources.filter( + (source) => + source.includes('/packages/react-native-charts/src/') || + source.includes('/packages/charts-core/src/') || + source.includes('/@tanstack/react-native-charts/src/') || + source.includes('/@tanstack/charts/src/'), + ) + assert.deepEqual(leakedSource, [], `${label} resolved workspace source`) + assertSinglePackedPackage(label, sources, '@tanstack/react-native-charts') + assertSinglePackedPackage(label, sources, '@tanstack/charts') + const forbidden = sources.filter((source) => + forbiddenNativeSources.some((candidate) => source.includes(candidate)), + ) + assert.deepEqual(forbidden, [], `${label} crossed the browser boundary`) +} + +function assertSinglePackedPackage(label, sources, packageName) { + const marker = `/${packageName}/` + const packageSources = sources.filter((source) => source.includes(marker)) + assert.ok(packageSources.length, `${label} did not include ${packageName}`) + assert.ok( + packageSources.every((source) => source.includes(`${marker}dist/`)), + `${label} loaded a non-dist ${packageName} module`, + ) + const roots = new Set( + packageSources.map((source) => + source.slice(0, source.indexOf(marker) + marker.length - 1), + ), + ) + assert.equal(roots.size, 1, `${label} loaded multiple ${packageName} copies`) +} + +function requiredTarball(tarballs, packageName) { + const tarball = tarballs.get(packageName) + assert.ok(tarball, `Missing packed tarball for ${packageName}`) + return tarball +} + +async function walk(directory) { + const files = [] + for (const entry of await readdir(directory, { withFileTypes: true })) { + const path = resolve(directory, entry.name) + if (entry.isDirectory()) files.push(...(await walk(path))) + else files.push(path) + } + return files +} + +async function run(command, args, cwd, environment = {}) { + return execFileAsync(command, args, { + cwd, + env: { ...process.env, ...environment }, + maxBuffer: 20 * 1024 * 1024, + }) +} + +async function runAllowFailure(command, args, cwd) { + try { + const result = await run(command, args, cwd) + return { status: 0, output: `${result.stdout}${result.stderr}` } + } catch (error) { + return { + status: error.code ?? 1, + output: `${error.stdout ?? ''}${error.stderr ?? ''}`, + } + } +} + +function normalize(value) { + return value.replaceAll('\\', '/') +} diff --git a/scripts/release-package-config.mjs b/scripts/release-package-config.mjs index 7010fd0b..943f42c9 100644 --- a/scripts/release-package-config.mjs +++ b/scripts/release-package-config.mjs @@ -12,6 +12,7 @@ export const releasePackageConfigs = [ ['charts-core', '@tanstack/charts'], ['charts-scales', '@tanstack/charts-scales'], ['react-charts', '@tanstack/react-charts'], + ['react-native-charts', '@tanstack/react-native-charts'], ['octane-charts', '@tanstack/octane-charts'], ['preact-charts', '@tanstack/preact-charts'], ['vue-charts', '@tanstack/vue-charts'], diff --git a/scripts/release-workflow.test.mjs b/scripts/release-workflow.test.mjs index b04e11a1..5540ce92 100644 --- a/scripts/release-workflow.test.mjs +++ b/scripts/release-workflow.test.mjs @@ -32,6 +32,7 @@ describe('release workflow contract', () => { '@tanstack/charts', '@tanstack/charts-scales', '@tanstack/react-charts', + '@tanstack/react-native-charts', '@tanstack/octane-charts', '@tanstack/preact-charts', '@tanstack/vue-charts', diff --git a/scripts/sync-release-version.mjs b/scripts/sync-release-version.mjs index 28fe56f9..3ff9b9d7 100644 --- a/scripts/sync-release-version.mjs +++ b/scripts/sync-release-version.mjs @@ -9,7 +9,7 @@ export const releaseVersionSources = [ { path: 'MARKETING.md', references: 6 }, { path: 'docs/overview.md', references: 1 }, { path: 'docs/installation.md', references: 1 }, - { path: 'docs/comparison.md', references: 5 }, + { path: 'docs/comparison.md', references: 6 }, ] export function changelogVersions(source) {