diff --git a/AGENTS.md b/AGENTS.md index 8cc35887..058989ca 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -28,7 +28,9 @@ - `packages/`: Shared, publishable packages consumed across apps and external projects. - `packages/react/`: `@cocso-ui/react` — React component library. - `packages/css/`: `@cocso-ui/css` — design tokens and CSS. + - `packages/react-native/`: `@cocso-ui/react-native` — React Native + Expo component package. - `packages/react-icons/`: `@cocso-ui/react-icons` — icon set. + - `packages/react-native-icons/`: `@cocso-ui/react-native-icons` — React Native icon package. - `packages/baseframe/`: `@cocso-ui/baseframe-sources` — YAML component source definitions. - `packages/figma/`: `@cocso-ui/figma` — Figma plugin for syncing design tokens to Figma Variables. - `ecosystem/`: Tooling that wraps or consumes packages for developer workflows. diff --git a/docs/project-react-native-icons.md b/docs/project-react-native-icons.md new file mode 100644 index 00000000..dcef72e7 --- /dev/null +++ b/docs/project-react-native-icons.md @@ -0,0 +1,88 @@ +# project-react-native-icons + +## Goal + +Provide a React Native icon package with full parity to `@cocso-ui/react-icons`, so Expo and React Native apps can consume the same icon names without web SVG runtime dependencies. + +## Path + +```text +packages/react-native-icons/ +``` + +## Runtime and Language + +React Native + TypeScript (`react-native-svg`). + +## Users + +- Mobile engineers consuming `@cocso-ui/react-native`. +- Teams that need icon-name parity between web (`@cocso-ui/react-icons`) and native. + +## In Scope + +- Full icon parity for all semantic and brand icons from `@cocso-ui/react-icons`. +- RN icon rendering through generated `react-native-svg` component trees. +- Grouped exports by `semantic` and `brand`, plus top-level barrel export. +- Automated source sync script from `packages/react-icons/src/components/**/*.tsx`. +- Test-level generation contracts for source parity and barrel export parity. + +## Out of Scope + +- Replacing `@cocso-ui/react-icons` as the source package. +- Introducing a new global SVG truth source in this PR. +- Web icon runtime behavior changes. + +## Architecture + +```text +packages/react-native-icons/ +├── scripts/ +│ └── generate-icons.mjs +├── src/ +│ ├── components/ +│ │ ├── semantic/ +│ │ └── brand/ +│ ├── icon.tsx +│ ├── types.ts +│ └── index.ts +└── package.json +``` + +## Interfaces + +- Package name: `@cocso-ui/react-native-icons` +- Public icon props: `size`, `width`, `height`, `color` plus `SvgProps` +- Export parity contract: all icon component names from `@cocso-ui/react-icons` must exist with the same export names. + +## Storage + +- Generated TSX icon files committed in repository. +- No runtime storage. + +## Security + +- No network calls. +- No secret handling. + +## Logging + +- Script-level console output for generated file counts and sync status. + +## Build and Test + +```sh +pnpm --filter @cocso-ui/react-native-icons lint +pnpm --filter @cocso-ui/react-native-icons check-types +pnpm --filter @cocso-ui/react-native-icons test +pnpm --filter @cocso-ui/react-native-icons build +``` + +## Roadmap + +- Evaluate a shared raw-SVG source of truth for web/native generation. +- Add visual snapshot checks for high-risk brand icons. + +## Open Questions + +- Whether to move all icon generation to an `ecosystem/` pipeline in a dedicated follow-up. diff --git a/docs/project-react-native.md b/docs/project-react-native.md new file mode 100644 index 00000000..0c437391 --- /dev/null +++ b/docs/project-react-native.md @@ -0,0 +1,132 @@ +# project-react-native + +## Goal + +Provide a React Native-first component package for Expo environments that reuses cocso design tokens and interaction patterns, so mobile apps can ship a consistent design system without depending on web CSS runtime features. + +## Path + +```text +packages/react-native/ +``` + +## Runtime and Language + +React Native + Expo (TypeScript). + +## Users + +- Mobile engineers building Expo apps that need cocso design-system components. +- Teams sharing design language across `@cocso-ui/react` (web) and React Native. + +## In Scope + +- Token-driven React Native exports (`colors`, `spacing`, `radius`, `typography`, `shadow`, `zIndex`) derived from cocso token source. +- Foundational primitives for RN design systems: `Box`, `Text`, `Stack`. +- Core interactive components implemented in this scope: `Button`, `Modal`, `GlassView`, `Input`. +- Feedback component implemented in this scope: `Badge`. +- React Native `Modal`-compatible presentation controls with explicit component-level semantics. +- Translucent glass surface with optional blur-component injection for apps that provide native blur. + +## Out of Scope + +- Porting every existing web component in `@cocso-ui/react` one-to-one. +- Web-only CSS module behavior and browser-specific styling patterns. +- App-level navigation logic and screen composition. + +## Architecture + +```text +packages/react-native/src/ +├── components/ +│ ├── badge/ +│ ├── box/ +│ ├── button/ +│ ├── glass-view/ +│ ├── input/ +│ ├── modal/ +│ ├── stack/ +│ └── text/ +├── theme/ +│ ├── tokens.generated.ts +│ ├── tokens.ts +│ └── index.ts +└── index.ts +``` + +Token architecture contract: + +- Source of truth remains `@cocso-ui/css` (`token.css`). +- RN package consumes generated JS/TS token values (not CSS `var(...)` references). +- Token keys keep stable enum-like identifiers where possible (`neutral500`, `s8`, `r4`). + +## Interfaces + +Public package name: `@cocso-ui/react-native` + +Public exports: + +- `theme` tokens: `colors`, `spacing`, `radius`, `fontSize`, `fontWeight`, `lineHeight`, `shadows`, `zIndex` +- Components: `Badge`, `Box`, `Button`, `GlassView`, `Input`, `Modal`, `Stack`, `Text` + +Modal interfaces: + +- `RN_MODAL_PRESENTATION`: `"fullScreen" | "pageSheet" | "formSheet" | "overFullScreen"` +- `GLASS_INTENSITY`: `"low" | "medium" | "high"` + +## Storage + +- No runtime persistence. +- Build artifacts generated into `dist/`. +- Generated token file committed for deterministic package builds. + +## Security + +- No network calls. +- No secret handling. +- Styling and UI utilities only. + +## Logging + +- No runtime logging by default. +- Development-only invariant errors for invalid token keys or unsupported presentation values. + +## Build and Test + +```sh +# Build package +pnpm --filter @cocso-ui/react-native build + +# Lint package +pnpm --filter @cocso-ui/react-native lint + +# Type check package +pnpm --filter @cocso-ui/react-native check-types + +# Package tests (token behavior + export contracts) +pnpm --filter @cocso-ui/react-native test +``` + +Repository validation should include: + +```sh +pnpm check +pnpm build +``` + +## Roadmap + +- Add higher-level RN components mapped from proven web component semantics. +- Planned component groups for follow-up migration: + - Form controls: `Select`, `Dropdown`, `Checkbox`, `Switch`, `RadioGroup`, `Field` + - Feedback and overlays: `Popover`, `Tooltip`, `Toast`, `Dialog`, `Spinner` + - Navigation and structure: `Tab`, `Accordion`, `Link`, `Pagination` + - Domain components: `OneTimePasswordField`, `StockQuantityStatus` + - Date-related components: `DayPicker`, `MonthPicker` +- Add dark-mode semantic token aliases. +- Add visual regression examples in Storybook or Expo preview integration. + +## Open Questions + +- Whether to standardize on `expo-blur` as a hard dependency or keep it as optional peer dependency. +- Whether to add dedicated Expo Router integration helpers in a separate package layer. diff --git a/packages/react-native-icons/README.md b/packages/react-native-icons/README.md new file mode 100644 index 00000000..f768407a --- /dev/null +++ b/packages/react-native-icons/README.md @@ -0,0 +1,23 @@ +## `@cocso-ui/react-native-icons` + +React Native icon components for Cocso UI. + +### Installation + +```bash +pnpm add @cocso-ui/react-native-icons react-native-svg +``` + +### Usage + +```tsx +import { SearchIcon } from "@cocso-ui/react-native-icons"; + +export function Example() { + return ; +} +``` + +### Source of truth + +The icon paths are generated from `@cocso-ui/react-icons` source components. diff --git a/packages/react-native-icons/package.json b/packages/react-native-icons/package.json new file mode 100644 index 00000000..356da7d0 --- /dev/null +++ b/packages/react-native-icons/package.json @@ -0,0 +1,45 @@ +{ + "name": "@cocso-ui/react-native-icons", + "version": "0.1.0", + "repository": { + "type": "git", + "url": "git+https://github.com/cocso/cocso-ui.git", + "directory": "packages/react-native-icons" + }, + "type": "module", + "scripts": { + "prebuild": "node ./scripts/generate-icons.mjs && biome check . --write", + "build": "tsc -p tsconfig.build.json", + "check-types": "tsc -p tsconfig.json --noEmit", + "test": "vitest run", + "test:coverage": "vitest run --coverage", + "lint": "biome check .", + "lint:fix": "biome check . --write" + }, + "exports": { + ".": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + }, + "./package.json": "./package.json" + }, + "files": [ + "dist" + ], + "peerDependencies": { + "react": "^19.1.1", + "react-native-svg": "^15.15.0" + }, + "devDependencies": { + "@types/node": "^24.9.1", + "@vitest/coverage-v8": "^4.0.18", + "@types/react": "^19.2.14", + "react": "^19.2.4", + "react-native-svg": "^15.15.0", + "typescript": "^5.9.3", + "vitest": "^4.0.18" + }, + "publishConfig": { + "access": "public" + } +} diff --git a/packages/react-native-icons/scripts/generate-icons.mjs b/packages/react-native-icons/scripts/generate-icons.mjs new file mode 100644 index 00000000..f7989bd7 --- /dev/null +++ b/packages/react-native-icons/scripts/generate-icons.mjs @@ -0,0 +1,217 @@ +import fs from "node:fs"; +import path from "node:path"; + +const REPO_ROOT = path.resolve(import.meta.dirname, "../../.."); +const SOURCE_COMPONENTS_DIR = path.join( + REPO_ROOT, + "packages/react-icons/src/components" +); +const TARGET_COMPONENTS_DIR = path.join( + import.meta.dirname, + "../src/components" +); +const TARGET_SRC_DIR = path.join(import.meta.dirname, "../src"); +const SVG_BLOCK_REGEX = //m; +const COMPONENT_NAME_REGEX = /export const\s+([A-Za-z0-9_]+)\s*=/; +const USE_ID_DECLARATION_REGEX = /^const\s+\w+\s*=\s*useId\(\);$/; + +const TAG_MAP = new Map([ + ["svg", "Svg"], + ["path", "Path"], + ["rect", "Rect"], + ["g", "G"], + ["defs", "Defs"], + ["line", "Line"], + ["circle", "Circle"], + ["ellipse", "Ellipse"], + ["polygon", "Polygon"], + ["polyline", "Polyline"], + ["clipPath", "ClipPath"], + ["linearGradient", "LinearGradient"], + ["radialGradient", "RadialGradient"], + ["stop", "Stop"], +]); + +const SVG_COMPONENTS = new Set(TAG_MAP.values()); + +function ensureDirectory(dirPath) { + fs.mkdirSync(dirPath, { recursive: true }); +} + +function replaceTagNames(svgSource) { + let output = svgSource; + + for (const [sourceTag, targetTag] of TAG_MAP.entries()) { + output = output + .replaceAll(new RegExp(`<${sourceTag}(?=[\\s>])`, "g"), `<${targetTag}`) + .replaceAll(new RegExp(``, "g"), ``); + } + + return output; +} + +function sanitizeSvgSource(svgSource) { + return replaceTagNames(svgSource) + .replaceAll(/\saria-hidden="[^"]*"/g, "") + .replaceAll(/\sxmlns="[^"]*"/g, ""); +} + +function extractSvgContent(sourceCode, sourceFilePath) { + const svgMatch = sourceCode.match(SVG_BLOCK_REGEX); + + if (!svgMatch) { + throw new Error(`Failed to find block: ${sourceFilePath}`); + } + + return sanitizeSvgSource(svgMatch[0]); +} + +function extractComponentName(sourceCode, sourceFilePath) { + const componentMatch = sourceCode.match(COMPONENT_NAME_REGEX); + + if (!componentMatch) { + throw new Error(`Failed to find component name: ${sourceFilePath}`); + } + + return componentMatch[1]; +} + +function buildSvgImport(svgSource) { + const usedTags = new Set(); + + for (const componentTag of SVG_COMPONENTS) { + if ( + svgSource.includes(`<${componentTag}`) || + svgSource.includes(``) + ) { + usedTags.add(componentTag); + } + } + + if (!usedTags.has("Svg")) { + throw new Error("Generated SVG content does not include root tag."); + } + + return Array.from(usedTags).sort((a, b) => a.localeCompare(b)); +} + +function extractUseIdLines(sourceCode) { + return sourceCode + .split("\n") + .map((line) => line.trim()) + .filter((line) => USE_ID_DECLARATION_REGEX.test(line)); +} + +function generateComponentSource({ sourceCode, componentName, svgSource }) { + const useIdLines = extractUseIdLines(sourceCode); + const hasUseId = useIdLines.length > 0; + const svgImports = buildSvgImport(svgSource); + + const lines = []; + + if (hasUseId) { + lines.push('import { useId } from "react";'); + } + + lines.push(`import { ${svgImports.join(", ")} } from "react-native-svg";`); + lines.push('import { Icon } from "../../icon";'); + lines.push('import type { IconProps } from "../../types";'); + lines.push(""); + + lines.push(`export const ${componentName} = (props: IconProps) => {`); + + if (hasUseId) { + for (const useIdLine of useIdLines) { + lines.push(` ${useIdLine}`); + } + lines.push(""); + } + + lines.push(" return ("); + lines.push(" "); + + for (const line of svgSource.split("\n")) { + lines.push(` ${line}`); + } + + lines.push(" "); + lines.push(" );"); + lines.push("};"); + + lines.push(""); + lines.push(`${componentName}.displayName = "${componentName}";`); + lines.push(""); + + return lines.join("\n"); +} + +function generateSubDirectory(subdirName) { + const sourceSubdirPath = path.join(SOURCE_COMPONENTS_DIR, subdirName); + const targetSubdirPath = path.join(TARGET_COMPONENTS_DIR, subdirName); + + ensureDirectory(targetSubdirPath); + + const sourceFiles = fs + .readdirSync(sourceSubdirPath) + .filter((fileName) => fileName.endsWith(".tsx")) + .sort((a, b) => a.localeCompare(b)); + + const generatedFiles = []; + + for (const fileName of sourceFiles) { + const sourceFilePath = path.join(sourceSubdirPath, fileName); + const sourceCode = fs.readFileSync(sourceFilePath, "utf8"); + const componentName = extractComponentName(sourceCode, sourceFilePath); + const svgSource = extractSvgContent(sourceCode, sourceFilePath); + + const generatedSource = generateComponentSource({ + sourceCode, + componentName, + svgSource, + }); + + const targetFilePath = path.join(targetSubdirPath, fileName); + fs.writeFileSync(targetFilePath, generatedSource); + generatedFiles.push(fileName); + } + + const indexSource = generatedFiles + .map((fileName) => `export * from "./${fileName.replace(".tsx", "")}";`) + .join("\n"); + + fs.writeFileSync(path.join(targetSubdirPath, "index.ts"), `${indexSource}\n`); + + return generatedFiles; +} + +function generatePackageIndex(subdirs) { + const indexContent = subdirs + .map((subdir) => `export * from "./components/${subdir}";`) + .join("\n"); + + fs.writeFileSync(path.join(TARGET_SRC_DIR, "index.ts"), `${indexContent}\n`); +} + +function main() { + ensureDirectory(TARGET_COMPONENTS_DIR); + + const subdirs = fs + .readdirSync(SOURCE_COMPONENTS_DIR, { withFileTypes: true }) + .filter((entry) => entry.isDirectory()) + .map((entry) => entry.name) + .sort((a, b) => a.localeCompare(b)); + + const summary = []; + + for (const subdir of subdirs) { + const files = generateSubDirectory(subdir); + summary.push(`${subdir}: ${files.length}`); + } + + generatePackageIndex(subdirs); + + console.log(`Generated react-native icons from ${SOURCE_COMPONENTS_DIR}`); + console.log(summary.join(", ")); +} + +main(); diff --git a/packages/react-native-icons/src/components/brand/COCSOColorHorizontalLogo.tsx b/packages/react-native-icons/src/components/brand/COCSOColorHorizontalLogo.tsx new file mode 100644 index 00000000..46990995 --- /dev/null +++ b/packages/react-native-icons/src/components/brand/COCSOColorHorizontalLogo.tsx @@ -0,0 +1,44 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const COCSOColorHorizontalLogo = (props: IconProps) => { + return ( + + + + + + + + + + + + ); +}; + +COCSOColorHorizontalLogo.displayName = "COCSOColorHorizontalLogo"; diff --git a/packages/react-native-icons/src/components/brand/COCSOColorLogo.tsx b/packages/react-native-icons/src/components/brand/COCSOColorLogo.tsx new file mode 100644 index 00000000..9669e1b6 --- /dev/null +++ b/packages/react-native-icons/src/components/brand/COCSOColorLogo.tsx @@ -0,0 +1,24 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const COCSOColorLogo = (props: IconProps) => { + return ( + + + + + + + ); +}; + +COCSOColorLogo.displayName = "COCSOColorLogo"; diff --git a/packages/react-native-icons/src/components/brand/COCSOHorizontalLogo.tsx b/packages/react-native-icons/src/components/brand/COCSOHorizontalLogo.tsx new file mode 100644 index 00000000..04702a34 --- /dev/null +++ b/packages/react-native-icons/src/components/brand/COCSOHorizontalLogo.tsx @@ -0,0 +1,44 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const COCSOHorizontalLogo = (props: IconProps) => { + return ( + + + + + + + + + + + + ); +}; + +COCSOHorizontalLogo.displayName = "COCSOHorizontalLogo"; diff --git a/packages/react-native-icons/src/components/brand/COCSOLogo.tsx b/packages/react-native-icons/src/components/brand/COCSOLogo.tsx new file mode 100644 index 00000000..a6e24662 --- /dev/null +++ b/packages/react-native-icons/src/components/brand/COCSOLogo.tsx @@ -0,0 +1,24 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const COCSOLogo = (props: IconProps) => { + return ( + + + + + + + ); +}; + +COCSOLogo.displayName = "COCSOLogo"; diff --git a/packages/react-native-icons/src/components/brand/COCSOTextLogo.tsx b/packages/react-native-icons/src/components/brand/COCSOTextLogo.tsx new file mode 100644 index 00000000..ee614069 --- /dev/null +++ b/packages/react-native-icons/src/components/brand/COCSOTextLogo.tsx @@ -0,0 +1,34 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const COCSOTextLogo = (props: IconProps) => { + return ( + + + + + + + + + + ); +}; + +COCSOTextLogo.displayName = "COCSOTextLogo"; diff --git a/packages/react-native-icons/src/components/brand/COCSOUILogo.tsx b/packages/react-native-icons/src/components/brand/COCSOUILogo.tsx new file mode 100644 index 00000000..e3fd6036 --- /dev/null +++ b/packages/react-native-icons/src/components/brand/COCSOUILogo.tsx @@ -0,0 +1,24 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const COCSOUILogo = (props: IconProps) => { + return ( + + + + + + + ); +}; + +COCSOUILogo.displayName = "COCSOUILogo"; diff --git a/packages/react-native-icons/src/components/brand/COCSOUITextLogo.tsx b/packages/react-native-icons/src/components/brand/COCSOUITextLogo.tsx new file mode 100644 index 00000000..4946e1b2 --- /dev/null +++ b/packages/react-native-icons/src/components/brand/COCSOUITextLogo.tsx @@ -0,0 +1,43 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const COCSOUITextLogo = (props: IconProps) => { + return ( + + + + + + + + + + + + + ); +}; + +COCSOUITextLogo.displayName = "COCSOUITextLogo"; diff --git a/packages/react-native-icons/src/components/brand/DrugInfoHorizontalLogo.tsx b/packages/react-native-icons/src/components/brand/DrugInfoHorizontalLogo.tsx new file mode 100644 index 00000000..e3fb78d0 --- /dev/null +++ b/packages/react-native-icons/src/components/brand/DrugInfoHorizontalLogo.tsx @@ -0,0 +1,78 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const DrugInfoHorizontalLogo = (props: IconProps) => { + return ( + + + + + + + + + + + + + + + + + + + + + ); +}; + +DrugInfoHorizontalLogo.displayName = "DrugInfoHorizontalLogo"; diff --git a/packages/react-native-icons/src/components/brand/HMPLogo.tsx b/packages/react-native-icons/src/components/brand/HMPLogo.tsx new file mode 100644 index 00000000..eb4cdd23 --- /dev/null +++ b/packages/react-native-icons/src/components/brand/HMPLogo.tsx @@ -0,0 +1,110 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const HMPLogo = (props: IconProps) => { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ); +}; + +HMPLogo.displayName = "HMPLogo"; diff --git a/packages/react-native-icons/src/components/brand/HuonsLogo.tsx b/packages/react-native-icons/src/components/brand/HuonsLogo.tsx new file mode 100644 index 00000000..963f8d0c --- /dev/null +++ b/packages/react-native-icons/src/components/brand/HuonsLogo.tsx @@ -0,0 +1,82 @@ +import { useId } from "react"; +import { Defs, LinearGradient, Path, Stop, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const HuonsLogo = (props: IconProps) => { + const id1 = useId(); + const id2 = useId(); + const id3 = useId(); + + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + ); +}; + +HuonsLogo.displayName = "HuonsLogo"; diff --git a/packages/react-native-icons/src/components/brand/KakaoLogo.tsx b/packages/react-native-icons/src/components/brand/KakaoLogo.tsx new file mode 100644 index 00000000..fffea7d5 --- /dev/null +++ b/packages/react-native-icons/src/components/brand/KakaoLogo.tsx @@ -0,0 +1,36 @@ +import { useId } from "react"; +import { ClipPath, Defs, G, Path, Rect, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const KakaoLogo = (props: IconProps) => { + const id = useId(); + + return ( + + + + + + + + + + + + + + ); +}; + +KakaoLogo.displayName = "KakaoLogo"; diff --git a/packages/react-native-icons/src/components/brand/KakaoOutlineLogo.tsx b/packages/react-native-icons/src/components/brand/KakaoOutlineLogo.tsx new file mode 100644 index 00000000..d5817cea --- /dev/null +++ b/packages/react-native-icons/src/components/brand/KakaoOutlineLogo.tsx @@ -0,0 +1,20 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const KakaoOutlineLogo = (props: IconProps) => { + return ( + + + + + + ); +}; + +KakaoOutlineLogo.displayName = "KakaoOutlineLogo"; diff --git a/packages/react-native-icons/src/components/brand/NaverLogo.tsx b/packages/react-native-icons/src/components/brand/NaverLogo.tsx new file mode 100644 index 00000000..dc164a20 --- /dev/null +++ b/packages/react-native-icons/src/components/brand/NaverLogo.tsx @@ -0,0 +1,34 @@ +import { useId } from "react"; +import { ClipPath, Defs, G, Path, Rect, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const NaverLogo = (props: IconProps) => { + const id = useId(); + + return ( + + + + + + + + + + + + + + ); +}; + +NaverLogo.displayName = "NaverLogo"; diff --git a/packages/react-native-icons/src/components/brand/NaverOutlineLogo.tsx b/packages/react-native-icons/src/components/brand/NaverOutlineLogo.tsx new file mode 100644 index 00000000..87ac3ada --- /dev/null +++ b/packages/react-native-icons/src/components/brand/NaverOutlineLogo.tsx @@ -0,0 +1,28 @@ +import { useId } from "react"; +import { ClipPath, Defs, G, Path, Rect, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const NaverOutlineLogo = (props: IconProps) => { + const id = useId(); + + return ( + + + + + + + + + + + + + ); +}; + +NaverOutlineLogo.displayName = "NaverOutlineLogo"; diff --git a/packages/react-native-icons/src/components/brand/SeoulPharmaLogo.tsx b/packages/react-native-icons/src/components/brand/SeoulPharmaLogo.tsx new file mode 100644 index 00000000..b8021551 --- /dev/null +++ b/packages/react-native-icons/src/components/brand/SeoulPharmaLogo.tsx @@ -0,0 +1,16 @@ +import { Ellipse, Rect, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const SeoulPharmaLogo = (props: IconProps) => { + return ( + + + + + + + ); +}; + +SeoulPharmaLogo.displayName = "SeoulPharmaLogo"; diff --git a/packages/react-native-icons/src/components/brand/index.ts b/packages/react-native-icons/src/components/brand/index.ts new file mode 100644 index 00000000..e3370f55 --- /dev/null +++ b/packages/react-native-icons/src/components/brand/index.ts @@ -0,0 +1,15 @@ +export * from "./COCSOColorHorizontalLogo"; +export * from "./COCSOColorLogo"; +export * from "./COCSOHorizontalLogo"; +export * from "./COCSOLogo"; +export * from "./COCSOTextLogo"; +export * from "./COCSOUILogo"; +export * from "./COCSOUITextLogo"; +export * from "./DrugInfoHorizontalLogo"; +export * from "./HMPLogo"; +export * from "./HuonsLogo"; +export * from "./KakaoLogo"; +export * from "./KakaoOutlineLogo"; +export * from "./NaverLogo"; +export * from "./NaverOutlineLogo"; +export * from "./SeoulPharmaLogo"; diff --git a/packages/react-native-icons/src/components/semantic/AdminMedsIcon.tsx b/packages/react-native-icons/src/components/semantic/AdminMedsIcon.tsx new file mode 100644 index 00000000..200e5eda --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/AdminMedsIcon.tsx @@ -0,0 +1,27 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const AdminMedsIcon = (props: IconProps) => { + return ( + + + + + + + + + ); +}; + +AdminMedsIcon.displayName = "AdminMedsIcon"; diff --git a/packages/react-native-icons/src/components/semantic/AllInboxIcon.tsx b/packages/react-native-icons/src/components/semantic/AllInboxIcon.tsx new file mode 100644 index 00000000..c5b797a2 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/AllInboxIcon.tsx @@ -0,0 +1,25 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const AllInboxIcon = (props: IconProps) => { + return ( + + + + + + + ); +}; + +AllInboxIcon.displayName = "AllInboxIcon"; diff --git a/packages/react-native-icons/src/components/semantic/ArrowBackwardIcon.tsx b/packages/react-native-icons/src/components/semantic/ArrowBackwardIcon.tsx new file mode 100644 index 00000000..bdbc53a9 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/ArrowBackwardIcon.tsx @@ -0,0 +1,26 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const ArrowBackwardIcon = (props: IconProps) => { + return ( + + + + + + + + ); +}; + +ArrowBackwardIcon.displayName = "ArrowBackwardIcon"; diff --git a/packages/react-native-icons/src/components/semantic/ArrowDownIcon.tsx b/packages/react-native-icons/src/components/semantic/ArrowDownIcon.tsx new file mode 100644 index 00000000..fff73ec2 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/ArrowDownIcon.tsx @@ -0,0 +1,26 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const ArrowDownIcon = (props: IconProps) => { + return ( + + + + + + + + ); +}; + +ArrowDownIcon.displayName = "ArrowDownIcon"; diff --git a/packages/react-native-icons/src/components/semantic/ArrowDropDownIcon.tsx b/packages/react-native-icons/src/components/semantic/ArrowDropDownIcon.tsx new file mode 100644 index 00000000..e1b6ad5d --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/ArrowDropDownIcon.tsx @@ -0,0 +1,15 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const ArrowDropDownIcon = (props: IconProps) => { + return ( + + + + + + ); +}; + +ArrowDropDownIcon.displayName = "ArrowDropDownIcon"; diff --git a/packages/react-native-icons/src/components/semantic/ArrowDropUpIcon.tsx b/packages/react-native-icons/src/components/semantic/ArrowDropUpIcon.tsx new file mode 100644 index 00000000..4f9b0228 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/ArrowDropUpIcon.tsx @@ -0,0 +1,15 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const ArrowDropUpIcon = (props: IconProps) => { + return ( + + + + + + ); +}; + +ArrowDropUpIcon.displayName = "ArrowDropUpIcon"; diff --git a/packages/react-native-icons/src/components/semantic/ArrowForwardIcon.tsx b/packages/react-native-icons/src/components/semantic/ArrowForwardIcon.tsx new file mode 100644 index 00000000..ec20ea09 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/ArrowForwardIcon.tsx @@ -0,0 +1,26 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const ArrowForwardIcon = (props: IconProps) => { + return ( + + + + + + + + ); +}; + +ArrowForwardIcon.displayName = "ArrowForwardIcon"; diff --git a/packages/react-native-icons/src/components/semantic/ArrowIOSBackwardIcon.tsx b/packages/react-native-icons/src/components/semantic/ArrowIOSBackwardIcon.tsx new file mode 100644 index 00000000..43b69699 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/ArrowIOSBackwardIcon.tsx @@ -0,0 +1,24 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const ArrowIOSBackwardIcon = (props: IconProps) => { + return ( + + + + + + ); +}; + +ArrowIOSBackwardIcon.displayName = "ArrowIOSBackwardIcon"; diff --git a/packages/react-native-icons/src/components/semantic/ArrowIOSForwardIcon.tsx b/packages/react-native-icons/src/components/semantic/ArrowIOSForwardIcon.tsx new file mode 100644 index 00000000..5110e4f2 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/ArrowIOSForwardIcon.tsx @@ -0,0 +1,24 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const ArrowIOSForwardIcon = (props: IconProps) => { + return ( + + + + + + ); +}; + +ArrowIOSForwardIcon.displayName = "ArrowIOSForwardIcon"; diff --git a/packages/react-native-icons/src/components/semantic/ArrowUpIcon.tsx b/packages/react-native-icons/src/components/semantic/ArrowUpIcon.tsx new file mode 100644 index 00000000..f38a937a --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/ArrowUpIcon.tsx @@ -0,0 +1,26 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const ArrowUpIcon = (props: IconProps) => { + return ( + + + + + + + + ); +}; + +ArrowUpIcon.displayName = "ArrowUpIcon"; diff --git a/packages/react-native-icons/src/components/semantic/AutoRenewIcon.tsx b/packages/react-native-icons/src/components/semantic/AutoRenewIcon.tsx new file mode 100644 index 00000000..269257c1 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/AutoRenewIcon.tsx @@ -0,0 +1,25 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const AutoRenewIcon = (props: IconProps) => { + return ( + + + + + + + ); +}; + +AutoRenewIcon.displayName = "AutoRenewIcon"; diff --git a/packages/react-native-icons/src/components/semantic/BusinessMessagesIcon.tsx b/packages/react-native-icons/src/components/semantic/BusinessMessagesIcon.tsx new file mode 100644 index 00000000..b1ea5fb1 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/BusinessMessagesIcon.tsx @@ -0,0 +1,26 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const BusinessMessagesIcon = (props: IconProps) => { + return ( + + + + + + + + ); +}; + +BusinessMessagesIcon.displayName = "BusinessMessagesIcon"; diff --git a/packages/react-native-icons/src/components/semantic/CalculateIcon.tsx b/packages/react-native-icons/src/components/semantic/CalculateIcon.tsx new file mode 100644 index 00000000..c8f37aa3 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/CalculateIcon.tsx @@ -0,0 +1,31 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const CalculateIcon = (props: IconProps) => { + return ( + + + + + + + + + + + + + ); +}; + +CalculateIcon.displayName = "CalculateIcon"; diff --git a/packages/react-native-icons/src/components/semantic/CalendarMonthIcon.tsx b/packages/react-native-icons/src/components/semantic/CalendarMonthIcon.tsx new file mode 100644 index 00000000..b674d391 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/CalendarMonthIcon.tsx @@ -0,0 +1,30 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const CalendarMonthIcon = (props: IconProps) => { + return ( + + + + + + + + + + + + ); +}; + +CalendarMonthIcon.displayName = "CalendarMonthIcon"; diff --git a/packages/react-native-icons/src/components/semantic/ChangeCircleIcon.tsx b/packages/react-native-icons/src/components/semantic/ChangeCircleIcon.tsx new file mode 100644 index 00000000..5584dc94 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/ChangeCircleIcon.tsx @@ -0,0 +1,28 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const ChangeCircleIcon = (props: IconProps) => { + return ( + + + + + + + + + + ); +}; + +ChangeCircleIcon.displayName = "ChangeCircleIcon"; diff --git a/packages/react-native-icons/src/components/semantic/CheckCircleIcon.tsx b/packages/react-native-icons/src/components/semantic/CheckCircleIcon.tsx new file mode 100644 index 00000000..7891bbec --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/CheckCircleIcon.tsx @@ -0,0 +1,15 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const CheckCircleIcon = (props: IconProps) => { + return ( + + + + + + ); +}; + +CheckCircleIcon.displayName = "CheckCircleIcon"; diff --git a/packages/react-native-icons/src/components/semantic/CheckIcon.tsx b/packages/react-native-icons/src/components/semantic/CheckIcon.tsx new file mode 100644 index 00000000..42aa3dae --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/CheckIcon.tsx @@ -0,0 +1,24 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const CheckIcon = (props: IconProps) => { + return ( + + + + + + ); +}; + +CheckIcon.displayName = "CheckIcon"; diff --git a/packages/react-native-icons/src/components/semantic/CheckIndeterminateSmallIcon.tsx b/packages/react-native-icons/src/components/semantic/CheckIndeterminateSmallIcon.tsx new file mode 100644 index 00000000..0c798360 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/CheckIndeterminateSmallIcon.tsx @@ -0,0 +1,24 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const CheckIndeterminateSmallIcon = (props: IconProps) => { + return ( + + + + + + ); +}; + +CheckIndeterminateSmallIcon.displayName = "CheckIndeterminateSmallIcon"; diff --git a/packages/react-native-icons/src/components/semantic/CheckbookIcon.tsx b/packages/react-native-icons/src/components/semantic/CheckbookIcon.tsx new file mode 100644 index 00000000..23f3b597 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/CheckbookIcon.tsx @@ -0,0 +1,28 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const CheckbookIcon = (props: IconProps) => { + return ( + + + + + + + + + + ); +}; + +CheckbookIcon.displayName = "CheckbookIcon"; diff --git a/packages/react-native-icons/src/components/semantic/CloseIcon.tsx b/packages/react-native-icons/src/components/semantic/CloseIcon.tsx new file mode 100644 index 00000000..ddb81997 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/CloseIcon.tsx @@ -0,0 +1,25 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const CloseIcon = (props: IconProps) => { + return ( + + + + + + + ); +}; + +CloseIcon.displayName = "CloseIcon"; diff --git a/packages/react-native-icons/src/components/semantic/ContentCopyIcon.tsx b/packages/react-native-icons/src/components/semantic/ContentCopyIcon.tsx new file mode 100644 index 00000000..0980fad7 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/ContentCopyIcon.tsx @@ -0,0 +1,25 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const ContentCopyIcon = (props: IconProps) => { + return ( + + + + + + + ); +}; + +ContentCopyIcon.displayName = "ContentCopyIcon"; diff --git a/packages/react-native-icons/src/components/semantic/DeleteIcon.tsx b/packages/react-native-icons/src/components/semantic/DeleteIcon.tsx new file mode 100644 index 00000000..811ae97e --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/DeleteIcon.tsx @@ -0,0 +1,28 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const DeleteIcon = (props: IconProps) => { + return ( + + + + + + + + + + ); +}; + +DeleteIcon.displayName = "DeleteIcon"; diff --git a/packages/react-native-icons/src/components/semantic/DirectionsRunIcon.tsx b/packages/react-native-icons/src/components/semantic/DirectionsRunIcon.tsx new file mode 100644 index 00000000..e5f32829 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/DirectionsRunIcon.tsx @@ -0,0 +1,27 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const DirectionsRunIcon = (props: IconProps) => { + return ( + + + + + + + + + ); +}; + +DirectionsRunIcon.displayName = "DirectionsRunIcon"; diff --git a/packages/react-native-icons/src/components/semantic/DockToRightIcon.tsx b/packages/react-native-icons/src/components/semantic/DockToRightIcon.tsx new file mode 100644 index 00000000..bfb3e8a6 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/DockToRightIcon.tsx @@ -0,0 +1,25 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const DockToRightIcon = (props: IconProps) => { + return ( + + + + + + + ); +}; + +DockToRightIcon.displayName = "DockToRightIcon"; diff --git a/packages/react-native-icons/src/components/semantic/DocumentScannerIcon.tsx b/packages/react-native-icons/src/components/semantic/DocumentScannerIcon.tsx new file mode 100644 index 00000000..7cc47098 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/DocumentScannerIcon.tsx @@ -0,0 +1,30 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const DocumentScannerIcon = (props: IconProps) => { + return ( + + + + + + + + + + + + ); +}; + +DocumentScannerIcon.displayName = "DocumentScannerIcon"; diff --git a/packages/react-native-icons/src/components/semantic/DollarIcon.tsx b/packages/react-native-icons/src/components/semantic/DollarIcon.tsx new file mode 100644 index 00000000..237e1f45 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/DollarIcon.tsx @@ -0,0 +1,27 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const DollarIcon = (props: IconProps) => { + return ( + + + + + + + + + ); +}; + +DollarIcon.displayName = "DollarIcon"; diff --git a/packages/react-native-icons/src/components/semantic/DomainIcon.tsx b/packages/react-native-icons/src/components/semantic/DomainIcon.tsx new file mode 100644 index 00000000..10ff613e --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/DomainIcon.tsx @@ -0,0 +1,34 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const DomainIcon = (props: IconProps) => { + return ( + + + + + + + + + + + + + + + + ); +}; + +DomainIcon.displayName = "DomainIcon"; diff --git a/packages/react-native-icons/src/components/semantic/DownloadIcon.tsx b/packages/react-native-icons/src/components/semantic/DownloadIcon.tsx new file mode 100644 index 00000000..313e6d46 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/DownloadIcon.tsx @@ -0,0 +1,26 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const DownloadIcon = (props: IconProps) => { + return ( + + + + + + + + ); +}; + +DownloadIcon.displayName = "DownloadIcon"; diff --git a/packages/react-native-icons/src/components/semantic/EditDocumentIcon.tsx b/packages/react-native-icons/src/components/semantic/EditDocumentIcon.tsx new file mode 100644 index 00000000..e73c5527 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/EditDocumentIcon.tsx @@ -0,0 +1,26 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const EditDocumentIcon = (props: IconProps) => { + return ( + + + + + + + + ); +}; + +EditDocumentIcon.displayName = "EditDocumentIcon"; diff --git a/packages/react-native-icons/src/components/semantic/EditNoteIcon.tsx b/packages/react-native-icons/src/components/semantic/EditNoteIcon.tsx new file mode 100644 index 00000000..6664cab9 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/EditNoteIcon.tsx @@ -0,0 +1,27 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const EditNoteIcon = (props: IconProps) => { + return ( + + + + + + + + + ); +}; + +EditNoteIcon.displayName = "EditNoteIcon"; diff --git a/packages/react-native-icons/src/components/semantic/ExternalLinkIcon.tsx b/packages/react-native-icons/src/components/semantic/ExternalLinkIcon.tsx new file mode 100644 index 00000000..76409f3f --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/ExternalLinkIcon.tsx @@ -0,0 +1,27 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const ExternalLinkIcon = (props: IconProps) => { + return ( + + + + + + + + + ); +}; + +ExternalLinkIcon.displayName = "ExternalLinkIcon"; diff --git a/packages/react-native-icons/src/components/semantic/FileSaveIcon.tsx b/packages/react-native-icons/src/components/semantic/FileSaveIcon.tsx new file mode 100644 index 00000000..3aecd743 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/FileSaveIcon.tsx @@ -0,0 +1,27 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const FileSaveIcon = (props: IconProps) => { + return ( + + + + + + + + + ); +}; + +FileSaveIcon.displayName = "FileSaveIcon"; diff --git a/packages/react-native-icons/src/components/semantic/HospitalIcon.tsx b/packages/react-native-icons/src/components/semantic/HospitalIcon.tsx new file mode 100644 index 00000000..9a234a31 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/HospitalIcon.tsx @@ -0,0 +1,27 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const HospitalIcon = (props: IconProps) => { + return ( + + + + + + + + + ); +}; + +HospitalIcon.displayName = "HospitalIcon"; diff --git a/packages/react-native-icons/src/components/semantic/HubIcon.tsx b/packages/react-native-icons/src/components/semantic/HubIcon.tsx new file mode 100644 index 00000000..ebbce127 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/HubIcon.tsx @@ -0,0 +1,35 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const HubIcon = (props: IconProps) => { + return ( + + + + + + + + + + + + + + + + + ); +}; + +HubIcon.displayName = "HubIcon"; diff --git a/packages/react-native-icons/src/components/semantic/InfoIcon.tsx b/packages/react-native-icons/src/components/semantic/InfoIcon.tsx new file mode 100644 index 00000000..e2f9706a --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/InfoIcon.tsx @@ -0,0 +1,26 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const InfoIcon = (props: IconProps) => { + return ( + + + + + + + + ); +}; + +InfoIcon.displayName = "InfoIcon"; diff --git a/packages/react-native-icons/src/components/semantic/KeyboardArrowDownIcon.tsx b/packages/react-native-icons/src/components/semantic/KeyboardArrowDownIcon.tsx new file mode 100644 index 00000000..35936135 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/KeyboardArrowDownIcon.tsx @@ -0,0 +1,24 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const KeyboardArrowDownIcon = (props: IconProps) => { + return ( + + + + + + ); +}; + +KeyboardArrowDownIcon.displayName = "KeyboardArrowDownIcon"; diff --git a/packages/react-native-icons/src/components/semantic/LinkIcon.tsx b/packages/react-native-icons/src/components/semantic/LinkIcon.tsx new file mode 100644 index 00000000..aff00035 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/LinkIcon.tsx @@ -0,0 +1,26 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const LinkIcon = (props: IconProps) => { + return ( + + + + + + + + ); +}; + +LinkIcon.displayName = "LinkIcon"; diff --git a/packages/react-native-icons/src/components/semantic/MedicationIcon.tsx b/packages/react-native-icons/src/components/semantic/MedicationIcon.tsx new file mode 100644 index 00000000..94756273 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/MedicationIcon.tsx @@ -0,0 +1,27 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const MedicationIcon = (props: IconProps) => { + return ( + + + + + + + + + ); +}; + +MedicationIcon.displayName = "MedicationIcon"; diff --git a/packages/react-native-icons/src/components/semantic/MenuIcon.tsx b/packages/react-native-icons/src/components/semantic/MenuIcon.tsx new file mode 100644 index 00000000..501c88e8 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/MenuIcon.tsx @@ -0,0 +1,26 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const MenuIcon = (props: IconProps) => { + return ( + + + + + + + + ); +}; + +MenuIcon.displayName = "MenuIcon"; diff --git a/packages/react-native-icons/src/components/semantic/MoreHorizIcon.tsx b/packages/react-native-icons/src/components/semantic/MoreHorizIcon.tsx new file mode 100644 index 00000000..30c8ea1f --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/MoreHorizIcon.tsx @@ -0,0 +1,26 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const MoreHorizIcon = (props: IconProps) => { + return ( + + + + + + + + ); +}; + +MoreHorizIcon.displayName = "MoreHorizIcon"; diff --git a/packages/react-native-icons/src/components/semantic/NetworkNodeIcon.tsx b/packages/react-native-icons/src/components/semantic/NetworkNodeIcon.tsx new file mode 100644 index 00000000..ed81106e --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/NetworkNodeIcon.tsx @@ -0,0 +1,29 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const NetworkNodeIcon = (props: IconProps) => { + return ( + + + + + + + + + + + ); +}; + +NetworkNodeIcon.displayName = "NetworkNodeIcon"; diff --git a/packages/react-native-icons/src/components/semantic/OpenInNewIcon.tsx b/packages/react-native-icons/src/components/semantic/OpenInNewIcon.tsx new file mode 100644 index 00000000..0b2c6a23 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/OpenInNewIcon.tsx @@ -0,0 +1,26 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const OpenInNewIcon = (props: IconProps) => { + return ( + + + + + + + + ); +}; + +OpenInNewIcon.displayName = "OpenInNewIcon"; diff --git a/packages/react-native-icons/src/components/semantic/OutpatientMedIcon.tsx b/packages/react-native-icons/src/components/semantic/OutpatientMedIcon.tsx new file mode 100644 index 00000000..3659a4cc --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/OutpatientMedIcon.tsx @@ -0,0 +1,30 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const OutpatientMedIcon = (props: IconProps) => { + return ( + + + + + + + + + + + + ); +}; + +OutpatientMedIcon.displayName = "OutpatientMedIcon"; diff --git a/packages/react-native-icons/src/components/semantic/PencilIcon.tsx b/packages/react-native-icons/src/components/semantic/PencilIcon.tsx new file mode 100644 index 00000000..936395ec --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/PencilIcon.tsx @@ -0,0 +1,25 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const PencilIcon = (props: IconProps) => { + return ( + + + + + + + ); +}; + +PencilIcon.displayName = "PencilIcon"; diff --git a/packages/react-native-icons/src/components/semantic/PercentIcon.tsx b/packages/react-native-icons/src/components/semantic/PercentIcon.tsx new file mode 100644 index 00000000..576caa9d --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/PercentIcon.tsx @@ -0,0 +1,26 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const PercentIcon = (props: IconProps) => { + return ( + + + + + + + + ); +}; + +PercentIcon.displayName = "PercentIcon"; diff --git a/packages/react-native-icons/src/components/semantic/PersonEditIcon.tsx b/packages/react-native-icons/src/components/semantic/PersonEditIcon.tsx new file mode 100644 index 00000000..bda42e6a --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/PersonEditIcon.tsx @@ -0,0 +1,26 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const PersonEditIcon = (props: IconProps) => { + return ( + + + + + + + + ); +}; + +PersonEditIcon.displayName = "PersonEditIcon"; diff --git a/packages/react-native-icons/src/components/semantic/PersonIcon.tsx b/packages/react-native-icons/src/components/semantic/PersonIcon.tsx new file mode 100644 index 00000000..19e5fcf0 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/PersonIcon.tsx @@ -0,0 +1,25 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const PersonIcon = (props: IconProps) => { + return ( + + + + + + + ); +}; + +PersonIcon.displayName = "PersonIcon"; diff --git a/packages/react-native-icons/src/components/semantic/PieChartIcon.tsx b/packages/react-native-icons/src/components/semantic/PieChartIcon.tsx new file mode 100644 index 00000000..830bd770 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/PieChartIcon.tsx @@ -0,0 +1,27 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const PieChartIcon = (props: IconProps) => { + return ( + + + + + + + + + ); +}; + +PieChartIcon.displayName = "PieChartIcon"; diff --git a/packages/react-native-icons/src/components/semantic/PlugConnectIcon.tsx b/packages/react-native-icons/src/components/semantic/PlugConnectIcon.tsx new file mode 100644 index 00000000..ae7d42c0 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/PlugConnectIcon.tsx @@ -0,0 +1,29 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const PlugConnectIcon = (props: IconProps) => { + return ( + + + + + + + + + + + ); +}; + +PlugConnectIcon.displayName = "PlugConnectIcon"; diff --git a/packages/react-native-icons/src/components/semantic/PlusIcon.tsx b/packages/react-native-icons/src/components/semantic/PlusIcon.tsx new file mode 100644 index 00000000..801fd0ff --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/PlusIcon.tsx @@ -0,0 +1,25 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const PlusIcon = (props: IconProps) => { + return ( + + + + + + + ); +}; + +PlusIcon.displayName = "PlusIcon"; diff --git a/packages/react-native-icons/src/components/semantic/RefreshIcon.tsx b/packages/react-native-icons/src/components/semantic/RefreshIcon.tsx new file mode 100644 index 00000000..39956e01 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/RefreshIcon.tsx @@ -0,0 +1,25 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const RefreshIcon = (props: IconProps) => { + return ( + + + + + + + ); +}; + +RefreshIcon.displayName = "RefreshIcon"; diff --git a/packages/react-native-icons/src/components/semantic/ReleaseAlertIcon.tsx b/packages/react-native-icons/src/components/semantic/ReleaseAlertIcon.tsx new file mode 100644 index 00000000..60ce38e1 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/ReleaseAlertIcon.tsx @@ -0,0 +1,26 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const ReleaseAlertIcon = (props: IconProps) => { + return ( + + + + + + + + ); +}; + +ReleaseAlertIcon.displayName = "ReleaseAlertIcon"; diff --git a/packages/react-native-icons/src/components/semantic/RemoveCircleIcon.tsx b/packages/react-native-icons/src/components/semantic/RemoveCircleIcon.tsx new file mode 100644 index 00000000..70e05106 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/RemoveCircleIcon.tsx @@ -0,0 +1,15 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const RemoveCircleIcon = (props: IconProps) => { + return ( + + + + + + ); +}; + +RemoveCircleIcon.displayName = "RemoveCircleIcon"; diff --git a/packages/react-native-icons/src/components/semantic/SatelliteAltIcon.tsx b/packages/react-native-icons/src/components/semantic/SatelliteAltIcon.tsx new file mode 100644 index 00000000..1d85a593 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/SatelliteAltIcon.tsx @@ -0,0 +1,29 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const SatelliteAltIcon = (props: IconProps) => { + return ( + + + + + + + + + + + ); +}; + +SatelliteAltIcon.displayName = "SatelliteAltIcon"; diff --git a/packages/react-native-icons/src/components/semantic/SearchIcon.tsx b/packages/react-native-icons/src/components/semantic/SearchIcon.tsx new file mode 100644 index 00000000..701d000b --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/SearchIcon.tsx @@ -0,0 +1,25 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const SearchIcon = (props: IconProps) => { + return ( + + + + + + + ); +}; + +SearchIcon.displayName = "SearchIcon"; diff --git a/packages/react-native-icons/src/components/semantic/SelectorIcon.tsx b/packages/react-native-icons/src/components/semantic/SelectorIcon.tsx new file mode 100644 index 00000000..dbd83f32 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/SelectorIcon.tsx @@ -0,0 +1,26 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const SelectorIcon = (props: IconProps) => { + return ( + + + + + + + + ); +}; + +SelectorIcon.displayName = "SelectorIcon"; diff --git a/packages/react-native-icons/src/components/semantic/SettingsBackupRestoreIcon.tsx b/packages/react-native-icons/src/components/semantic/SettingsBackupRestoreIcon.tsx new file mode 100644 index 00000000..f5908a41 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/SettingsBackupRestoreIcon.tsx @@ -0,0 +1,26 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const SettingsBackupRestoreIcon = (props: IconProps) => { + return ( + + + + + + + + ); +}; + +SettingsBackupRestoreIcon.displayName = "SettingsBackupRestoreIcon"; diff --git a/packages/react-native-icons/src/components/semantic/SettingsIcon.tsx b/packages/react-native-icons/src/components/semantic/SettingsIcon.tsx new file mode 100644 index 00000000..327eb381 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/SettingsIcon.tsx @@ -0,0 +1,25 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const SettingsIcon = (props: IconProps) => { + return ( + + + + + + + ); +}; + +SettingsIcon.displayName = "SettingsIcon"; diff --git a/packages/react-native-icons/src/components/semantic/SideNavigationIcon.tsx b/packages/react-native-icons/src/components/semantic/SideNavigationIcon.tsx new file mode 100644 index 00000000..5620011e --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/SideNavigationIcon.tsx @@ -0,0 +1,15 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const SideNavigationIcon = (props: IconProps) => { + return ( + + + + + + ); +}; + +SideNavigationIcon.displayName = "SideNavigationIcon"; diff --git a/packages/react-native-icons/src/components/semantic/SpaceDashboardIcon.tsx b/packages/react-native-icons/src/components/semantic/SpaceDashboardIcon.tsx new file mode 100644 index 00000000..246ce3d8 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/SpaceDashboardIcon.tsx @@ -0,0 +1,26 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const SpaceDashboardIcon = (props: IconProps) => { + return ( + + + + + + + + ); +}; + +SpaceDashboardIcon.displayName = "SpaceDashboardIcon"; diff --git a/packages/react-native-icons/src/components/semantic/Stat1Icon.tsx b/packages/react-native-icons/src/components/semantic/Stat1Icon.tsx new file mode 100644 index 00000000..1de36508 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/Stat1Icon.tsx @@ -0,0 +1,24 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const Stat1Icon = (props: IconProps) => { + return ( + + + + + + ); +}; + +Stat1Icon.displayName = "Stat1Icon"; diff --git a/packages/react-native-icons/src/components/semantic/StatMinus1Icon.tsx b/packages/react-native-icons/src/components/semantic/StatMinus1Icon.tsx new file mode 100644 index 00000000..a2f406e9 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/StatMinus1Icon.tsx @@ -0,0 +1,24 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const StatMinus1Icon = (props: IconProps) => { + return ( + + + + + + ); +}; + +StatMinus1Icon.displayName = "StatMinus1Icon"; diff --git a/packages/react-native-icons/src/components/semantic/SupervisedUserCircleIcon.tsx b/packages/react-native-icons/src/components/semantic/SupervisedUserCircleIcon.tsx new file mode 100644 index 00000000..ced858de --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/SupervisedUserCircleIcon.tsx @@ -0,0 +1,27 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const SupervisedUserCircleIcon = (props: IconProps) => { + return ( + + + + + + + + + ); +}; + +SupervisedUserCircleIcon.displayName = "SupervisedUserCircleIcon"; diff --git a/packages/react-native-icons/src/components/semantic/SystemUpdateIcon.tsx b/packages/react-native-icons/src/components/semantic/SystemUpdateIcon.tsx new file mode 100644 index 00000000..2573f1c2 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/SystemUpdateIcon.tsx @@ -0,0 +1,30 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const SystemUpdateIcon = (props: IconProps) => { + return ( + + + + + + + + + + + + ); +}; + +SystemUpdateIcon.displayName = "SystemUpdateIcon"; diff --git a/packages/react-native-icons/src/components/semantic/TextSelectJumpToEndIcon.tsx b/packages/react-native-icons/src/components/semantic/TextSelectJumpToEndIcon.tsx new file mode 100644 index 00000000..025b3c7b --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/TextSelectJumpToEndIcon.tsx @@ -0,0 +1,26 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const TextSelectJumpToEndIcon = (props: IconProps) => { + return ( + + + + + + + + ); +}; + +TextSelectJumpToEndIcon.displayName = "TextSelectJumpToEndIcon"; diff --git a/packages/react-native-icons/src/components/semantic/ThumbUpIcon.tsx b/packages/react-native-icons/src/components/semantic/ThumbUpIcon.tsx new file mode 100644 index 00000000..a97625e7 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/ThumbUpIcon.tsx @@ -0,0 +1,24 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const ThumbUpIcon = (props: IconProps) => { + return ( + + + + + + ); +}; + +ThumbUpIcon.displayName = "ThumbUpIcon"; diff --git a/packages/react-native-icons/src/components/semantic/TrendingUpIcon.tsx b/packages/react-native-icons/src/components/semantic/TrendingUpIcon.tsx new file mode 100644 index 00000000..20d6eb2f --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/TrendingUpIcon.tsx @@ -0,0 +1,25 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const TrendingUpIcon = (props: IconProps) => { + return ( + + + + + + + ); +}; + +TrendingUpIcon.displayName = "TrendingUpIcon"; diff --git a/packages/react-native-icons/src/components/semantic/VerifiedIcon.tsx b/packages/react-native-icons/src/components/semantic/VerifiedIcon.tsx new file mode 100644 index 00000000..eab9df7f --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/VerifiedIcon.tsx @@ -0,0 +1,15 @@ +import { Path, Svg } from "react-native-svg"; +import { Icon } from "../../icon"; +import type { IconProps } from "../../types"; + +export const VerifiedIcon = (props: IconProps) => { + return ( + + + + + + ); +}; + +VerifiedIcon.displayName = "VerifiedIcon"; diff --git a/packages/react-native-icons/src/components/semantic/index.ts b/packages/react-native-icons/src/components/semantic/index.ts new file mode 100644 index 00000000..4074ac07 --- /dev/null +++ b/packages/react-native-icons/src/components/semantic/index.ts @@ -0,0 +1,68 @@ +export * from "./AdminMedsIcon"; +export * from "./AllInboxIcon"; +export * from "./ArrowBackwardIcon"; +export * from "./ArrowDownIcon"; +export * from "./ArrowDropDownIcon"; +export * from "./ArrowDropUpIcon"; +export * from "./ArrowForwardIcon"; +export * from "./ArrowIOSBackwardIcon"; +export * from "./ArrowIOSForwardIcon"; +export * from "./ArrowUpIcon"; +export * from "./AutoRenewIcon"; +export * from "./BusinessMessagesIcon"; +export * from "./CalculateIcon"; +export * from "./CalendarMonthIcon"; +export * from "./ChangeCircleIcon"; +export * from "./CheckbookIcon"; +export * from "./CheckCircleIcon"; +export * from "./CheckIcon"; +export * from "./CheckIndeterminateSmallIcon"; +export * from "./CloseIcon"; +export * from "./ContentCopyIcon"; +export * from "./DeleteIcon"; +export * from "./DirectionsRunIcon"; +export * from "./DockToRightIcon"; +export * from "./DocumentScannerIcon"; +export * from "./DollarIcon"; +export * from "./DomainIcon"; +export * from "./DownloadIcon"; +export * from "./EditDocumentIcon"; +export * from "./EditNoteIcon"; +export * from "./ExternalLinkIcon"; +export * from "./FileSaveIcon"; +export * from "./HospitalIcon"; +export * from "./HubIcon"; +export * from "./InfoIcon"; +export * from "./KeyboardArrowDownIcon"; +export * from "./LinkIcon"; +export * from "./MedicationIcon"; +export * from "./MenuIcon"; +export * from "./MoreHorizIcon"; +export * from "./NetworkNodeIcon"; +export * from "./OpenInNewIcon"; +export * from "./OutpatientMedIcon"; +export * from "./PencilIcon"; +export * from "./PercentIcon"; +export * from "./PersonEditIcon"; +export * from "./PersonIcon"; +export * from "./PieChartIcon"; +export * from "./PlugConnectIcon"; +export * from "./PlusIcon"; +export * from "./RefreshIcon"; +export * from "./ReleaseAlertIcon"; +export * from "./RemoveCircleIcon"; +export * from "./SatelliteAltIcon"; +export * from "./SearchIcon"; +export * from "./SelectorIcon"; +export * from "./SettingsBackupRestoreIcon"; +export * from "./SettingsIcon"; +export * from "./SideNavigationIcon"; +export * from "./SpaceDashboardIcon"; +export * from "./Stat1Icon"; +export * from "./StatMinus1Icon"; +export * from "./SupervisedUserCircleIcon"; +export * from "./SystemUpdateIcon"; +export * from "./TextSelectJumpToEndIcon"; +export * from "./ThumbUpIcon"; +export * from "./TrendingUpIcon"; +export * from "./VerifiedIcon"; diff --git a/packages/react-native-icons/src/exports.test.ts b/packages/react-native-icons/src/exports.test.ts new file mode 100644 index 00000000..ca58c6ab --- /dev/null +++ b/packages/react-native-icons/src/exports.test.ts @@ -0,0 +1,23 @@ +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import { describe, expect, it } from "vitest"; + +const currentDir = path.dirname(fileURLToPath(import.meta.url)); +const packageRoot = path.resolve(currentDir, ".."); + +const readLines = (filePath: string): string[] => + fs + .readFileSync(filePath, "utf8") + .split("\n") + .map((line) => line.trim()) + .filter(Boolean); + +describe("react-native-icons public exports", () => { + it("keeps root export groups for brand and semantic icons", () => { + const lines = readLines(path.join(packageRoot, "src/index.ts")); + + expect(lines).toContain('export * from "./components/brand";'); + expect(lines).toContain('export * from "./components/semantic";'); + }); +}); diff --git a/packages/react-native-icons/src/generation-contract.test.ts b/packages/react-native-icons/src/generation-contract.test.ts new file mode 100644 index 00000000..1a798b59 --- /dev/null +++ b/packages/react-native-icons/src/generation-contract.test.ts @@ -0,0 +1,49 @@ +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import { describe, expect, it } from "vitest"; + +const currentDir = path.dirname(fileURLToPath(import.meta.url)); +const repoRoot = path.resolve(currentDir, "../../.."); +const sourceRoot = path.join(repoRoot, "packages/react-icons/src/components"); +const targetRoot = path.join( + repoRoot, + "packages/react-native-icons/src/components" +); + +const toNames = (directoryPath: string): string[] => + fs + .readdirSync(directoryPath) + .filter((fileName) => fileName.endsWith(".tsx")) + .map((fileName) => fileName.replace(".tsx", "")) + .sort((a, b) => a.localeCompare(b)); + +const toExportNames = (indexPath: string): string[] => + fs + .readFileSync(indexPath, "utf8") + .split("\n") + .filter((line) => line.startsWith('export * from "./')) + .map((line) => line.replace('export * from "./', "").replace('";', "")) + .sort((a, b) => a.localeCompare(b)); + +describe("react-native-icons generation contract", () => { + it("keeps brand and semantic file parity with react-icons source", () => { + expect(toNames(path.join(targetRoot, "brand"))).toEqual( + toNames(path.join(sourceRoot, "brand")) + ); + + expect(toNames(path.join(targetRoot, "semantic"))).toEqual( + toNames(path.join(sourceRoot, "semantic")) + ); + }); + + it("keeps barrel exports aligned with generated files", () => { + expect(toExportNames(path.join(targetRoot, "brand/index.ts"))).toEqual( + toNames(path.join(targetRoot, "brand")) + ); + + expect(toExportNames(path.join(targetRoot, "semantic/index.ts"))).toEqual( + toNames(path.join(targetRoot, "semantic")) + ); + }); +}); diff --git a/packages/react-native-icons/src/icon.tsx b/packages/react-native-icons/src/icon.tsx new file mode 100644 index 00000000..b8496ab1 --- /dev/null +++ b/packages/react-native-icons/src/icon.tsx @@ -0,0 +1,35 @@ +import { + Children, + cloneElement, + isValidElement, + type ReactElement, + type ReactNode, +} from "react"; +import type { SvgProps } from "react-native-svg"; +import type { IconProps } from "./types"; + +const DEFAULT_ICON_SIZE = 16; + +type IconRootProps = IconProps & { + children: ReactNode; +}; + +export function Icon({ + children, + width, + height, + size = DEFAULT_ICON_SIZE, + ...props +}: IconRootProps) { + const child = Children.only(children); + + if (!isValidElement(child)) { + return null; + } + + return cloneElement(child as ReactElement, { + ...props, + height: height ?? size, + width: width ?? size, + }); +} diff --git a/packages/react-native-icons/src/index.ts b/packages/react-native-icons/src/index.ts new file mode 100644 index 00000000..8b3f5e70 --- /dev/null +++ b/packages/react-native-icons/src/index.ts @@ -0,0 +1,2 @@ +export * from "./components/brand"; +export * from "./components/semantic"; diff --git a/packages/react-native-icons/src/types.ts b/packages/react-native-icons/src/types.ts new file mode 100644 index 00000000..e1ecd3f1 --- /dev/null +++ b/packages/react-native-icons/src/types.ts @@ -0,0 +1,7 @@ +import type { SvgProps } from "react-native-svg"; + +export type IconProps = SvgProps & { + size?: number; + width?: number | string; + height?: number | string; +}; diff --git a/packages/react-native-icons/tsconfig.build.json b/packages/react-native-icons/tsconfig.build.json new file mode 100644 index 00000000..e20972af --- /dev/null +++ b/packages/react-native-icons/tsconfig.build.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "declaration": true, + "emitDeclarationOnly": false, + "outDir": "./dist", + "rootDir": "./src" + } +} diff --git a/packages/react-native-icons/tsconfig.json b/packages/react-native-icons/tsconfig.json new file mode 100644 index 00000000..b15ba8b1 --- /dev/null +++ b/packages/react-native-icons/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2022"], + "module": "ESNext", + "moduleResolution": "bundler", + "strict": true, + "jsx": "react-jsx", + "rootDir": "./src", + "allowImportingTsExtensions": false, + "skipLibCheck": true, + "types": ["react", "node", "vitest/globals"] + }, + "include": ["src/**/*"], + "exclude": ["dist", "node_modules"] +} diff --git a/packages/react-native/README.md b/packages/react-native/README.md new file mode 100644 index 00000000..ad5b5202 --- /dev/null +++ b/packages/react-native/README.md @@ -0,0 +1,27 @@ +## `@cocso-ui/react-native` + +React Native design-system package for Expo-based applications. + +### Installation + +```bash +pnpm add @cocso-ui/react-native react react-native +``` + +### Usage + +```tsx +import { Box, Button } from '@cocso-ui/react-native'; + +export function ExampleScreen() { + return ( + + + ); +} +``` + +### Design Token Source + +`@cocso-ui/react-native` consumes generated values derived from `@cocso-ui/css/token.css`. diff --git a/packages/react-native/package.json b/packages/react-native/package.json new file mode 100644 index 00000000..b7982f6c --- /dev/null +++ b/packages/react-native/package.json @@ -0,0 +1,45 @@ +{ + "name": "@cocso-ui/react-native", + "version": "0.1.0", + "repository": { + "type": "git", + "url": "git+https://github.com/cocso/cocso-ui.git", + "directory": "packages/react-native" + }, + "type": "module", + "scripts": { + "prebuild": "node ./scripts/generate-tokens.mjs", + "build": "tsc -p tsconfig.build.json", + "check-types": "tsc -p tsconfig.json --noEmit", + "test": "vitest run", + "test:coverage": "vitest run --coverage", + "lint": "biome check .", + "lint:fix": "biome check . --write" + }, + "exports": { + ".": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + }, + "./package.json": "./package.json" + }, + "files": [ + "dist" + ], + "peerDependencies": { + "react": "^19.1.1", + "react-native": ">=0.79.0" + }, + "devDependencies": { + "@types/node": "^24.9.1", + "@vitest/coverage-v8": "^4.0.18", + "@types/react": "^19.2.14", + "react": "^19.2.4", + "react-native": "^0.82.0", + "typescript": "^5.9.3", + "vitest": "^4.0.18" + }, + "publishConfig": { + "access": "public" + } +} diff --git a/packages/react-native/scripts/generate-tokens.mjs b/packages/react-native/scripts/generate-tokens.mjs new file mode 100644 index 00000000..006780b5 --- /dev/null +++ b/packages/react-native/scripts/generate-tokens.mjs @@ -0,0 +1,32 @@ +import { readFileSync, writeFileSync } from "node:fs"; +import { resolve } from "node:path"; + +const sourcePath = resolve(import.meta.dirname, "../../css/token.css"); +const destinationPath = resolve( + import.meta.dirname, + "../src/theme/tokens.generated.ts" +); + +const tokenCss = readFileSync(sourcePath, "utf8"); +const variablePattern = /(--cocso-[a-z0-9-]+):\s*([^;]+);/g; + +const entries = []; + +for (const match of tokenCss.matchAll(variablePattern)) { + const name = match[1]; + const value = match[2].trim(); + entries.push([name, value]); +} + +entries.sort(([left], [right]) => left.localeCompare(right)); + +const body = entries + .map(([name, value]) => ` "${name}": "${value.replaceAll('"', '\\"')}",`) + .join("\n"); + +const output = `export const rawCssVariables = { +${body} +} as const; +`; + +writeFileSync(destinationPath, output, "utf8"); diff --git a/packages/react-native/src/components/badge/badge.tsx b/packages/react-native/src/components/badge/badge.tsx new file mode 100644 index 00000000..cdfead0e --- /dev/null +++ b/packages/react-native/src/components/badge/badge.tsx @@ -0,0 +1,62 @@ +import { StyleSheet, View } from "react-native"; +import { colors, radius, spacing } from "../../theme"; +import { Text } from "../text"; + +export const BADGE_VARIANT = { + INFO: "info", + SUCCESS: "success", + WARNING: "warning", + DANGER: "danger", +} as const; + +export type BadgeVariant = (typeof BADGE_VARIANT)[keyof typeof BADGE_VARIANT]; + +const variantMap = { + [BADGE_VARIANT.INFO]: { + backgroundColor: colors.info100, + textColor: colors.info700, + }, + [BADGE_VARIANT.SUCCESS]: { + backgroundColor: colors.success100, + textColor: colors.success700, + }, + [BADGE_VARIANT.WARNING]: { + backgroundColor: colors.warning100, + textColor: colors.warning700, + }, + [BADGE_VARIANT.DANGER]: { + backgroundColor: colors.danger100, + textColor: colors.danger700, + }, +} as const; + +export interface BadgeProps { + label: string; + variant?: BadgeVariant; +} + +export function Badge({ label, variant = BADGE_VARIANT.INFO }: BadgeProps) { + const palette = variantMap[variant]; + + return ( + + + {label} + + + ); +} + +const styles = StyleSheet.create({ + base: { + alignItems: "center", + borderRadius: radius.r3, + paddingHorizontal: spacing.s4, + paddingVertical: spacing.s2, + }, +}); diff --git a/packages/react-native/src/components/badge/index.ts b/packages/react-native/src/components/badge/index.ts new file mode 100644 index 00000000..80844a4e --- /dev/null +++ b/packages/react-native/src/components/badge/index.ts @@ -0,0 +1 @@ +export * from "./badge"; diff --git a/packages/react-native/src/components/box/box.tsx b/packages/react-native/src/components/box/box.tsx new file mode 100644 index 00000000..fc77a261 --- /dev/null +++ b/packages/react-native/src/components/box/box.tsx @@ -0,0 +1,40 @@ +import { forwardRef } from "react"; +import type { View, ViewProps, ViewStyle } from "react-native"; +import { View as RNView } from "react-native"; +import { + type ColorToken, + colors, + type SpacingToken, + spacing, +} from "../../theme"; + +const resolveSpacing = ( + value: SpacingToken | number | undefined +): number | undefined => { + if (value === undefined) { + return undefined; + } + + return typeof value === "number" ? value : spacing[value]; +}; + +export type BoxProps = ViewProps & { + padding?: SpacingToken | number; + paddingX?: SpacingToken | number; + paddingY?: SpacingToken | number; + backgroundColor?: ColorToken; +}; + +export const Box = forwardRef(function Box( + { style, padding, paddingX, paddingY, backgroundColor, ...props }: BoxProps, + ref +) { + const composedStyle: ViewStyle = { + padding: resolveSpacing(padding), + paddingHorizontal: resolveSpacing(paddingX), + paddingVertical: resolveSpacing(paddingY), + backgroundColor: backgroundColor ? colors[backgroundColor] : undefined, + }; + + return ; +}); diff --git a/packages/react-native/src/components/box/index.ts b/packages/react-native/src/components/box/index.ts new file mode 100644 index 00000000..2d7d09e1 --- /dev/null +++ b/packages/react-native/src/components/box/index.ts @@ -0,0 +1 @@ +export * from "./box"; diff --git a/packages/react-native/src/components/button/button.tsx b/packages/react-native/src/components/button/button.tsx new file mode 100644 index 00000000..f20977cb --- /dev/null +++ b/packages/react-native/src/components/button/button.tsx @@ -0,0 +1,105 @@ +import type { ReactNode } from "react"; +import type { + GestureResponderEvent, + PressableProps, + PressableStateCallbackType, + ViewStyle, +} from "react-native"; +import { Pressable, StyleSheet } from "react-native"; +import { + BUTTON_VARIANT, + type ButtonVariant, + type ColorToken, + colors, + radius, + spacing, +} from "../../theme"; +import { Text } from "../text"; + +const variantTokens: Record< + ButtonVariant, + { + background: ColorToken; + foreground: ColorToken; + border?: ColorToken; + } +> = { + [BUTTON_VARIANT.PRIMARY]: { + background: "primary950", + foreground: "white", + }, + [BUTTON_VARIANT.SECONDARY]: { + background: "neutral100", + foreground: "neutral950", + border: "neutral200", + }, + [BUTTON_VARIANT.GHOST]: { + background: "transparent", + foreground: "neutral900", + }, +}; + +export type ButtonProps = Omit & { + children?: ReactNode; + label?: string; + variant?: ButtonVariant; + onPress?: (event: GestureResponderEvent) => void; +}; + +export function Button({ + children, + label, + variant = BUTTON_VARIANT.PRIMARY, + onPress, + disabled, + ...props +}: ButtonProps) { + const token = variantTokens[variant]; + + const resolveOpacity = (pressed: boolean): number => { + if (disabled) { + return 0.5; + } + + if (pressed) { + return 0.85; + } + + return 1; + }; + + return ( + ({ + ...styles.base, + backgroundColor: colors[token.background], + borderColor: token.border ? colors[token.border] : "transparent", + borderWidth: token.border ? 1 : 0, + opacity: resolveOpacity(pressed), + })} + {...props} + > + {children ? ( + children + ) : ( + + {label} + + )} + + ); +} + +const styles = StyleSheet.create({ + base: { + alignItems: "center", + borderRadius: radius.r4, + justifyContent: "center", + minHeight: 44, + paddingHorizontal: spacing.s10, + paddingVertical: spacing.s5, + }, +}); diff --git a/packages/react-native/src/components/button/index.ts b/packages/react-native/src/components/button/index.ts new file mode 100644 index 00000000..98d55acd --- /dev/null +++ b/packages/react-native/src/components/button/index.ts @@ -0,0 +1 @@ +export * from "./button"; diff --git a/packages/react-native/src/components/glass-view/glass-view.tsx b/packages/react-native/src/components/glass-view/glass-view.tsx new file mode 100644 index 00000000..9bd6910b --- /dev/null +++ b/packages/react-native/src/components/glass-view/glass-view.tsx @@ -0,0 +1,102 @@ +import type { ComponentType, ReactNode } from "react"; +import type { StyleProp, ViewProps, ViewStyle } from "react-native"; +import { StyleSheet, View } from "react-native"; +import { + colors, + GLASS_INTENSITY, + type GlassIntensity, + radius, + spacing, +} from "../../theme"; + +const GLASS_LAYER: Record< + GlassIntensity, + { backgroundColor: string; borderColor: string } +> = { + [GLASS_INTENSITY.LOW]: { + backgroundColor: colors.whiteAlpha20, + borderColor: colors.whiteAlpha40, + }, + [GLASS_INTENSITY.MEDIUM]: { + backgroundColor: colors.whiteAlpha40, + borderColor: colors.whiteAlpha50, + }, + [GLASS_INTENSITY.HIGH]: { + backgroundColor: colors.whiteAlpha60, + borderColor: colors.whiteAlpha70, + }, +}; + +export type GlassViewProps = ViewProps & { + intensity?: GlassIntensity; + BlurComponent?: ComponentType< + ViewProps & { + children: ReactNode; + intensity: number; + style?: StyleProp; + } + >; +}; + +export function GlassView({ + intensity = GLASS_INTENSITY.MEDIUM, + BlurComponent, + style, + children, + ...props +}: GlassViewProps) { + const layer = GLASS_LAYER[intensity]; + + if (BlurComponent) { + let blurIntensity = 20; + + if (intensity === GLASS_INTENSITY.MEDIUM) { + blurIntensity = 35; + } + + if (intensity === GLASS_INTENSITY.HIGH) { + blurIntensity = 50; + } + + return ( + + {children} + + ); + } + + return ( + + {children} + + ); +} + +const styles = StyleSheet.create({ + base: { + borderRadius: radius.r5, + borderWidth: 1, + overflow: "hidden", + padding: spacing.s8, + } as ViewStyle, +}); diff --git a/packages/react-native/src/components/glass-view/index.ts b/packages/react-native/src/components/glass-view/index.ts new file mode 100644 index 00000000..fd840843 --- /dev/null +++ b/packages/react-native/src/components/glass-view/index.ts @@ -0,0 +1 @@ +export * from "./glass-view"; diff --git a/packages/react-native/src/components/input/index.ts b/packages/react-native/src/components/input/index.ts new file mode 100644 index 00000000..4ce4a889 --- /dev/null +++ b/packages/react-native/src/components/input/index.ts @@ -0,0 +1 @@ +export * from "./input"; diff --git a/packages/react-native/src/components/input/input.tsx b/packages/react-native/src/components/input/input.tsx new file mode 100644 index 00000000..086b5c58 --- /dev/null +++ b/packages/react-native/src/components/input/input.tsx @@ -0,0 +1,62 @@ +import { forwardRef } from "react"; +import type { + TextInput as RNTextInputInstance, + TextInputProps, +} from "react-native"; +import { TextInput as RNTextInput, StyleSheet } from "react-native"; +import { colors, radius, spacing } from "../../theme"; + +export const INPUT_SIZE = { + SMALL: "small", + MEDIUM: "medium", + LARGE: "large", +} as const; + +export type InputSize = (typeof INPUT_SIZE)[keyof typeof INPUT_SIZE]; + +const inputSizeStyle = { + [INPUT_SIZE.SMALL]: { + minHeight: 36, + paddingHorizontal: spacing.s6, + paddingVertical: spacing.s3, + }, + [INPUT_SIZE.MEDIUM]: { + minHeight: 44, + paddingHorizontal: spacing.s7, + paddingVertical: spacing.s4, + }, + [INPUT_SIZE.LARGE]: { + minHeight: 52, + paddingHorizontal: spacing.s8, + paddingVertical: spacing.s5, + }, +} as const; + +export type InputProps = TextInputProps & { + size?: InputSize; +}; + +export const Input = forwardRef(function Input( + { size = INPUT_SIZE.MEDIUM, style, ...props }: InputProps, + ref +) { + return ( + + ); +}); + +const styles = StyleSheet.create({ + base: { + backgroundColor: colors.white, + borderColor: colors.neutral200, + borderRadius: radius.r4, + borderWidth: 1, + color: colors.textPrimary, + fontSize: 14, + }, +}); diff --git a/packages/react-native/src/components/modal/index.ts b/packages/react-native/src/components/modal/index.ts new file mode 100644 index 00000000..031608e2 --- /dev/null +++ b/packages/react-native/src/components/modal/index.ts @@ -0,0 +1 @@ +export * from "./modal"; diff --git a/packages/react-native/src/components/modal/modal.tsx b/packages/react-native/src/components/modal/modal.tsx new file mode 100644 index 00000000..153856ed --- /dev/null +++ b/packages/react-native/src/components/modal/modal.tsx @@ -0,0 +1,89 @@ +import type { ReactNode } from "react"; +import type { ModalProps as RNModalProps, ViewStyle } from "react-native"; +import { Pressable, Modal as RNModal, StyleSheet, View } from "react-native"; +import { + colors, + RN_MODAL_PRESENTATION, + type RNModalPresentation, + radius, + spacing, + zIndex, +} from "../../theme"; + +const MODAL_PRESENTATION_STYLE: Record< + RNModalPresentation, + RNModalProps["presentationStyle"] +> = { + [RN_MODAL_PRESENTATION.FULL_SCREEN]: "fullScreen", + [RN_MODAL_PRESENTATION.PAGE_SHEET]: "pageSheet", + [RN_MODAL_PRESENTATION.FORM_SHEET]: "formSheet", + [RN_MODAL_PRESENTATION.OVER_FULL_SCREEN]: "overFullScreen", +}; + +export interface ModalProps { + children: ReactNode; + onRequestClose: () => void; + presentation?: RNModalPresentation; + visible: boolean; +} + +export function Modal({ + visible, + onRequestClose, + presentation = RN_MODAL_PRESENTATION.OVER_FULL_SCREEN, + children, +}: ModalProps) { + const transparent = presentation === RN_MODAL_PRESENTATION.OVER_FULL_SCREEN; + + return ( + + {transparent ? ( + + + + {children} + + + ) : ( + + {children} + + )} + + ); +} + +const styles = StyleSheet.create({ + overlay: { + alignItems: "center", + backgroundColor: colors.blackAlpha40, + flex: 1, + justifyContent: "center", + padding: spacing.s8, + zIndex: zIndex.dialog, + }, + content: { + backgroundColor: colors.white, + borderRadius: radius.r5, + maxWidth: 640, + padding: spacing.s8, + width: "100%", + } as ViewStyle, + contentTransparent: { + backgroundColor: colors.whiteAlpha80, + }, + sheetContainer: { + backgroundColor: colors.white, + flex: 1, + }, + sheetContent: { + flex: 1, + padding: spacing.s8, + }, +}); diff --git a/packages/react-native/src/components/stack/index.ts b/packages/react-native/src/components/stack/index.ts new file mode 100644 index 00000000..dc9eefda --- /dev/null +++ b/packages/react-native/src/components/stack/index.ts @@ -0,0 +1 @@ +export * from "./stack"; diff --git a/packages/react-native/src/components/stack/stack.tsx b/packages/react-native/src/components/stack/stack.tsx new file mode 100644 index 00000000..8c29a4ce --- /dev/null +++ b/packages/react-native/src/components/stack/stack.tsx @@ -0,0 +1,39 @@ +import { forwardRef } from "react"; +import type { View, ViewProps, ViewStyle } from "react-native"; +import { View as RNView } from "react-native"; +import { type SpacingToken, spacing } from "../../theme"; + +export const STACK_DIRECTION = { + ROW: "row", + COLUMN: "column", +} as const; + +export type StackDirection = + (typeof STACK_DIRECTION)[keyof typeof STACK_DIRECTION]; + +const resolveGap = ( + gap: SpacingToken | number | undefined +): number | undefined => { + if (gap === undefined) { + return undefined; + } + + return typeof gap === "number" ? gap : spacing[gap]; +}; + +export type StackProps = ViewProps & { + direction?: StackDirection; + gap?: SpacingToken | number; +}; + +export const Stack = forwardRef(function Stack( + { style, direction = STACK_DIRECTION.COLUMN, gap, ...props }: StackProps, + ref +) { + const composedStyle: ViewStyle = { + flexDirection: direction, + gap: resolveGap(gap), + }; + + return ; +}); diff --git a/packages/react-native/src/components/text/index.ts b/packages/react-native/src/components/text/index.ts new file mode 100644 index 00000000..e20cd3f8 --- /dev/null +++ b/packages/react-native/src/components/text/index.ts @@ -0,0 +1 @@ +export * from "./text"; diff --git a/packages/react-native/src/components/text/text.tsx b/packages/react-native/src/components/text/text.tsx new file mode 100644 index 00000000..e6fca76d --- /dev/null +++ b/packages/react-native/src/components/text/text.tsx @@ -0,0 +1,45 @@ +import { forwardRef } from "react"; +import type { + Text as RNTextInstance, + TextProps as RNTextProps, + TextStyle, +} from "react-native"; +import { Text as RNText } from "react-native"; +import { + type ColorToken, + colors, + type FontSizeToken, + type FontWeightToken, + fontSize, + fontWeight, + type LineHeightToken, + lineHeight, +} from "../../theme"; + +export type TextProps = RNTextProps & { + color?: ColorToken; + size?: FontSizeToken; + weight?: FontWeightToken; + lineHeightToken?: LineHeightToken; +}; + +export const Text = forwardRef(function Text( + { + style, + color = "textPrimary", + size = 14, + weight = "normal", + lineHeightToken = "normal", + ...props + }: TextProps, + ref +) { + const composedStyle: TextStyle = { + color: colors[color], + fontSize: fontSize[size], + fontWeight: String(fontWeight[weight]) as TextStyle["fontWeight"], + lineHeight: fontSize[size] * lineHeight[lineHeightToken], + }; + + return ; +}); diff --git a/packages/react-native/src/exports.test.ts b/packages/react-native/src/exports.test.ts new file mode 100644 index 00000000..e911dac6 --- /dev/null +++ b/packages/react-native/src/exports.test.ts @@ -0,0 +1,32 @@ +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import { describe, expect, it } from "vitest"; + +const currentDir = path.dirname(fileURLToPath(import.meta.url)); +const packageRoot = path.resolve(currentDir, ".."); + +const readLines = (filePath: string): string[] => + fs + .readFileSync(filePath, "utf8") + .split("\n") + .map((line) => line.trim()) + .filter(Boolean); + +describe("react-native public exports", () => { + it("keeps root component export contracts", () => { + const indexLines = readLines(path.join(packageRoot, "src/index.ts")); + + expect(indexLines).toContain('export * from "./components/badge";'); + expect(indexLines).toContain('export * from "./components/input";'); + expect(indexLines).toContain('export * from "./components/button";'); + expect(indexLines).toContain('export * from "./components/modal";'); + }); + + it("keeps theme export contracts", () => { + const themeLines = readLines(path.join(packageRoot, "src/theme/index.ts")); + + expect(themeLines).toContain('export * from "./enums";'); + expect(themeLines).toContain('export * from "./tokens";'); + }); +}); diff --git a/packages/react-native/src/index.ts b/packages/react-native/src/index.ts new file mode 100644 index 00000000..614b8810 --- /dev/null +++ b/packages/react-native/src/index.ts @@ -0,0 +1,9 @@ +export * from "./components/badge"; +export * from "./components/box"; +export * from "./components/button"; +export * from "./components/glass-view"; +export * from "./components/input"; +export * from "./components/modal"; +export * from "./components/stack"; +export * from "./components/text"; +export * from "./theme"; diff --git a/packages/react-native/src/theme/enums.ts b/packages/react-native/src/theme/enums.ts new file mode 100644 index 00000000..89c2ffce --- /dev/null +++ b/packages/react-native/src/theme/enums.ts @@ -0,0 +1,27 @@ +export const RN_MODAL_PRESENTATION = { + FULL_SCREEN: "fullScreen", + PAGE_SHEET: "pageSheet", + FORM_SHEET: "formSheet", + OVER_FULL_SCREEN: "overFullScreen", +} as const; + +export type RNModalPresentation = + (typeof RN_MODAL_PRESENTATION)[keyof typeof RN_MODAL_PRESENTATION]; + +export const GLASS_INTENSITY = { + LOW: "low", + MEDIUM: "medium", + HIGH: "high", +} as const; + +export type GlassIntensity = + (typeof GLASS_INTENSITY)[keyof typeof GLASS_INTENSITY]; + +export const BUTTON_VARIANT = { + PRIMARY: "primary", + SECONDARY: "secondary", + GHOST: "ghost", +} as const; + +export type ButtonVariant = + (typeof BUTTON_VARIANT)[keyof typeof BUTTON_VARIANT]; diff --git a/packages/react-native/src/theme/index.ts b/packages/react-native/src/theme/index.ts new file mode 100644 index 00000000..1763cb3c --- /dev/null +++ b/packages/react-native/src/theme/index.ts @@ -0,0 +1,2 @@ +export * from "./enums"; +export * from "./tokens"; diff --git a/packages/react-native/src/theme/tokens.generated.ts b/packages/react-native/src/theme/tokens.generated.ts new file mode 100644 index 00000000..4dc95d44 --- /dev/null +++ b/packages/react-native/src/theme/tokens.generated.ts @@ -0,0 +1,153 @@ +export const rawCssVariables = { + "--cocso-color-alpha-shadow1": "rgba(0, 0, 0, 0.04)", + "--cocso-color-alpha-shadow2": "rgba(0, 0, 0, 0.08)", + "--cocso-color-alpha-shadow3": "rgba(0, 0, 0, 0.12)", + "--cocso-color-black": "#000000", + "--cocso-color-black-alpha-10": "rgba(0, 0, 0, 0.1)", + "--cocso-color-black-alpha-20": "rgba(0, 0, 0, 0.2)", + "--cocso-color-black-alpha-30": "rgba(0, 0, 0, 0.3)", + "--cocso-color-black-alpha-40": "rgba(0, 0, 0, 0.4)", + "--cocso-color-black-alpha-5": "rgba(0, 0, 0, 0.05)", + "--cocso-color-black-alpha-50": "rgba(0, 0, 0, 0.5)", + "--cocso-color-black-alpha-60": "rgba(0, 0, 0, 0.6)", + "--cocso-color-black-alpha-70": "rgba(0, 0, 0, 0.7)", + "--cocso-color-black-alpha-80": "rgba(0, 0, 0, 0.8)", + "--cocso-color-black-alpha-90": "rgba(0, 0, 0, 0.9)", + "--cocso-color-danger-100": "#fcdfd9", + "--cocso-color-danger-200": "#f7afa1", + "--cocso-color-danger-300": "#f48771", + "--cocso-color-danger-400": "#f05f42", + "--cocso-color-danger-50": "#fdefec", + "--cocso-color-danger-500": "#de3412", + "--cocso-color-danger-600": "#bd2c0f", + "--cocso-color-danger-700": "#8a240f", + "--cocso-color-danger-800": "#5c180a", + "--cocso-color-danger-900": "#390d05", + "--cocso-color-danger-950": "#260903", + "--cocso-color-info-100": "#d8e5fd", + "--cocso-color-info-200": "#b1cefb", + "--cocso-color-info-300": "#86aff9", + "--cocso-color-info-400": "#4c87f6", + "--cocso-color-info-50": "#ecf2fe", + "--cocso-color-info-500": "#256ef4", + "--cocso-color-info-600": "#0b50d0", + "--cocso-color-info-700": "#083891", + "--cocso-color-info-800": "#052561", + "--cocso-color-info-900": "#03163a", + "--cocso-color-info-950": "#020f27", + "--cocso-color-neutral-100": "#e6e8ea", + "--cocso-color-neutral-200": "#cdd1d5", + "--cocso-color-neutral-300": "#b1b8be", + "--cocso-color-neutral-400": "#8a949e", + "--cocso-color-neutral-50": "#f4f5f6", + "--cocso-color-neutral-500": "#6d7882", + "--cocso-color-neutral-600": "#58616a", + "--cocso-color-neutral-700": "#464c53", + "--cocso-color-neutral-800": "#33363d", + "--cocso-color-neutral-900": "#1e2124", + "--cocso-color-neutral-950": "#131416", + "--cocso-color-primary-100": "var(--cocso-color-neutral-100)", + "--cocso-color-primary-200": "var(--cocso-color-neutral-200)", + "--cocso-color-primary-300": "var(--cocso-color-neutral-300)", + "--cocso-color-primary-400": "var(--cocso-color-neutral-400)", + "--cocso-color-primary-50": "var(--cocso-color-neutral-50)", + "--cocso-color-primary-500": "var(--cocso-color-neutral-500)", + "--cocso-color-primary-600": "var(--cocso-color-neutral-600)", + "--cocso-color-primary-700": "var(--cocso-color-neutral-700)", + "--cocso-color-primary-800": "var(--cocso-color-neutral-800)", + "--cocso-color-primary-900": "var(--cocso-color-neutral-900)", + "--cocso-color-primary-950": "var(--cocso-color-neutral-950)", + "--cocso-color-success-100": "#d8eedd", + "--cocso-color-success-200": "#a9dab4", + "--cocso-color-success-300": "#7ec88e", + "--cocso-color-success-400": "#3fa654", + "--cocso-color-success-50": "#eaf6ec", + "--cocso-color-success-500": "#228738", + "--cocso-color-success-600": "#267337", + "--cocso-color-success-700": "#285d33", + "--cocso-color-success-800": "#1f4727", + "--cocso-color-success-900": "#122b18", + "--cocso-color-success-950": "#0e2012", + "--cocso-color-text-primary": "var(--cocso-color-neutral-950)", + "--cocso-color-text-secondary": "var(--cocso-color-neutral-600)", + "--cocso-color-text-tertiary": "var(--cocso-color-neutral-400)", + "--cocso-color-warning-100": "#ffe0a3", + "--cocso-color-warning-200": "#ffc95c", + "--cocso-color-warning-300": "#ffb114", + "--cocso-color-warning-400": "#c78500", + "--cocso-color-warning-50": "#fff3db", + "--cocso-color-warning-500": "#9e6a00", + "--cocso-color-warning-600": "#8a5c00", + "--cocso-color-warning-700": "#614100", + "--cocso-color-warning-800": "#422c00", + "--cocso-color-warning-900": "#2e1f00", + "--cocso-color-warning-950": "#241800", + "--cocso-color-white": "#ffffff", + "--cocso-color-white-alpha-10": "rgba(255, 255, 255, 0.1)", + "--cocso-color-white-alpha-20": "rgba(255, 255, 255, 0.2)", + "--cocso-color-white-alpha-30": "rgba(255, 255, 255, 0.3)", + "--cocso-color-white-alpha-40": "rgba(255, 255, 255, 0.4)", + "--cocso-color-white-alpha-5": "rgba(255, 255, 255, 0.05)", + "--cocso-color-white-alpha-50": "rgba(255, 255, 255, 0.5)", + "--cocso-color-white-alpha-60": "rgba(255, 255, 255, 0.6)", + "--cocso-color-white-alpha-70": "rgba(255, 255, 255, 0.7)", + "--cocso-color-white-alpha-80": "rgba(255, 255, 255, 0.8)", + "--cocso-color-white-alpha-90": "rgba(255, 255, 255, 0.9)", + "--cocso-font-weight-black": "900", + "--cocso-font-weight-bold": "700", + "--cocso-font-weight-extrabold": "800", + "--cocso-font-weight-extralight": "200", + "--cocso-font-weight-light": "300", + "--cocso-font-weight-medium": "500", + "--cocso-font-weight-regular": "400", + "--cocso-font-weight-semibold": "600", + "--cocso-font-weight-thin": "100", + "--cocso-radius-1": "2px", + "--cocso-radius-2": "4px", + "--cocso-radius-3": "6px", + "--cocso-radius-4": "8px", + "--cocso-radius-5": "12px", + "--cocso-radius-6": "16px", + "--cocso-radius-full": "1000px", + "--cocso-shadow-blur-3": "16px", + "--cocso-shadow-blur-4": "24px", + "--cocso-shadow-lg": "0px 0px 2px 0px var(--cocso-color-alpha-shadow2), 0px var(--cocso-shadow-y-4) var(--cocso-shadow-blur-4) 0px var(--cocso-color-alpha-shadow3)", + "--cocso-shadow-md": "0px 0px 2px 0px var(--cocso-color-alpha-shadow2), 0px var(--cocso-shadow-y-3) var(--cocso-shadow-blur-3) 0px var(--cocso-color-alpha-shadow3)", + "--cocso-shadow-sm": "0px 0px 2px 0px var(--cocso-color-alpha-shadow1), 0px 4px 8px 0px var(--cocso-color-alpha-shadow2)", + "--cocso-shadow-xs": "0px 1px 2px 0px var(--cocso-color-alpha-shadow1), 0px 0px 2px 0px var(--cocso-color-alpha-shadow1)", + "--cocso-shadow-y-3": "8px", + "--cocso-shadow-y-4": "16px", + "--cocso-spacing-0": "0px", + "--cocso-spacing-1": "1px", + "--cocso-spacing-10": "24px", + "--cocso-spacing-11": "28px", + "--cocso-spacing-12": "32px", + "--cocso-spacing-13": "36px", + "--cocso-spacing-14": "40px", + "--cocso-spacing-15": "44px", + "--cocso-spacing-16": "48px", + "--cocso-spacing-17": "56px", + "--cocso-spacing-18": "64px", + "--cocso-spacing-19": "72px", + "--cocso-spacing-2": "2px", + "--cocso-spacing-20": "80px", + "--cocso-spacing-21": "96px", + "--cocso-spacing-3": "4px", + "--cocso-spacing-4": "6px", + "--cocso-spacing-5": "8px", + "--cocso-spacing-6": "10px", + "--cocso-spacing-7": "12px", + "--cocso-spacing-8": "16px", + "--cocso-spacing-9": "20px", + "--cocso-spacing-max": "1000px", + "--cocso-text-base": "16px", + "--cocso-text-sm": "14px", + "--cocso-text-xs": "12px", + "--cocso-z-index-above": "1", + "--cocso-z-index-base": "0", + "--cocso-z-index-behind": "-1", + "--cocso-z-index-dialog": "200", + "--cocso-z-index-dialog-content": "250", + "--cocso-z-index-header": "50", + "--cocso-z-index-overlay": "100", +} as const; diff --git a/packages/react-native/src/theme/tokens.test.ts b/packages/react-native/src/theme/tokens.test.ts new file mode 100644 index 00000000..5dd74a4b --- /dev/null +++ b/packages/react-native/src/theme/tokens.test.ts @@ -0,0 +1,48 @@ +import { describe, expect, it } from "vitest"; +import { + colors, + fontSize, + fontWeight, + lineHeight, + radius, + shadows, + spacing, + zIndex, +} from "./tokens"; + +describe("theme tokens", () => { + it("resolves aliased colors from css variables", () => { + expect(colors.primary500).toBe(colors.neutral500); + expect(colors.textPrimary).toBe(colors.neutral950); + }); + + it("exposes spacing and radius as numeric values", () => { + expect(spacing.s8).toBe(16); + expect(spacing.max).toBe(1000); + expect(radius.r4).toBe(8); + expect(radius.full).toBe(1000); + }); + + it("exposes typography scales with predictable mappings", () => { + expect(fontSize[12]).toBe(12); + expect(fontSize[14]).toBe(14); + expect(fontWeight.semibold).toBe(600); + expect(lineHeight.relaxed).toBe(1.625); + }); + + it("exports native-friendly shadow objects", () => { + expect(shadows.md).toEqual({ + elevation: 4, + shadowColor: colors.black, + shadowOffset: { width: 0, height: 8 }, + shadowOpacity: 0.12, + shadowRadius: 16, + }); + }); + + it("keeps z-index layering contract", () => { + expect(zIndex.behind).toBeLessThan(zIndex.base); + expect(zIndex.overlay).toBeGreaterThan(zIndex.header); + expect(zIndex.dialogContent).toBeGreaterThan(zIndex.dialog); + }); +}); diff --git a/packages/react-native/src/theme/tokens.ts b/packages/react-native/src/theme/tokens.ts new file mode 100644 index 00000000..f55ea5a4 --- /dev/null +++ b/packages/react-native/src/theme/tokens.ts @@ -0,0 +1,296 @@ +import { rawCssVariables } from "./tokens.generated"; + +const FALLBACK_TRANSPARENT = "transparent"; +const CSS_VARIABLE_REFERENCE_PATTERN = /^var\((--cocso-[a-z0-9-]+)\)$/; +const cssVariableMap: Record = rawCssVariables; + +const resolveVariableReference = (value: string): string => { + const match = value.match(CSS_VARIABLE_REFERENCE_PATTERN); + + if (!match) { + return value; + } + + const referencedVariable = match[1]; + const referencedValue = cssVariableMap[referencedVariable]; + + if (!referencedValue) { + return value; + } + + return resolveVariableReference(referencedValue); +}; + +const getColor = (tokenName: string): string => { + const variableName = `--cocso-color-${tokenName}` as const; + const value = cssVariableMap[variableName]; + + if (!value) { + throw new Error(`Missing color token: ${variableName}`); + } + + return resolveVariableReference(value); +}; + +const toNumber = (value: string): number => { + const parsed = Number.parseFloat(value.replace("px", "")); + + if (Number.isNaN(parsed)) { + throw new Error(`Expected numeric token value, received: ${value}`); + } + + return parsed; +}; + +const getNumberToken = (tokenName: string): number => { + const value = cssVariableMap[tokenName]; + + if (!value) { + throw new Error(`Missing numeric token: ${tokenName}`); + } + + return toNumber(resolveVariableReference(value)); +}; + +const createColorScale = (scaleName: string) => ({ + 50: getColor(`${scaleName}-50`), + 100: getColor(`${scaleName}-100`), + 200: getColor(`${scaleName}-200`), + 300: getColor(`${scaleName}-300`), + 400: getColor(`${scaleName}-400`), + 500: getColor(`${scaleName}-500`), + 600: getColor(`${scaleName}-600`), + 700: getColor(`${scaleName}-700`), + 800: getColor(`${scaleName}-800`), + 900: getColor(`${scaleName}-900`), + 950: getColor(`${scaleName}-950`), +}); + +const neutral = createColorScale("neutral"); +const primary = createColorScale("primary"); +const danger = createColorScale("danger"); +const warning = createColorScale("warning"); +const success = createColorScale("success"); +const info = createColorScale("info"); + +export const colors = { + transparent: FALLBACK_TRANSPARENT, + white: getColor("white"), + whiteAlpha5: getColor("white-alpha-5"), + whiteAlpha10: getColor("white-alpha-10"), + whiteAlpha20: getColor("white-alpha-20"), + whiteAlpha30: getColor("white-alpha-30"), + whiteAlpha40: getColor("white-alpha-40"), + whiteAlpha50: getColor("white-alpha-50"), + whiteAlpha60: getColor("white-alpha-60"), + whiteAlpha70: getColor("white-alpha-70"), + whiteAlpha80: getColor("white-alpha-80"), + whiteAlpha90: getColor("white-alpha-90"), + black: getColor("black"), + blackAlpha5: getColor("black-alpha-5"), + blackAlpha10: getColor("black-alpha-10"), + blackAlpha20: getColor("black-alpha-20"), + blackAlpha30: getColor("black-alpha-30"), + blackAlpha40: getColor("black-alpha-40"), + blackAlpha50: getColor("black-alpha-50"), + blackAlpha60: getColor("black-alpha-60"), + blackAlpha70: getColor("black-alpha-70"), + blackAlpha80: getColor("black-alpha-80"), + blackAlpha90: getColor("black-alpha-90"), + neutral50: neutral[50], + neutral100: neutral[100], + neutral200: neutral[200], + neutral300: neutral[300], + neutral400: neutral[400], + neutral500: neutral[500], + neutral600: neutral[600], + neutral700: neutral[700], + neutral800: neutral[800], + neutral900: neutral[900], + neutral950: neutral[950], + primary50: primary[50], + primary100: primary[100], + primary200: primary[200], + primary300: primary[300], + primary400: primary[400], + primary500: primary[500], + primary600: primary[600], + primary700: primary[700], + primary800: primary[800], + primary900: primary[900], + primary950: primary[950], + danger50: danger[50], + danger100: danger[100], + danger200: danger[200], + danger300: danger[300], + danger400: danger[400], + danger500: danger[500], + danger600: danger[600], + danger700: danger[700], + danger800: danger[800], + danger900: danger[900], + danger950: danger[950], + warning50: warning[50], + warning100: warning[100], + warning200: warning[200], + warning300: warning[300], + warning400: warning[400], + warning500: warning[500], + warning600: warning[600], + warning700: warning[700], + warning800: warning[800], + warning900: warning[900], + warning950: warning[950], + success50: success[50], + success100: success[100], + success200: success[200], + success300: success[300], + success400: success[400], + success500: success[500], + success600: success[600], + success700: success[700], + success800: success[800], + success900: success[900], + success950: success[950], + info50: info[50], + info100: info[100], + info200: info[200], + info300: info[300], + info400: info[400], + info500: info[500], + info600: info[600], + info700: info[700], + info800: info[800], + info900: info[900], + info950: info[950], + textPrimary: getColor("text-primary"), + textSecondary: getColor("text-secondary"), + textTertiary: getColor("text-tertiary"), +} as const; + +export type ColorToken = keyof typeof colors; + +export const spacing = { + s0: getNumberToken("--cocso-spacing-0"), + s1: getNumberToken("--cocso-spacing-1"), + s2: getNumberToken("--cocso-spacing-2"), + s3: getNumberToken("--cocso-spacing-3"), + s4: getNumberToken("--cocso-spacing-4"), + s5: getNumberToken("--cocso-spacing-5"), + s6: getNumberToken("--cocso-spacing-6"), + s7: getNumberToken("--cocso-spacing-7"), + s8: getNumberToken("--cocso-spacing-8"), + s9: getNumberToken("--cocso-spacing-9"), + s10: getNumberToken("--cocso-spacing-10"), + s11: getNumberToken("--cocso-spacing-11"), + s12: getNumberToken("--cocso-spacing-12"), + s13: getNumberToken("--cocso-spacing-13"), + s14: getNumberToken("--cocso-spacing-14"), + s15: getNumberToken("--cocso-spacing-15"), + s16: getNumberToken("--cocso-spacing-16"), + s17: getNumberToken("--cocso-spacing-17"), + s18: getNumberToken("--cocso-spacing-18"), + s19: getNumberToken("--cocso-spacing-19"), + s20: getNumberToken("--cocso-spacing-20"), + s21: getNumberToken("--cocso-spacing-21"), + max: getNumberToken("--cocso-spacing-max"), +} as const; + +export type SpacingToken = keyof typeof spacing; + +export const radius = { + r1: getNumberToken("--cocso-radius-1"), + r2: getNumberToken("--cocso-radius-2"), + r3: getNumberToken("--cocso-radius-3"), + r4: getNumberToken("--cocso-radius-4"), + r5: getNumberToken("--cocso-radius-5"), + r6: getNumberToken("--cocso-radius-6"), + full: getNumberToken("--cocso-radius-full"), +} as const; + +export type RadiusToken = keyof typeof radius; + +export const fontSize = { + 12: getNumberToken("--cocso-text-xs"), + 14: getNumberToken("--cocso-text-sm"), + 16: getNumberToken("--cocso-text-base"), +} as const; + +export type FontSizeToken = keyof typeof fontSize; + +export const fontWeight = { + thin: getNumberToken("--cocso-font-weight-thin"), + extralight: getNumberToken("--cocso-font-weight-extralight"), + light: getNumberToken("--cocso-font-weight-light"), + normal: getNumberToken("--cocso-font-weight-regular"), + medium: getNumberToken("--cocso-font-weight-medium"), + semibold: getNumberToken("--cocso-font-weight-semibold"), + bold: getNumberToken("--cocso-font-weight-bold"), + extrabold: getNumberToken("--cocso-font-weight-extrabold"), + black: getNumberToken("--cocso-font-weight-black"), +} as const; + +export type FontWeightToken = keyof typeof fontWeight; + +export const lineHeight = { + none: 1, + tight: 1.25, + snug: 1.375, + normal: 1.5, + relaxed: 1.625, + loose: 2, +} as const; + +export type LineHeightToken = keyof typeof lineHeight; + +export interface ShadowToken { + elevation: number; + shadowColor: string; + shadowOffset: { + height: number; + width: number; + }; + shadowOpacity: number; + shadowRadius: number; +} + +export const shadows: Record<"xs" | "sm" | "md" | "lg", ShadowToken> = { + xs: { + elevation: 1, + shadowColor: colors.black, + shadowOffset: { width: 0, height: 1 }, + shadowOpacity: 0.04, + shadowRadius: 2, + }, + sm: { + elevation: 2, + shadowColor: colors.black, + shadowOffset: { width: 0, height: 4 }, + shadowOpacity: 0.08, + shadowRadius: 8, + }, + md: { + elevation: 4, + shadowColor: colors.black, + shadowOffset: { width: 0, height: 8 }, + shadowOpacity: 0.12, + shadowRadius: 16, + }, + lg: { + elevation: 6, + shadowColor: colors.black, + shadowOffset: { width: 0, height: 16 }, + shadowOpacity: 0.12, + shadowRadius: 24, + }, +}; + +export const zIndex = { + behind: getNumberToken("--cocso-z-index-behind"), + base: getNumberToken("--cocso-z-index-base"), + above: getNumberToken("--cocso-z-index-above"), + header: getNumberToken("--cocso-z-index-header"), + overlay: getNumberToken("--cocso-z-index-overlay"), + dialog: getNumberToken("--cocso-z-index-dialog"), + dialogContent: getNumberToken("--cocso-z-index-dialog-content"), +} as const; diff --git a/packages/react-native/tsconfig.build.json b/packages/react-native/tsconfig.build.json new file mode 100644 index 00000000..7b1abf1f --- /dev/null +++ b/packages/react-native/tsconfig.build.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "declaration": true, + "emitDeclarationOnly": false, + "outDir": "./dist", + "noEmit": false + } +} diff --git a/packages/react-native/tsconfig.json b/packages/react-native/tsconfig.json new file mode 100644 index 00000000..057a3c56 --- /dev/null +++ b/packages/react-native/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2022"], + "module": "ESNext", + "moduleResolution": "bundler", + "strict": true, + "jsx": "react-jsx", + "rootDir": "./src", + "allowImportingTsExtensions": false, + "skipLibCheck": true, + "types": ["react", "react-native", "node", "vitest/globals"] + }, + "include": ["src/**/*"], + "exclude": ["dist", "node_modules"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6b83eae8..10028aa2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,9 +1,5 @@ lockfileVersion: '9.0' -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - importers: .: @@ -44,7 +40,7 @@ importers: devDependencies: '@storybook/react-vite': specifier: ^10.2.17 - version: 10.2.17(esbuild@0.27.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(rollup@4.59.0)(storybook@10.2.17(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 10.2.17(esbuild@0.27.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(rollup@4.59.0)(storybook@10.2.17(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) '@types/react': specifier: ^19.2.14 version: 19.2.14 @@ -59,7 +55,7 @@ importers: version: 5.9.3 vite: specifier: ^7.3.1 - version: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) + version: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) apps/website: dependencies: @@ -89,7 +85,7 @@ importers: version: 16.6.16(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(flexsearch@0.8.212)(lucide-react@0.577.0(react@19.2.4))(next@16.1.6(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6) fumadocs-mdx: specifier: ^14.2.9 - version: 14.2.9(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.14)(fumadocs-core@16.6.16(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(flexsearch@0.8.212)(lucide-react@0.577.0(react@19.2.4))(next@16.1.6(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.1.6(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 14.2.9(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.14)(fumadocs-core@16.6.16(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(flexsearch@0.8.212)(lucide-react@0.577.0(react@19.2.4))(next@16.1.6(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.1.6(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) fumadocs-ui: specifier: ^16.6.16 version: 16.6.16(@types/mdx@2.0.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(fumadocs-core@16.6.16(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(flexsearch@0.8.212)(lucide-react@0.577.0(react@19.2.4))(next@16.1.6(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.1.6(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.1) @@ -157,7 +153,7 @@ importers: version: 25.4.0 '@vitest/coverage-v8': specifier: ^4.0.18 - version: 4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) esbuild: specifier: ^0.27.3 version: 0.27.3 @@ -166,7 +162,7 @@ importers: version: 5.9.3 vitest: specifier: ^4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) ecosystem/mcp: dependencies: @@ -182,13 +178,13 @@ importers: version: 24.12.0 '@vitest/coverage-v8': specifier: ^4.0.8 - version: 4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) typescript: specifier: ^5.9.3 version: 5.9.3 vitest: specifier: ^4.0.8 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) packages/baseframe: {} @@ -211,7 +207,7 @@ importers: version: 22.19.15 '@vitest/coverage-v8': specifier: ^4.0.18 - version: 4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@22.19.15)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@22.19.15)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) esbuild: specifier: ^0.27.3 version: 0.27.3 @@ -223,7 +219,7 @@ importers: version: 5.9.3 vitest: specifier: ^4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@22.19.15)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@22.19.15)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) packages/react: dependencies: @@ -293,7 +289,7 @@ importers: version: 19.2.3(@types/react@19.2.14) '@vitest/coverage-v8': specifier: ^4.0.18 - version: 4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) jsdom: specifier: ^28.1.0 version: 28.1.0 @@ -317,7 +313,7 @@ importers: version: 5.9.3 vitest: specifier: ^4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) packages/react-icons: devDependencies: @@ -355,6 +351,54 @@ importers: specifier: ^5.9.3 version: 5.9.3 + packages/react-native: + devDependencies: + '@types/node': + specifier: ^24.9.1 + version: 24.12.0 + '@types/react': + specifier: ^19.2.14 + version: 19.2.14 + '@vitest/coverage-v8': + specifier: ^4.0.18 + version: 4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) + react: + specifier: ^19.2.4 + version: 19.2.4 + react-native: + specifier: ^0.82.0 + version: 0.82.1(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) + typescript: + specifier: ^5.9.3 + version: 5.9.3 + vitest: + specifier: ^4.0.18 + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) + + packages/react-native-icons: + devDependencies: + '@types/node': + specifier: ^24.9.1 + version: 24.12.0 + '@types/react': + specifier: ^19.2.14 + version: 19.2.14 + '@vitest/coverage-v8': + specifier: ^4.0.18 + version: 4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) + react: + specifier: ^19.2.4 + version: 19.2.4 + react-native-svg: + specifier: ^15.15.0 + version: 15.15.4(react-native@0.82.1(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + typescript: + specifier: ^5.9.3 + version: 5.9.3 + vitest: + specifier: ^4.0.18 + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) + packages: '@acemir/cssom@0.9.31': @@ -464,12 +508,91 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/plugin-syntax-async-generators@7.8.4': + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-bigint@7.8.3': + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-properties@7.12.13': + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-static-block@7.14.5': + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.28.6': + resolution: {integrity: sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-json-strings@7.8.3': + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-jsx@7.28.6': resolution: {integrity: sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-numeric-separator@7.10.4': + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-object-rest-spread@7.8.3': + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3': + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-chaining@7.8.3': + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-private-property-in-object@7.14.5': + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-top-level-await@7.14.5': + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-typescript@7.28.6': resolution: {integrity: sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==} engines: {node: '>=6.9.0'} @@ -1095,6 +1218,42 @@ packages: '@types/node': optional: true + '@isaacs/ttlcache@1.4.1': + resolution: {integrity: sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==} + engines: {node: '>=12'} + + '@istanbuljs/load-nyc-config@1.1.0': + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + + '@jest/create-cache-key-function@29.7.0': + resolution: {integrity: sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/environment@29.7.0': + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/fake-timers@29.7.0': + resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/schemas@29.6.3': + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/transform@29.7.0': + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/types@29.6.3': + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@joshwooding/vite-plugin-react-docgen-typescript@0.6.4': resolution: {integrity: sha512-6PyZBYKnnVNqOSB0YFly+62R7dmov8segT27A+RVTBVd4iAE6kbW9QBJGlyR2yG4D4ohzhZSTIu7BK1UTtmFFA==} peerDependencies: @@ -1114,6 +1273,9 @@ packages: resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} + '@jridgewell/source-map@0.3.11': + resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} + '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} @@ -1805,6 +1967,62 @@ packages: '@radix-ui/rect@1.1.1': resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} + '@react-native/assets-registry@0.82.1': + resolution: {integrity: sha512-B1SRwpntaAcckiatxbjzylvNK562Ayza05gdJCjDQHTiDafa1OABmyB5LHt7qWDOpNkaluD+w11vHF7pBmTpzQ==} + engines: {node: '>= 20.19.4'} + + '@react-native/codegen@0.82.1': + resolution: {integrity: sha512-ezXTN70ygVm9l2m0i+pAlct0RntoV4afftWMGUIeAWLgaca9qItQ54uOt32I/9dBJvzBibT33luIR/pBG0dQvg==} + engines: {node: '>= 20.19.4'} + peerDependencies: + '@babel/core': '*' + + '@react-native/community-cli-plugin@0.82.1': + resolution: {integrity: sha512-H/eMdtOy9nEeX7YVeEG1N2vyCoifw3dr9OV8++xfUElNYV7LtSmJ6AqxZUUfxGJRDFPQvaU/8enmJlM/l11VxQ==} + engines: {node: '>= 20.19.4'} + peerDependencies: + '@react-native-community/cli': '*' + '@react-native/metro-config': '*' + peerDependenciesMeta: + '@react-native-community/cli': + optional: true + '@react-native/metro-config': + optional: true + + '@react-native/debugger-frontend@0.82.1': + resolution: {integrity: sha512-a2O6M7/OZ2V9rdavOHyCQ+10z54JX8+B+apYKCQ6a9zoEChGTxUMG2YzzJ8zZJVvYf1ByWSNxv9Se0dca1hO9A==} + engines: {node: '>= 20.19.4'} + + '@react-native/debugger-shell@0.82.1': + resolution: {integrity: sha512-fdRHAeqqPT93bSrxfX+JHPpCXHApfDUdrXMXhoxlPgSzgXQXJDykIViKhtpu0M6slX6xU/+duq+AtP/qWJRpBw==} + engines: {node: '>= 20.19.4'} + + '@react-native/dev-middleware@0.82.1': + resolution: {integrity: sha512-wuOIzms/Qg5raBV6Ctf2LmgzEOCqdP3p1AYN4zdhMT110c39TVMbunpBaJxm0Kbt2HQ762MQViF9naxk7SBo4w==} + engines: {node: '>= 20.19.4'} + + '@react-native/gradle-plugin@0.82.1': + resolution: {integrity: sha512-KkF/2T1NSn6EJ5ALNT/gx0MHlrntFHv8YdooH9OOGl9HQn5NM0ZmQSr86o5utJsGc7ME3R6p3SaQuzlsFDrn8Q==} + engines: {node: '>= 20.19.4'} + + '@react-native/js-polyfills@0.82.1': + resolution: {integrity: sha512-tf70X7pUodslOBdLN37J57JmDPB/yiZcNDzS2m+4bbQzo8fhx3eG9QEBv5n4fmzqfGAgSB4BWRHgDMXmmlDSVA==} + engines: {node: '>= 20.19.4'} + + '@react-native/normalize-colors@0.82.1': + resolution: {integrity: sha512-CCfTR1uX+Z7zJTdt3DNX9LUXr2zWXsNOyLbwupW2wmRzrxlHRYfmLgTABzRL/cKhh0Ubuwn15o72MQChvCRaHw==} + + '@react-native/virtualized-lists@0.82.1': + resolution: {integrity: sha512-f5zpJg9gzh7JtCbsIwV+4kP3eI0QBuA93JGmwFRd4onQ3DnCjV2J5pYqdWtM95sjSKK1dyik59Gj01lLeKqs1Q==} + engines: {node: '>= 20.19.4'} + peerDependencies: + '@types/react': ^19.1.1 + react: '*' + react-native: '*' + peerDependenciesMeta: + '@types/react': + optional: true + '@redis/bloom@1.2.0': resolution: {integrity: sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg==} peerDependencies: @@ -2051,6 +2269,15 @@ packages: '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + '@sinclair/typebox@0.27.10': + resolution: {integrity: sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==} + + '@sinonjs/commons@3.0.1': + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} + + '@sinonjs/fake-timers@10.3.0': + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} @@ -2278,9 +2505,21 @@ packages: '@types/fs-extra@11.0.4': resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} + '@types/graceful-fs@4.1.9': + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + '@types/istanbul-lib-coverage@2.0.6': + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + + '@types/istanbul-lib-report@3.0.3': + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + + '@types/istanbul-reports@3.0.4': + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + '@types/jsonfile@6.1.4': resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} @@ -2319,6 +2558,9 @@ packages: '@types/resolve@1.20.6': resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==} + '@types/stack-utils@2.0.3': + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} @@ -2328,6 +2570,12 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + '@types/yargs-parser@21.0.3': + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + + '@types/yargs@17.0.35': + resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==} + '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} @@ -2381,6 +2629,10 @@ packages: '@vitest/utils@4.0.18': resolution: {integrity: sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==} + abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + accepts@2.0.0: resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} engines: {node: '>= 0.6'} @@ -2410,6 +2662,9 @@ packages: ajv@8.18.0: resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} + anser@1.4.10: + resolution: {integrity: sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==} + ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} @@ -2434,6 +2689,10 @@ packages: resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} @@ -2455,6 +2714,9 @@ packages: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} + asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} @@ -2470,13 +2732,50 @@ packages: resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} hasBin: true + async-limiter@1.0.1: + resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} + + babel-jest@29.7.0: + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + + babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + + babel-plugin-jest-hoist@29.6.3: + resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + babel-plugin-syntax-hermes-parser@0.32.0: + resolution: {integrity: sha512-m5HthL++AbyeEA2FcdwOLfVFvWYECOBObLHNqdR8ceY4TsEdn4LdX2oTvbB2QJSSElE2AWA/b2MXZ/PF/CqLZg==} + + babel-preset-current-node-syntax@1.2.0: + resolution: {integrity: sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==} + peerDependencies: + '@babel/core': ^7.0.0 || ^8.0.0-0 + + babel-preset-jest@29.6.3: + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@4.0.4: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + baseline-browser-mapping@2.10.0: resolution: {integrity: sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==} engines: {node: '>=6.0.0'} @@ -2496,6 +2795,9 @@ packages: boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + brace-expansion@5.0.4: resolution: {integrity: sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==} engines: {node: 18 || 20 || >=22} @@ -2509,6 +2811,12 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + bundle-name@4.1.0: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} engines: {node: '>=18'} @@ -2525,6 +2833,14 @@ packages: resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} engines: {node: '>= 0.4'} + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} @@ -2573,6 +2889,21 @@ packages: resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} engines: {node: '>= 20.19.0'} + chrome-launcher@0.15.2: + resolution: {integrity: sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==} + engines: {node: '>=12.13.0'} + hasBin: true + + chromium-edge-launcher@0.2.0: + resolution: {integrity: sha512-JfJjUnq25y9yg4FABRRVPmBGWPZZi+AQXT4mxupb67766/0UlhG8PAZCz6xzEMXTbW3CsSoE8PcCWA49n35mKg==} + + ci-info@2.0.0: + resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} + + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + citty@0.2.1: resolution: {integrity: sha512-kEV95lFBhQgtogAPlQfJJ0WGVSokvLr/UEoFPiKKOXF7pl98HfUVUD0ejsuTCld/9xH9vogSywZ5KqHzXrZpqg==} @@ -2582,6 +2913,10 @@ packages: client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + cliui@9.0.1: resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} engines: {node: '>=20'} @@ -2614,10 +2949,17 @@ packages: resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} engines: {node: '>=16'} + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + commander@14.0.3: resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} engines: {node: '>=20'} + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + commander@7.2.0: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} engines: {node: '>= 10'} @@ -2628,9 +2970,16 @@ packages: compute-scroll-into-view@3.1.1: resolution: {integrity: sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==} + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + concat-with-sourcemaps@1.1.0: resolution: {integrity: sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==} + connect@3.7.0: + resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==} + engines: {node: '>= 0.10.0'} + content-disposition@1.0.1: resolution: {integrity: sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==} engines: {node: '>=18'} @@ -2670,6 +3019,9 @@ packages: css-select@4.3.0: resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} + css-select@5.2.2: + resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} + css-tree@1.1.3: resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} engines: {node: '>=8.0.0'} @@ -2726,6 +3078,14 @@ packages: date-fns@4.1.0: resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -2769,6 +3129,10 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + detect-indent@6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} @@ -2800,6 +3164,9 @@ packages: dom-serializer@1.4.1: resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + domelementtype@2.3.0: resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} @@ -2807,12 +3174,19 @@ packages: resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} engines: {node: '>= 4'} + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + dompurify@3.3.3: resolution: {integrity: sha512-Oj6pzI2+RqBfFG+qOaOLbFXLQ90ARpcGG6UePL82bJLtdsa6CYJD7nmiU8MW9nQNOtCHV3lZ/Bzq1X0QYbBZCA==} domutils@2.8.0: resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -2826,10 +3200,17 @@ packages: emoji-regex@10.6.0: resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + empathic@2.0.0: resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} engines: {node: '>=14'} + encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + encodeurl@2.0.0: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} @@ -2845,10 +3226,17 @@ packages: entities@2.2.0: resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + entities@6.0.1: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} + error-stack-parser@2.1.4: + resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} + es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -2882,6 +3270,14 @@ packages: escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + escape-string-regexp@5.0.0: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} @@ -2929,6 +3325,10 @@ packages: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} + event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} @@ -2944,6 +3344,9 @@ packages: resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} + exponential-backoff@3.1.3: + resolution: {integrity: sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==} + express-rate-limit@8.3.1: resolution: {integrity: sha512-D1dKN+cmyPWuvB+G2SREQDzPY1agpBIcTa9sJxOPMCNeH3gwzhqJRDWCXW3gg0y//+LQ/8j52JbMROWyrKdMdw==} engines: {node: '>= 16'} @@ -2967,12 +3370,23 @@ packages: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + fast-uri@3.1.0: resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} + fb-dotslash@0.5.8: + resolution: {integrity: sha512-XHYLKk9J4BupDxi9bSEhkfss0m+Vr9ChTrjhf9l2iw3jB5C7BnY4GVPoMcqbrTutsKJso6yj2nAB6BI/F2oZaA==} + engines: {node: '>=20'} + hasBin: true + + fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} @@ -2989,6 +3403,10 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + finalhandler@1.1.2: + resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} + engines: {node: '>= 0.8'} + finalhandler@2.1.1: resolution: {integrity: sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==} engines: {node: '>= 18.0.0'} @@ -3000,6 +3418,9 @@ packages: flexsearch@0.8.212: resolution: {integrity: sha512-wSyJr1GUWoOOIISRu+X2IXiOcVfg9qqBRyCPRUdLMIGJqPzMo+jMRlvE83t14v1j0dRMEaBbER/adQjp6Du2pw==} + flow-enums-runtime@0.0.6: + resolution: {integrity: sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==} + forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} @@ -3018,6 +3439,10 @@ packages: react-dom: optional: true + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + fresh@2.0.0: resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} engines: {node: '>= 0.8'} @@ -3034,6 +3459,9 @@ packages: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} engines: {node: '>=6 <7 || >=8'} + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -3179,6 +3607,10 @@ packages: resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} engines: {node: '>=6'} + get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + get-proto@1.0.1: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} @@ -3197,6 +3629,10 @@ packages: resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} engines: {node: 18 || 20 || >=22} + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -3250,6 +3686,21 @@ packages: hastscript@9.0.1: resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} + hermes-compiler@0.0.0: + resolution: {integrity: sha512-boVFutx6ME/Km2mB6vvsQcdnazEYYI/jV1pomx1wcFUG/EVqTkr5CU0CW9bKipOA/8Hyu3NYwW3THg2Q1kNCfA==} + + hermes-estree@0.32.0: + resolution: {integrity: sha512-KWn3BqnlDOl97Xe1Yviur6NbgIZ+IP+UVSpshlZWkq+EtoHg6/cwiDj/osP9PCEgFE15KBm1O55JRwbMEm5ejQ==} + + hermes-estree@0.33.3: + resolution: {integrity: sha512-6kzYZHCk8Fy1Uc+t3HGYyJn3OL4aeqKLTyina4UFtWl8I0kSL7OmKThaiX+Uh2f8nGw3mo4Ifxg0M5Zk3/Oeqg==} + + hermes-parser@0.32.0: + resolution: {integrity: sha512-g4nBOWFpuiTqjR3LZdRxKUkij9iyveWeuks7INEsMX741f3r9xxrOe8TeQfUxtda0eXmiIFiMQzoeSQEno33Hw==} + + hermes-parser@0.33.3: + resolution: {integrity: sha512-Yg3HgaG4CqgyowtYjX/FsnPAuZdHOqSMtnbpylbptsQ9nwwSKsy6uRWcGO5RK0EqiX12q8HvDWKgeAVajRO5DA==} + hono@4.12.9: resolution: {integrity: sha512-wy3T8Zm2bsEvxKZM5w21VdHDDcwVS1yUFFY6i8UobSsKfFceT7TOwhbhfKsDyx7tYQlmRM5FLpIuYvNFyjctiA==} engines: {node: '>=16.9.0'} @@ -3297,6 +3748,11 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} + image-size@1.2.1: + resolution: {integrity: sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==} + engines: {node: '>=16.x'} + hasBin: true + image-size@2.0.2: resolution: {integrity: sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==} engines: {node: '>=16.x'} @@ -3310,10 +3766,18 @@ packages: resolution: {integrity: sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==} engines: {node: '>=8'} + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + indent-string@4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -3326,6 +3790,9 @@ packages: react: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc + invariant@2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + ip-address@10.1.0: resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} engines: {node: '>= 12'} @@ -3347,6 +3814,11 @@ packages: is-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + is-docker@3.0.0: resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3356,6 +3828,10 @@ packages: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -3396,6 +3872,10 @@ packages: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + is-wsl@3.1.1: resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} engines: {node: '>=16'} @@ -3407,6 +3887,10 @@ packages: resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} + istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + istanbul-lib-report@3.0.1: resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} engines: {node: '>=10'} @@ -3415,6 +3899,42 @@ packages: resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} engines: {node: '>=8'} + jest-environment-node@29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-haste-map@29.7.0: + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-message-util@29.7.0: + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-mock@29.7.0: + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-regex-util@29.6.3: + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} + 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} + jiti@2.6.1: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true @@ -3436,6 +3956,9 @@ packages: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true + jsc-safe-url@0.2.4: + resolution: {integrity: sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==} + jsdom@28.1.0: resolution: {integrity: sha512-0+MoQNYyr2rBHqO1xilltfDjV9G7ymYGlAUazgcDLQaUf8JDHbuGwsxN6U9qWaElZ4w1B2r7yEGIL3GdeW3Rug==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} @@ -3470,6 +3993,13 @@ packages: jsonfile@6.2.0: resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} + 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.31.1: resolution: {integrity: sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==} engines: {node: '>= 12.0.0'} @@ -3565,6 +4095,9 @@ packages: lodash.startcase@4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + lodash.throttle@4.1.1: + resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} + lodash.uniq@4.5.0: resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} @@ -3574,6 +4107,10 @@ packages: longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + loupe@3.2.1: resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} @@ -3603,6 +4140,9 @@ packages: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} + makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + markdown-extensions@2.0.0: resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} engines: {node: '>=16'} @@ -3610,6 +4150,9 @@ packages: markdown-table@3.0.4: resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + marky@1.3.0: + resolution: {integrity: sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==} + math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} @@ -3682,28 +4225,92 @@ packages: resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} engines: {node: '>= 0.8'} + memoize-one@5.2.1: + resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} + merge-descriptors@2.0.0: resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} engines: {node: '>=18'} + 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'} - micromark-core-commonmark@2.0.3: - resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} + metro-babel-transformer@0.83.5: + resolution: {integrity: sha512-d9FfmgUEVejTiSb7bkQeLRGl6aeno2UpuPm3bo3rCYwxewj03ymvOn8s8vnS4fBqAPQ+cE9iQM40wh7nGXR+eA==} + engines: {node: '>=20.19.4'} - micromark-extension-gfm-autolink-literal@2.1.0: - resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} + metro-cache-key@0.83.5: + resolution: {integrity: sha512-Ycl8PBajB7bhbAI7Rt0xEyiF8oJ0RWX8EKkolV1KfCUlC++V/GStMSGpPLwnnBZXZWkCC5edBPzv1Hz1Yi0Euw==} + engines: {node: '>=20.19.4'} - micromark-extension-gfm-footnote@2.1.0: - resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} + metro-cache@0.83.5: + resolution: {integrity: sha512-oH+s4U+IfZyg8J42bne2Skc90rcuESIYf86dYittcdWQtPfcaFXWpByPyTuWk3rR1Zz3Eh5HOrcVImfEhhJLng==} + engines: {node: '>=20.19.4'} - micromark-extension-gfm-strikethrough@2.1.0: - resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} + metro-config@0.83.5: + resolution: {integrity: sha512-JQ/PAASXH7yczgV6OCUSRhZYME+NU8NYjI2RcaG5ga4QfQ3T/XdiLzpSb3awWZYlDCcQb36l4Vl7i0Zw7/Tf9w==} + engines: {node: '>=20.19.4'} - micromark-extension-gfm-table@2.1.1: - resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} + metro-core@0.83.5: + resolution: {integrity: sha512-YcVcLCrf0ed4mdLa82Qob0VxYqfhmlRxUS8+TO4gosZo/gLwSvtdeOjc/Vt0pe/lvMNrBap9LlmvZM8FIsMgJQ==} + engines: {node: '>=20.19.4'} + + metro-file-map@0.83.5: + resolution: {integrity: sha512-ZEt8s3a1cnYbn40nyCD+CsZdYSlwtFh2kFym4lo+uvfM+UMMH+r/BsrC6rbNClSrt+B7rU9T+Te/sh/NL8ZZKQ==} + engines: {node: '>=20.19.4'} + + metro-minify-terser@0.83.5: + resolution: {integrity: sha512-Toe4Md1wS1PBqbvB0cFxBzKEVyyuYTUb0sgifAZh/mSvLH84qA1NAWik9sISWatzvfWf3rOGoUoO5E3f193a3Q==} + engines: {node: '>=20.19.4'} + + metro-resolver@0.83.5: + resolution: {integrity: sha512-7p3GtzVUpbAweJeCcUJihJeOQl1bDuimO5ueo1K0BUpUtR41q5EilbQ3klt16UTPPMpA+tISWBtsrqU556mY1A==} + engines: {node: '>=20.19.4'} + + metro-runtime@0.83.5: + resolution: {integrity: sha512-f+b3ue9AWTVlZe2Xrki6TAoFtKIqw30jwfk7GQ1rDUBQaE0ZQ+NkiMEtb9uwH7uAjJ87U7Tdx1Jg1OJqUfEVlA==} + engines: {node: '>=20.19.4'} + + metro-source-map@0.83.5: + resolution: {integrity: sha512-VT9bb2KO2/4tWY9Z2yeZqTUao7CicKAOps9LUg2aQzsz+04QyuXL3qgf1cLUVRjA/D6G5u1RJAlN1w9VNHtODQ==} + engines: {node: '>=20.19.4'} + + metro-symbolicate@0.83.5: + resolution: {integrity: sha512-EMIkrjNRz/hF+p0RDdxoE60+dkaTLPN3vaaGkFmX5lvFdO6HPfHA/Ywznzkev+za0VhPQ5KSdz49/MALBRteHA==} + engines: {node: '>=20.19.4'} + hasBin: true + + metro-transform-plugins@0.83.5: + resolution: {integrity: sha512-KxYKzZL+lt3Os5H2nx7YkbkWVduLZL5kPrE/Yq+Prm/DE1VLhpfnO6HtPs8vimYFKOa58ncl60GpoX0h7Wm0Vw==} + engines: {node: '>=20.19.4'} + + metro-transform-worker@0.83.5: + resolution: {integrity: sha512-8N4pjkNXc6ytlP9oAM6MwqkvUepNSW39LKYl9NjUMpRDazBQ7oBpQDc8Sz4aI8jnH6AGhF7s1m/ayxkN1t04yA==} + engines: {node: '>=20.19.4'} + + metro@0.83.5: + resolution: {integrity: sha512-BgsXevY1MBac/3ZYv/RfNFf/4iuW9X7f4H8ZNkiH+r667HD9sVujxcmu4jvEzGCAm4/WyKdZCuyhAcyhTHOucQ==} + engines: {node: '>=20.19.4'} + hasBin: true + + micromark-core-commonmark@2.0.3: + resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} + + micromark-extension-gfm-autolink-literal@2.1.0: + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} + + micromark-extension-gfm-footnote@2.1.0: + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} + + micromark-extension-gfm-strikethrough@2.1.0: + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} + + micromark-extension-gfm-table@2.1.1: + resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} micromark-extension-gfm-tagfilter@2.0.0: resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} @@ -3807,6 +4414,11 @@ packages: resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} engines: {node: '>=18'} + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} @@ -3815,6 +4427,9 @@ packages: resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} engines: {node: 18 || 20 || >=22} + minimatch@3.1.5: + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} + minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} @@ -3822,6 +4437,11 @@ packages: 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 + motion-dom@12.35.2: resolution: {integrity: sha512-pWXFMTwvGDbx1Fe9YL5HZebv2NhvGBzRtiNUv58aoK7+XrsuaydQ0JGRKK2r+bTKlwgSWwWxHbP5249Qr/BNpg==} @@ -3846,6 +4466,9 @@ packages: 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==} @@ -3885,9 +4508,16 @@ packages: sass: optional: true + node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + node-releases@2.0.36: resolution: {integrity: sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==} + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + normalize-url@6.1.0: resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} engines: {node: '>=10'} @@ -3899,11 +4529,18 @@ packages: 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==} + nypm@0.6.5: resolution: {integrity: sha512-K6AJy1GMVyfyMXRVB88700BJqNUkByijGJM8kEHpLdcAt+vSQAVfkWWHYzuRXHSY6xA2sNc5RjTj0p9rE2izVQ==} engines: {node: '>=18'} hasBin: true + ob1@0.83.5: + resolution: {integrity: sha512-vNKPYC8L5ycVANANpF/S+WZHpfnRWKx/F3AYP4QMn6ZJTh+l2HOrId0clNkEmua58NB9vmI9Qh7YOoV/4folYg==} + engines: {node: '>=20.19.4'} + object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -3915,6 +4552,10 @@ packages: obug@2.1.1: resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + 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'} @@ -3932,6 +4573,10 @@ packages: resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} engines: {node: '>=18'} + open@7.4.2: + resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} + engines: {node: '>=8'} + outdent@0.5.0: resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} @@ -3997,6 +4642,10 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -4041,6 +4690,10 @@ packages: resolution: {integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==} engines: {node: '>=10'} + pirates@4.0.7: + resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} + engines: {node: '>= 6'} + pkce-challenge@5.0.1: resolution: {integrity: sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==} engines: {node: '>=16.20.0'} @@ -4286,10 +4939,17 @@ packages: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + promise.series@0.2.0: resolution: {integrity: sha512-VWQJyU2bcDTgZw8kpfBpB/ejZASlCrzwz5f2hjb/zlujOEB4oeiAhHygAWq8ubsX2GVkD4kCU5V2dwOTaCY5EQ==} engines: {node: '>=0.12'} + promise@8.3.0: + resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} + property-information@7.1.0: resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} @@ -4318,6 +4978,9 @@ packages: 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'} @@ -4336,6 +4999,9 @@ packages: date-fns-tz: optional: true + react-devtools-core@6.1.5: + resolution: {integrity: sha512-ePrwPfxAnB+7hgnEr8vpKxL9cmnp7F322t8oqcPshbIQQhDKgFDW4tjhF2wjVbdXF9O/nyuy3sQWd9JGpiLPvA==} + react-docgen-typescript@2.4.0: resolution: {integrity: sha512-ZtAp5XTO5HRzQctjPU0ybY0RRCQO19X/8fxn3w7y2VVTUbGHDKULPTL4ky3vB05euSgG5NpALhEhDPvQ56wvXg==} peerDependencies: @@ -4353,12 +5019,36 @@ packages: react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + react-medium-image-zoom@5.4.1: resolution: {integrity: sha512-DD2iZYaCfAwiQGR8AN62r/cDJYoXhezlYJc5HY4TzBUGuGge43CptG0f7m0PEIM72aN6GfpjohvY1yYdtCJB7g==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-native-svg@15.15.4: + resolution: {integrity: sha512-boT/vIRgj6zZKBpfTPJJiYWMbZE9duBMOwPK6kCSTgxsS947IFMOq9OgIFkpWZTB7t229H24pDRkh3W9ZK/J1A==} + peerDependencies: + react: '*' + react-native: '*' + + react-native@0.82.1: + resolution: {integrity: sha512-tFAqcU7Z4g49xf/KnyCEzI4nRTu1Opcx05Ov2helr8ZTg1z7AJR/3sr2rZ+AAVlAs2IXk+B0WOxXGmdD3+4czA==} + engines: {node: '>= 20.19.4'} + hasBin: true + peerDependencies: + '@types/react': ^19.1.1 + react: ^19.1.1 + peerDependenciesMeta: + '@types/react': + optional: true + + react-refresh@0.14.2: + resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} + engines: {node: '>=0.10.0'} + react-remove-scroll-bar@2.3.8: resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} engines: {node: '>=10'} @@ -4426,6 +5116,9 @@ packages: redis@4.7.1: resolution: {integrity: sha512-S1bJDnqLftzHXHP8JsT5II/CtHWQrASX5K96REjWjlmWKrviSOLWmM7QnRLstAWsu1VBBV1ffV6DzCvxNP0UJQ==} + regenerator-runtime@0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + regex-recursion@6.0.2: resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} @@ -4459,6 +5152,10 @@ packages: remark@15.0.1: resolution: {integrity: sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==} + 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'} @@ -4482,6 +5179,11 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + rollup-plugin-dts@6.3.0: resolution: {integrity: sha512-d0UrqxYd8KyZ6i3M2Nx7WOMy708qsV/7fTHMHxCMCBOAe3V/U7OMPu5GkX8hC+cmkHhzGnfeYongl1IgiooddA==} engines: {node: '>=16'} @@ -4533,6 +5235,9 @@ packages: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} + scheduler@0.26.0: + resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} + scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} @@ -4548,10 +5253,22 @@ packages: engines: {node: '>=10'} hasBin: true + send@0.19.2: + resolution: {integrity: sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==} + engines: {node: '>= 0.8.0'} + send@1.2.1: resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==} engines: {node: '>= 18'} + serialize-error@2.1.0: + resolution: {integrity: sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==} + engines: {node: '>=0.10.0'} + + serve-static@1.16.3: + resolution: {integrity: sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==} + engines: {node: '>= 0.8.0'} + serve-static@2.2.1: resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==} engines: {node: '>= 18'} @@ -4571,6 +5288,10 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + shell-quote@1.8.3: + resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} + engines: {node: '>= 0.4'} + shiki@4.0.2: resolution: {integrity: sha512-eAVKTMedR5ckPo4xne/PjYQYrU3qx78gtJZ+sHlXEg5IHhhoQhMfZVzetTYuaJS0L2Ef3AcCRzCHV8T0WI6nIQ==} engines: {node: '>=20'} @@ -4594,6 +5315,9 @@ packages: 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'} @@ -4615,6 +5339,13 @@ packages: 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'} @@ -4636,9 +5367,24 @@ packages: resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + 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'} @@ -4658,6 +5404,10 @@ packages: string-hash@1.1.3: resolution: {integrity: sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==} + 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'} @@ -4717,6 +5467,10 @@ packages: 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-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -4746,6 +5500,18 @@ packages: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} + terser@5.46.1: + resolution: {integrity: sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==} + engines: {node: '>=10'} + hasBin: true + + test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + + throat@5.0.0: + resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==} + tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} @@ -4779,6 +5545,9 @@ packages: resolution: {integrity: sha512-keinCnPbwXEUG3ilrWQZU+CqcTTzHq9m2HhoUP2l7Xmi8l1LuijAXLpAJ5zRW+ifKTNscs4NdCkfkDCBYm352w==} hasBin: true + 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'} @@ -4854,6 +5623,14 @@ packages: resolution: {integrity: sha512-u6e9e3cTTpE2adQ1DYm3A3r8y3LAONEx1jYvJx6eIgSY4bMLxIxs0riWzI0Z/IK903ikiUzRPZ2c1Ph5lVLkhA==} hasBin: true + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + type-fest@0.7.1: + resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==} + engines: {node: '>=8'} + type-is@2.0.1: resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} engines: {node: '>= 0.6'} @@ -4959,6 +5736,10 @@ packages: 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'} + vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} @@ -5046,10 +5827,19 @@ packages: jsdom: optional: true + vlq@1.0.1: + resolution: {integrity: sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==} + 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==} + web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} @@ -5063,6 +5853,9 @@ packages: webpack-virtual-modules@0.6.2: resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + whatwg-fetch@3.6.20: + resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} + whatwg-mimetype@5.0.0: resolution: {integrity: sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==} engines: {node: '>=20'} @@ -5081,6 +5874,10 @@ packages: engines: {node: '>=8'} hasBin: true + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + wrap-ansi@9.0.2: resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} engines: {node: '>=18'} @@ -5088,6 +5885,33 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + write-file-atomic@4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + ws@6.2.3: + resolution: {integrity: sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + 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.19.0: resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} engines: {node: '>=10.0.0'} @@ -5130,10 +5954,18 @@ packages: engines: {node: '>= 14.6'} hasBin: true + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + yargs-parser@22.0.0: resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} engines: {node: ^20.19.0 || ^22.12.0 || >=23} + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + yargs@18.0.0: resolution: {integrity: sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==} engines: {node: ^20.19.0 || ^22.12.0 || >=23} @@ -5298,11 +6130,86 @@ snapshots: dependencies: '@babel/types': 7.29.0 + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -5880,11 +6787,76 @@ snapshots: optionalDependencies: '@types/node': 25.4.0 - '@joshwooding/vite-plugin-react-docgen-typescript@0.6.4(typescript@5.9.3)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))': + '@isaacs/ttlcache@1.4.1': {} + + '@istanbuljs/load-nyc-config@1.1.0': + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.2 + resolve-from: 5.0.0 + + '@istanbuljs/schema@0.1.3': {} + + '@jest/create-cache-key-function@29.7.0': + dependencies: + '@jest/types': 29.6.3 + + '@jest/environment@29.7.0': + dependencies: + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 25.4.0 + jest-mock: 29.7.0 + + '@jest/fake-timers@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@sinonjs/fake-timers': 10.3.0 + '@types/node': 25.4.0 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + '@jest/schemas@29.6.3': + dependencies: + '@sinclair/typebox': 0.27.10 + + '@jest/transform@29.7.0': + dependencies: + '@babel/core': 7.29.0 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.31 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + micromatch: 4.0.8 + pirates: 4.0.7 + slash: 3.0.0 + write-file-atomic: 4.0.2 + transitivePeerDependencies: + - supports-color + + '@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.4.0 + '@types/yargs': 17.0.35 + chalk: 4.1.2 + + '@joshwooding/vite-plugin-react-docgen-typescript@0.6.4(typescript@5.9.3)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: glob: 13.0.6 react-docgen-typescript: 2.4.0(typescript@5.9.3) - vite: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) optionalDependencies: typescript: 5.9.3 @@ -5900,6 +6872,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': @@ -6533,33 +7510,100 @@ snapshots: '@radix-ui/rect@1.1.1': {} - '@redis/bloom@1.2.0(@redis/client@1.6.1)': - dependencies: - '@redis/client': 1.6.1 + '@react-native/assets-registry@0.82.1': {} - '@redis/client@1.6.1': + '@react-native/codegen@0.82.1(@babel/core@7.29.0)': dependencies: - cluster-key-slot: 1.1.2 - generic-pool: 3.9.0 - yallist: 4.0.0 + '@babel/core': 7.29.0 + '@babel/parser': 7.29.0 + glob: 7.2.3 + hermes-parser: 0.32.0 + invariant: 2.2.4 + nullthrows: 1.1.1 + yargs: 17.7.2 - '@redis/graph@1.1.1(@redis/client@1.6.1)': + '@react-native/community-cli-plugin@0.82.1': dependencies: - '@redis/client': 1.6.1 + '@react-native/dev-middleware': 0.82.1 + debug: 4.4.3 + invariant: 2.2.4 + metro: 0.83.5 + metro-config: 0.83.5 + metro-core: 0.83.5 + semver: 7.7.4 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate - '@redis/json@1.0.7(@redis/client@1.6.1)': - dependencies: - '@redis/client': 1.6.1 + '@react-native/debugger-frontend@0.82.1': {} - '@redis/search@1.2.0(@redis/client@1.6.1)': + '@react-native/debugger-shell@0.82.1': dependencies: - '@redis/client': 1.6.1 + cross-spawn: 7.0.6 + fb-dotslash: 0.5.8 - '@redis/time-series@1.1.0(@redis/client@1.6.1)': + '@react-native/dev-middleware@0.82.1': dependencies: - '@redis/client': 1.6.1 + '@isaacs/ttlcache': 1.4.1 + '@react-native/debugger-frontend': 0.82.1 + '@react-native/debugger-shell': 0.82.1 + chrome-launcher: 0.15.2 + chromium-edge-launcher: 0.2.0 + connect: 3.7.0 + debug: 4.4.3 + invariant: 2.2.4 + nullthrows: 1.1.1 + open: 7.4.2 + serve-static: 1.16.3 + ws: 6.2.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate - '@rollup/plugin-babel@7.0.0(@babel/core@7.29.0)(@types/babel__core@7.20.5)(rollup@4.59.0)': + '@react-native/gradle-plugin@0.82.1': {} + + '@react-native/js-polyfills@0.82.1': {} + + '@react-native/normalize-colors@0.82.1': {} + + '@react-native/virtualized-lists@0.82.1(@types/react@19.2.14)(react-native@0.82.1(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4)': + dependencies: + invariant: 2.2.4 + nullthrows: 1.1.1 + react: 19.2.4 + react-native: 0.82.1(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + + '@redis/bloom@1.2.0(@redis/client@1.6.1)': + dependencies: + '@redis/client': 1.6.1 + + '@redis/client@1.6.1': + dependencies: + cluster-key-slot: 1.1.2 + generic-pool: 3.9.0 + yallist: 4.0.0 + + '@redis/graph@1.1.1(@redis/client@1.6.1)': + dependencies: + '@redis/client': 1.6.1 + + '@redis/json@1.0.7(@redis/client@1.6.1)': + dependencies: + '@redis/client': 1.6.1 + + '@redis/search@1.2.0(@redis/client@1.6.1)': + dependencies: + '@redis/client': 1.6.1 + + '@redis/time-series@1.1.0(@redis/client@1.6.1)': + dependencies: + '@redis/client': 1.6.1 + + '@rollup/plugin-babel@7.0.0(@babel/core@7.29.0)(@types/babel__core@7.20.5)(rollup@4.59.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-module-imports': 7.28.6 @@ -6729,27 +7773,37 @@ snapshots: '@shikijs/vscode-textmate@10.0.2': {} + '@sinclair/typebox@0.27.10': {} + + '@sinonjs/commons@3.0.1': + dependencies: + type-detect: 4.0.8 + + '@sinonjs/fake-timers@10.3.0': + dependencies: + '@sinonjs/commons': 3.0.1 + '@standard-schema/spec@1.1.0': {} - '@storybook/builder-vite@10.2.17(esbuild@0.27.3)(rollup@4.59.0)(storybook@10.2.17(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))': + '@storybook/builder-vite@10.2.17(esbuild@0.27.3)(rollup@4.59.0)(storybook@10.2.17(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: - '@storybook/csf-plugin': 10.2.17(esbuild@0.27.3)(rollup@4.59.0)(storybook@10.2.17(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + '@storybook/csf-plugin': 10.2.17(esbuild@0.27.3)(rollup@4.59.0)(storybook@10.2.17(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) storybook: 10.2.17(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) ts-dedent: 2.2.0 - vite: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - esbuild - rollup - webpack - '@storybook/csf-plugin@10.2.17(esbuild@0.27.3)(rollup@4.59.0)(storybook@10.2.17(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))': + '@storybook/csf-plugin@10.2.17(esbuild@0.27.3)(rollup@4.59.0)(storybook@10.2.17(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: storybook: 10.2.17(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) unplugin: 2.3.11 optionalDependencies: esbuild: 0.27.3 rollup: 4.59.0 - vite: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) '@storybook/global@5.0.0': {} @@ -6764,11 +7818,11 @@ snapshots: react-dom: 19.2.4(react@19.2.4) storybook: 10.2.17(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@storybook/react-vite@10.2.17(esbuild@0.27.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(rollup@4.59.0)(storybook@10.2.17(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))': + '@storybook/react-vite@10.2.17(esbuild@0.27.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(rollup@4.59.0)(storybook@10.2.17(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.6.4(typescript@5.9.3)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.6.4(typescript@5.9.3)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) '@rollup/pluginutils': 5.3.0(rollup@4.59.0) - '@storybook/builder-vite': 10.2.17(esbuild@0.27.3)(rollup@4.59.0)(storybook@10.2.17(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + '@storybook/builder-vite': 10.2.17(esbuild@0.27.3)(rollup@4.59.0)(storybook@10.2.17(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) '@storybook/react': 10.2.17(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@10.2.17(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3) empathic: 2.0.0 magic-string: 0.30.21 @@ -6778,7 +7832,7 @@ snapshots: resolve: 1.22.11 storybook: 10.2.17(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) tsconfig-paths: 4.2.0 - vite: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - esbuild - rollup @@ -6957,10 +8011,24 @@ snapshots: '@types/jsonfile': 6.1.4 '@types/node': 25.4.0 + '@types/graceful-fs@4.1.9': + dependencies: + '@types/node': 25.4.0 + '@types/hast@3.0.4': dependencies: '@types/unist': 3.0.3 + '@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/jsonfile@6.1.4': dependencies: '@types/node': 25.4.0 @@ -6999,6 +8067,8 @@ snapshots: '@types/resolve@1.20.6': {} + '@types/stack-utils@2.0.3': {} + '@types/trusted-types@2.0.7': optional: true @@ -7006,9 +8076,15 @@ snapshots: '@types/unist@3.0.3': {} + '@types/yargs-parser@21.0.3': {} + + '@types/yargs@17.0.35': + dependencies: + '@types/yargs-parser': 21.0.3 + '@ungap/structured-clone@1.3.0': {} - '@vitest/coverage-v8@4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@22.19.15)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/coverage-v8@4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@22.19.15)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/utils': 4.0.18 @@ -7020,9 +8096,9 @@ snapshots: obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@22.19.15)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@22.19.15)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) - '@vitest/coverage-v8@4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/coverage-v8@4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/utils': 4.0.18 @@ -7034,9 +8110,9 @@ snapshots: obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) - '@vitest/coverage-v8@4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/coverage-v8@4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/utils': 4.0.18 @@ -7048,7 +8124,7 @@ snapshots: obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) '@vitest/expect@3.2.4': dependencies: @@ -7067,29 +8143,29 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.0.3 - '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@vitest/spy': 4.0.18 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) - '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@vitest/spy': 4.0.18 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) - '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@vitest/spy': 4.0.18 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) '@vitest/pretty-format@3.2.4': dependencies: @@ -7127,6 +8203,10 @@ snapshots: '@vitest/pretty-format': 4.0.18 tinyrainbow: 3.0.3 + abort-controller@3.0.0: + dependencies: + event-target-shim: 5.0.1 + accepts@2.0.0: dependencies: mime-types: 3.0.2 @@ -7151,6 +8231,8 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 + anser@1.4.10: {} + ansi-colors@4.1.3: {} ansi-regex@5.0.1: {} @@ -7165,6 +8247,11 @@ snapshots: ansi-styles@6.2.3: {} + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + argparse@1.0.10: dependencies: sprintf-js: 1.0.3 @@ -7183,6 +8270,8 @@ snapshots: array-union@2.1.0: {} + asap@2.0.6: {} + assertion-error@2.0.1: {} ast-types@0.16.1: @@ -7197,10 +8286,75 @@ snapshots: astring@1.9.0: {} + async-limiter@1.0.1: {} + + babel-jest@29.7.0(@babel/core@7.29.0): + dependencies: + '@babel/core': 7.29.0 + '@jest/transform': 29.7.0 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.6.3(@babel/core@7.29.0) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-istanbul@6.1.1: + dependencies: + '@babel/helper-plugin-utils': 7.28.6 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 5.2.1 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-jest-hoist@29.6.3: + dependencies: + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.28.0 + + babel-plugin-syntax-hermes-parser@0.32.0: + dependencies: + hermes-parser: 0.32.0 + + babel-preset-current-node-syntax@1.2.0(@babel/core@7.29.0): + dependencies: + '@babel/core': 7.29.0 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.29.0) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.29.0) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.29.0) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.29.0) + '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.29.0) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.29.0) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.29.0) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.29.0) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.29.0) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.29.0) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.29.0) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.29.0) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.29.0) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.29.0) + + babel-preset-jest@29.6.3(@babel/core@7.29.0): + dependencies: + '@babel/core': 7.29.0 + babel-plugin-jest-hoist: 29.6.3 + babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.0) + bail@2.0.2: {} + balanced-match@1.0.2: {} + balanced-match@4.0.4: {} + base64-js@1.5.1: {} + baseline-browser-mapping@2.10.0: {} better-path-resolve@1.0.0: @@ -7227,6 +8381,11 @@ snapshots: boolbase@1.0.0: {} + brace-expansion@1.1.12: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + brace-expansion@5.0.4: dependencies: balanced-match: 4.0.4 @@ -7243,6 +8402,12 @@ snapshots: node-releases: 2.0.36 update-browserslist-db: 1.2.3(browserslist@4.28.1) + bser@2.1.1: + dependencies: + node-int64: 0.4.0 + + buffer-from@1.1.2: {} + bundle-name@4.1.0: dependencies: run-applescript: 7.1.0 @@ -7259,6 +8424,10 @@ snapshots: call-bind-apply-helpers: 1.0.2 get-intrinsic: 1.3.0 + camelcase@5.3.1: {} + + camelcase@6.3.0: {} + caniuse-api@3.0.0: dependencies: browserslist: 4.28.1 @@ -7303,6 +8472,30 @@ snapshots: dependencies: readdirp: 5.0.0 + chrome-launcher@0.15.2: + dependencies: + '@types/node': 25.4.0 + escape-string-regexp: 4.0.0 + is-wsl: 2.2.0 + lighthouse-logger: 1.4.2 + transitivePeerDependencies: + - supports-color + + chromium-edge-launcher@0.2.0: + dependencies: + '@types/node': 25.4.0 + escape-string-regexp: 4.0.0 + is-wsl: 2.2.0 + lighthouse-logger: 1.4.2 + mkdirp: 1.0.4 + rimraf: 3.0.2 + transitivePeerDependencies: + - supports-color + + ci-info@2.0.0: {} + + ci-info@3.9.0: {} + citty@0.2.1: {} class-variance-authority@0.7.1: @@ -7311,6 +8504,12 @@ snapshots: client-only@0.0.1: {} + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + cliui@9.0.1: dependencies: string-width: 7.2.0 @@ -7335,18 +8534,33 @@ snapshots: commander@11.1.0: {} + commander@12.1.0: {} + commander@14.0.3: {} + commander@2.20.3: {} + commander@7.2.0: {} commondir@1.0.1: {} compute-scroll-into-view@3.1.1: {} + concat-map@0.0.1: {} + concat-with-sourcemaps@1.1.0: dependencies: source-map: 0.6.1 + connect@3.7.0: + dependencies: + debug: 2.6.9 + finalhandler: 1.1.2 + parseurl: 1.3.3 + utils-merge: 1.0.1 + transitivePeerDependencies: + - supports-color + content-disposition@1.0.1: {} content-type@1.0.5: {} @@ -7382,6 +8596,14 @@ snapshots: domutils: 2.8.0 nth-check: 2.1.1 + 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 @@ -7464,6 +8686,10 @@ snapshots: date-fns@4.1.0: {} + debug@2.6.9: + dependencies: + ms: 2.0.0 + debug@4.4.3: dependencies: ms: 2.1.3 @@ -7491,6 +8717,8 @@ snapshots: dequal@2.0.3: {} + destroy@1.2.0: {} + detect-indent@6.1.0: {} detect-libc@2.1.2: {} @@ -7519,12 +8747,22 @@ snapshots: domhandler: 4.3.1 entities: 2.2.0 + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + domelementtype@2.3.0: {} domhandler@4.3.1: dependencies: domelementtype: 2.3.0 + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + dompurify@3.3.3: optionalDependencies: '@types/trusted-types': 2.0.7 @@ -7535,6 +8773,12 @@ snapshots: domelementtype: 2.3.0 domhandler: 4.3.1 + domutils@3.2.2: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 @@ -7547,8 +8791,12 @@ snapshots: emoji-regex@10.6.0: {} + emoji-regex@8.0.0: {} + empathic@2.0.0: {} + encodeurl@1.0.2: {} + encodeurl@2.0.0: {} enhanced-resolve@5.20.0: @@ -7563,8 +8811,14 @@ snapshots: entities@2.2.0: {} + entities@4.5.0: {} + entities@6.0.1: {} + error-stack-parser@2.1.4: + dependencies: + stackframe: 1.3.4 + es-define-property@1.0.1: {} es-errors@1.3.0: {} @@ -7622,6 +8876,10 @@ snapshots: escape-html@1.0.3: {} + escape-string-regexp@2.0.0: {} + + escape-string-regexp@4.0.0: {} + escape-string-regexp@5.0.0: {} esprima@4.0.1: {} @@ -7671,6 +8929,8 @@ snapshots: etag@1.8.1: {} + event-target-shim@5.0.1: {} + eventemitter3@4.0.7: {} eventsource-parser@3.0.6: {} @@ -7681,6 +8941,8 @@ snapshots: expect-type@1.3.0: {} + exponential-backoff@3.1.3: {} + express-rate-limit@8.3.1(express@5.2.1): dependencies: express: 5.2.1 @@ -7733,12 +8995,20 @@ snapshots: merge2: 1.4.1 micromatch: 4.0.8 + fast-json-stable-stringify@2.1.0: {} + fast-uri@3.1.0: {} 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.3): optionalDependencies: picomatch: 4.0.3 @@ -7749,6 +9019,18 @@ snapshots: dependencies: to-regex-range: 5.0.1 + finalhandler@1.1.2: + dependencies: + debug: 2.6.9 + 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 + finalhandler@2.1.1: dependencies: debug: 4.4.3 @@ -7767,6 +9049,8 @@ snapshots: flexsearch@0.8.212: {} + flow-enums-runtime@0.0.6: {} + forwarded@0.2.0: {} framer-motion@12.35.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4): @@ -7778,6 +9062,8 @@ snapshots: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) + fresh@0.5.2: {} + fresh@2.0.0: {} fs-extra@11.3.4: @@ -7798,6 +9084,8 @@ snapshots: jsonfile: 4.0.0 universalify: 0.1.2 + fs.realpath@1.0.0: {} + fsevents@2.3.3: optional: true @@ -7841,7 +9129,7 @@ snapshots: transitivePeerDependencies: - supports-color - fumadocs-mdx@14.2.9(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.14)(fumadocs-core@16.6.16(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(flexsearch@0.8.212)(lucide-react@0.577.0(react@19.2.4))(next@16.1.6(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.1.6(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)): + fumadocs-mdx@14.2.9(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.14)(fumadocs-core@16.6.16(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(flexsearch@0.8.212)(lucide-react@0.577.0(react@19.2.4))(next@16.1.6(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.1.6(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)): dependencies: '@mdx-js/mdx': 3.1.1 '@standard-schema/spec': 1.1.0 @@ -7867,7 +9155,7 @@ snapshots: '@types/react': 19.2.14 next: 16.1.6(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 - vite: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color @@ -7935,6 +9223,8 @@ snapshots: get-nonce@1.0.1: {} + get-package-type@0.1.0: {} + get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 @@ -7956,6 +9246,15 @@ snapshots: minipass: 7.1.3 path-scurry: 2.0.2 + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.5 + once: 1.4.0 + path-is-absolute: 1.0.1 + globby@11.1.0: dependencies: array-union: 2.1.0 @@ -8089,6 +9388,20 @@ snapshots: property-information: 7.1.0 space-separated-tokens: 2.0.2 + hermes-compiler@0.0.0: {} + + hermes-estree@0.32.0: {} + + hermes-estree@0.33.3: {} + + hermes-parser@0.32.0: + dependencies: + hermes-estree: 0.32.0 + + hermes-parser@0.33.3: + dependencies: + hermes-estree: 0.33.3 + hono@4.12.9: {} html-encoding-sniffer@6.0.0: @@ -8137,6 +9450,10 @@ snapshots: ignore@5.3.2: {} + image-size@1.2.1: + dependencies: + queue: 6.0.2 + image-size@2.0.2: {} import-cwd@3.0.0: @@ -8147,8 +9464,15 @@ snapshots: dependencies: resolve-from: 5.0.0 + imurmurhash@0.1.4: {} + indent-string@4.0.0: {} + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + inherits@2.0.4: {} inline-style-parser@0.2.7: {} @@ -8158,6 +9482,10 @@ snapshots: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) + invariant@2.2.4: + dependencies: + loose-envify: 1.4.0 + ip-address@10.1.0: {} ipaddr.js@1.9.1: {} @@ -8175,10 +9503,14 @@ snapshots: is-decimal@2.0.1: {} + is-docker@2.2.1: {} + is-docker@3.0.0: {} is-extglob@2.1.1: {} + is-fullwidth-code-point@3.0.0: {} + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 @@ -8209,6 +9541,10 @@ snapshots: is-windows@1.0.2: {} + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 + is-wsl@3.1.1: dependencies: is-inside-container: 1.0.0 @@ -8217,6 +9553,16 @@ snapshots: istanbul-lib-coverage@3.2.2: {} + istanbul-lib-instrument@5.2.1: + dependencies: + '@babel/core': 7.29.0 + '@babel/parser': 7.29.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + istanbul-lib-report@3.0.1: dependencies: istanbul-lib-coverage: 3.2.2 @@ -8228,6 +9574,78 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 + jest-environment-node@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 25.4.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + jest-get-type@29.6.3: {} + + jest-haste-map@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/graceful-fs': 4.1.9 + '@types/node': 25.4.0 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + jest-worker: 29.7.0 + micromatch: 4.0.8 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + + jest-message-util@29.7.0: + dependencies: + '@babel/code-frame': 7.29.0 + '@jest/types': 29.6.3 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + stack-utils: 2.0.6 + + jest-mock@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 25.4.0 + jest-util: 29.7.0 + + jest-regex-util@29.6.3: {} + + jest-util@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 25.4.0 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + + 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.4.0 + jest-util: 29.7.0 + merge-stream: 2.0.0 + supports-color: 8.1.1 + jiti@2.6.1: {} jose@6.2.2: {} @@ -8245,6 +9663,8 @@ snapshots: dependencies: argparse: 2.0.1 + jsc-safe-url@0.2.4: {} + jsdom@28.1.0: dependencies: '@acemir/cssom': 0.9.31 @@ -8292,6 +9712,15 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 + leven@3.1.0: {} + + lighthouse-logger@1.4.2: + dependencies: + debug: 2.6.9 + marky: 1.3.0 + transitivePeerDependencies: + - supports-color + lightningcss-android-arm64@1.31.1: optional: true @@ -8355,12 +9784,18 @@ snapshots: lodash.startcase@4.4.0: {} + lodash.throttle@4.1.1: {} + lodash.uniq@4.5.0: {} long@5.3.2: {} longest-streak@3.1.0: {} + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + loupe@3.2.1: {} lru-cache@11.2.6: {} @@ -8389,10 +9824,16 @@ snapshots: dependencies: semver: 7.7.4 + makeerror@1.0.12: + dependencies: + tmpl: 1.0.5 + markdown-extensions@2.0.0: {} markdown-table@3.0.4: {} + marky@1.3.0: {} + math-intrinsics@1.1.0: {} mcp-handler@1.1.0(@modelcontextprotocol/sdk@1.26.0(zod@4.3.6))(next@16.1.6(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)): @@ -8573,10 +10014,188 @@ snapshots: media-typer@1.1.0: {} + memoize-one@5.2.1: {} + merge-descriptors@2.0.0: {} + merge-stream@2.0.0: {} + merge2@1.4.1: {} + metro-babel-transformer@0.83.5: + dependencies: + '@babel/core': 7.29.0 + flow-enums-runtime: 0.0.6 + hermes-parser: 0.33.3 + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color + + metro-cache-key@0.83.5: + dependencies: + flow-enums-runtime: 0.0.6 + + metro-cache@0.83.5: + dependencies: + exponential-backoff: 3.1.3 + flow-enums-runtime: 0.0.6 + https-proxy-agent: 7.0.6 + metro-core: 0.83.5 + transitivePeerDependencies: + - supports-color + + metro-config@0.83.5: + dependencies: + connect: 3.7.0 + flow-enums-runtime: 0.0.6 + jest-validate: 29.7.0 + metro: 0.83.5 + metro-cache: 0.83.5 + metro-core: 0.83.5 + metro-runtime: 0.83.5 + yaml: 2.8.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + metro-core@0.83.5: + dependencies: + flow-enums-runtime: 0.0.6 + lodash.throttle: 4.1.1 + metro-resolver: 0.83.5 + + metro-file-map@0.83.5: + dependencies: + debug: 4.4.3 + 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.83.5: + dependencies: + flow-enums-runtime: 0.0.6 + terser: 5.46.1 + + metro-resolver@0.83.5: + dependencies: + flow-enums-runtime: 0.0.6 + + metro-runtime@0.83.5: + dependencies: + '@babel/runtime': 7.28.6 + flow-enums-runtime: 0.0.6 + + metro-source-map@0.83.5: + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + flow-enums-runtime: 0.0.6 + invariant: 2.2.4 + metro-symbolicate: 0.83.5 + nullthrows: 1.1.1 + ob1: 0.83.5 + source-map: 0.5.7 + vlq: 1.0.1 + transitivePeerDependencies: + - supports-color + + metro-symbolicate@0.83.5: + dependencies: + flow-enums-runtime: 0.0.6 + invariant: 2.2.4 + metro-source-map: 0.83.5 + nullthrows: 1.1.1 + source-map: 0.5.7 + vlq: 1.0.1 + transitivePeerDependencies: + - supports-color + + metro-transform-plugins@0.83.5: + dependencies: + '@babel/core': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + flow-enums-runtime: 0.0.6 + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color + + metro-transform-worker@0.83.5: + dependencies: + '@babel/core': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 + flow-enums-runtime: 0.0.6 + metro: 0.83.5 + metro-babel-transformer: 0.83.5 + metro-cache: 0.83.5 + metro-cache-key: 0.83.5 + metro-minify-terser: 0.83.5 + metro-source-map: 0.83.5 + metro-transform-plugins: 0.83.5 + nullthrows: 1.1.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + metro@0.83.5: + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/core': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/parser': 7.29.0 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + accepts: 2.0.0 + chalk: 4.1.2 + ci-info: 2.0.0 + connect: 3.7.0 + debug: 4.4.3 + error-stack-parser: 2.1.4 + flow-enums-runtime: 0.0.6 + graceful-fs: 4.2.11 + hermes-parser: 0.33.3 + 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.83.5 + metro-cache: 0.83.5 + metro-cache-key: 0.83.5 + metro-config: 0.83.5 + metro-core: 0.83.5 + metro-file-map: 0.83.5 + metro-resolver: 0.83.5 + metro-runtime: 0.83.5 + metro-source-map: 0.83.5 + metro-symbolicate: 0.83.5 + metro-transform-plugins: 0.83.5 + metro-transform-worker: 0.83.5 + 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.10 + yargs: 17.7.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + micromark-core-commonmark@2.0.3: dependencies: decode-named-character-reference: 1.3.0 @@ -8852,16 +10471,24 @@ snapshots: dependencies: mime-db: 1.54.0 + mime@1.6.0: {} + min-indent@1.0.1: {} minimatch@10.2.4: dependencies: brace-expansion: 5.0.4 + minimatch@3.1.5: + dependencies: + brace-expansion: 1.1.12 + minimist@1.2.8: {} minipass@7.1.3: {} + mkdirp@1.0.4: {} + motion-dom@12.35.2: dependencies: motion-utils: 12.29.2 @@ -8878,6 +10505,8 @@ snapshots: mri@1.2.0: {} + ms@2.0.0: {} + ms@2.1.3: {} nanoid@3.3.11: {} @@ -8914,8 +10543,12 @@ snapshots: - '@babel/core' - babel-plugin-macros + node-int64@0.4.0: {} + node-releases@2.0.36: {} + normalize-path@3.0.0: {} + normalize-url@6.1.0: {} npm-to-yarn@3.0.1: {} @@ -8924,18 +10557,28 @@ snapshots: dependencies: boolbase: 1.0.0 + nullthrows@1.1.1: {} + nypm@0.6.5: dependencies: citty: 0.2.1 pathe: 2.0.3 tinyexec: 1.0.2 + ob1@0.83.5: + dependencies: + flow-enums-runtime: 0.0.6 + object-assign@4.1.1: {} object-inspect@1.13.4: {} obug@2.1.1: {} + on-finished@2.3.0: + dependencies: + ee-first: 1.1.1 + on-finished@2.4.1: dependencies: ee-first: 1.1.1 @@ -8959,6 +10602,11 @@ snapshots: is-inside-container: 1.0.0 wsl-utils: 0.1.0 + open@7.4.2: + dependencies: + is-docker: 2.2.1 + is-wsl: 2.2.0 + outdent@0.5.0: {} oxlint@1.52.0: @@ -9037,6 +10685,8 @@ snapshots: path-exists@4.0.0: {} + path-is-absolute@1.0.1: {} + path-key@3.1.1: {} path-parse@1.0.7: {} @@ -9064,6 +10714,8 @@ snapshots: pify@5.0.0: {} + pirates@4.0.7: {} + pkce-challenge@5.0.1: {} postcss-calc@8.2.4(postcss@8.5.8): @@ -9307,8 +10959,18 @@ snapshots: ansi-styles: 5.2.0 react-is: 17.0.2 + pretty-format@29.7.0: + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.1 + promise.series@0.2.0: {} + promise@8.3.0: + dependencies: + asap: 2.0.6 + property-information@7.1.0: {} protobufjs@7.5.4: @@ -9343,6 +11005,10 @@ snapshots: queue-microtask@1.2.3: {} + queue@6.0.2: + dependencies: + inherits: 2.0.4 + range-parser@1.2.1: {} raw-body@3.0.2: @@ -9360,6 +11026,14 @@ snapshots: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) + react-devtools-core@6.1.5: + dependencies: + shell-quote: 1.8.3 + ws: 7.5.10 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + react-docgen-typescript@2.4.0(typescript@5.9.3): dependencies: typescript: 5.9.3 @@ -9386,11 +11060,71 @@ snapshots: react-is@17.0.2: {} + react-is@18.3.1: {} + react-medium-image-zoom@5.4.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) + react-native-svg@15.15.4(react-native@0.82.1(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4): + dependencies: + css-select: 5.2.2 + css-tree: 1.1.3 + react: 19.2.4 + react-native: 0.82.1(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) + warn-once: 0.1.1 + + react-native@0.82.1(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4): + dependencies: + '@jest/create-cache-key-function': 29.7.0 + '@react-native/assets-registry': 0.82.1 + '@react-native/codegen': 0.82.1(@babel/core@7.29.0) + '@react-native/community-cli-plugin': 0.82.1 + '@react-native/gradle-plugin': 0.82.1 + '@react-native/js-polyfills': 0.82.1 + '@react-native/normalize-colors': 0.82.1 + '@react-native/virtualized-lists': 0.82.1(@types/react@19.2.14)(react-native@0.82.1(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + abort-controller: 3.0.0 + anser: 1.4.10 + ansi-regex: 5.0.1 + babel-jest: 29.7.0(@babel/core@7.29.0) + babel-plugin-syntax-hermes-parser: 0.32.0 + base64-js: 1.5.1 + commander: 12.1.0 + flow-enums-runtime: 0.0.6 + glob: 7.2.3 + hermes-compiler: 0.0.0 + invariant: 2.2.4 + jest-environment-node: 29.7.0 + memoize-one: 5.2.1 + metro-runtime: 0.83.5 + metro-source-map: 0.83.5 + nullthrows: 1.1.1 + pretty-format: 29.7.0 + promise: 8.3.0 + react: 19.2.4 + react-devtools-core: 6.1.5 + react-refresh: 0.14.2 + regenerator-runtime: 0.13.11 + scheduler: 0.26.0 + semver: 7.7.4 + stacktrace-parser: 0.1.11 + whatwg-fetch: 3.6.20 + ws: 6.2.3 + yargs: 17.7.2 + optionalDependencies: + '@types/react': 19.2.14 + transitivePeerDependencies: + - '@babel/core' + - '@react-native-community/cli' + - '@react-native/metro-config' + - bufferutil + - supports-color + - utf-8-validate + + react-refresh@0.14.2: {} + react-remove-scroll-bar@2.3.8(@types/react@19.2.14)(react@19.2.4): dependencies: react: 19.2.4 @@ -9480,6 +11214,8 @@ snapshots: '@redis/search': 1.2.0(@redis/client@1.6.1) '@redis/time-series': 1.1.0(@redis/client@1.6.1) + regenerator-runtime@0.13.11: {} + regex-recursion@6.0.2: dependencies: regex-utilities: 2.3.0 @@ -9554,6 +11290,8 @@ snapshots: transitivePeerDependencies: - supports-color + require-directory@2.1.1: {} + require-from-string@2.0.2: {} reselect@5.1.1: {} @@ -9570,6 +11308,10 @@ snapshots: reusify@1.1.0: {} + rimraf@3.0.2: + dependencies: + glob: 7.2.3 + rollup-plugin-dts@6.3.0(rollup@4.59.0)(typescript@5.9.3): dependencies: magic-string: 0.30.21 @@ -9664,6 +11406,8 @@ snapshots: dependencies: xmlchars: 2.2.0 + scheduler@0.26.0: {} + scheduler@0.27.0: {} scroll-into-view-if-needed@3.1.0: @@ -9674,6 +11418,24 @@ snapshots: semver@7.7.4: {} + send@0.19.2: + dependencies: + debug: 2.6.9 + 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 + send@1.2.1: dependencies: debug: 4.4.3 @@ -9690,6 +11452,17 @@ snapshots: transitivePeerDependencies: - supports-color + serialize-error@2.1.0: {} + + serve-static@1.16.3: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.19.2 + transitivePeerDependencies: + - supports-color + serve-static@2.2.1: dependencies: encodeurl: 2.0.0 @@ -9739,6 +11512,8 @@ snapshots: shebang-regex@3.0.0: {} + shell-quote@1.8.3: {} + shiki@4.0.2: dependencies: '@shikijs/core': 4.0.2 @@ -9780,6 +11555,8 @@ snapshots: siginfo@2.0.0: {} + signal-exit@3.0.7: {} + signal-exit@4.1.0: {} sisteransi@1.0.5: {} @@ -9793,6 +11570,13 @@ snapshots: source-map-js@1.2.1: {} + 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: {} source-map@0.7.6: {} @@ -9808,8 +11592,20 @@ snapshots: stable@0.1.8: {} + stack-utils@2.0.6: + dependencies: + escape-string-regexp: 2.0.0 + 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@3.10.0: {} @@ -9839,6 +11635,12 @@ snapshots: string-hash@1.1.3: {} + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + string-width@7.2.0: dependencies: emoji-regex: 10.6.0 @@ -9891,6 +11693,10 @@ snapshots: dependencies: has-flag: 4.0.0 + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + supports-preserve-symlinks-flag@1.0.0: {} svgo@2.8.2: @@ -9915,6 +11721,21 @@ snapshots: term-size@2.2.1: {} + terser@5.46.1: + dependencies: + '@jridgewell/source-map': 0.3.11 + acorn: 8.16.0 + commander: 2.20.3 + source-map-support: 0.5.21 + + test-exclude@6.0.0: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.5 + + throat@5.0.0: {} + tiny-invariant@1.3.3: {} tinybench@2.9.0: {} @@ -9938,6 +11759,8 @@ snapshots: dependencies: tldts-core: 7.0.25 + tmpl@1.0.5: {} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -10002,6 +11825,10 @@ snapshots: turbo-windows-64: 2.8.16 turbo-windows-arm64: 2.8.16 + type-detect@4.0.8: {} + + type-fest@0.7.1: {} + type-is@2.0.1: dependencies: content-type: 1.0.5 @@ -10111,6 +11938,8 @@ snapshots: util-deprecate@1.0.2: {} + utils-merge@1.0.1: {} + vary@1.1.2: {} vfile-location@5.0.3: @@ -10128,7 +11957,7 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite@7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2): + vite@7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: esbuild: 0.27.3 fdir: 6.5.0(picomatch@4.0.3) @@ -10141,10 +11970,11 @@ snapshots: fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.31.1 + terser: 5.46.1 tsx: 4.21.0 yaml: 2.8.2 - vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2): + vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: esbuild: 0.27.3 fdir: 6.5.0(picomatch@4.0.3) @@ -10157,10 +11987,11 @@ snapshots: fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.31.1 + terser: 5.46.1 tsx: 4.21.0 yaml: 2.8.2 - vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2): + vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: esbuild: 0.27.3 fdir: 6.5.0(picomatch@4.0.3) @@ -10173,13 +12004,14 @@ snapshots: fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.31.1 + terser: 5.46.1 tsx: 4.21.0 yaml: 2.8.2 - vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@22.19.15)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2): + vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@22.19.15)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: '@vitest/expect': 4.0.18 - '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/pretty-format': 4.0.18 '@vitest/runner': 4.0.18 '@vitest/snapshot': 4.0.18 @@ -10196,7 +12028,7 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 @@ -10215,10 +12047,10 @@ snapshots: - tsx - yaml - vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2): + vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: '@vitest/expect': 4.0.18 - '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/pretty-format': 4.0.18 '@vitest/runner': 4.0.18 '@vitest/snapshot': 4.0.18 @@ -10235,7 +12067,7 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 @@ -10254,10 +12086,10 @@ snapshots: - tsx - yaml - vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2): + vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: '@vitest/expect': 4.0.18 - '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/pretty-format': 4.0.18 '@vitest/runner': 4.0.18 '@vitest/snapshot': 4.0.18 @@ -10274,7 +12106,7 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 @@ -10293,10 +12125,18 @@ snapshots: - tsx - yaml + vlq@1.0.1: {} + w3c-xmlserializer@5.0.0: dependencies: xml-name-validator: 5.0.0 + walker@1.0.8: + dependencies: + makeerror: 1.0.12 + + warn-once@0.1.1: {} + web-namespaces@2.0.1: {} web-vitals@5.1.0: {} @@ -10305,6 +12145,8 @@ snapshots: webpack-virtual-modules@0.6.2: {} + whatwg-fetch@3.6.20: {} + whatwg-mimetype@5.0.0: {} whatwg-url@16.0.1: @@ -10324,6 +12166,12 @@ snapshots: siginfo: 2.0.0 stackback: 0.0.2 + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi@9.0.2: dependencies: ansi-styles: 6.2.3 @@ -10332,6 +12180,17 @@ snapshots: wrappy@1.0.2: {} + write-file-atomic@4.0.2: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 3.0.7 + + ws@6.2.3: + dependencies: + async-limiter: 1.0.1 + + ws@7.5.10: {} + ws@8.19.0: {} wsl-utils@0.1.0: @@ -10352,8 +12211,20 @@ snapshots: yaml@2.8.2: {} + yargs-parser@21.1.1: {} + yargs-parser@22.0.0: {} + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + yargs@18.0.0: dependencies: cliui: 9.0.1